<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="https://gsbelarus.com:80/gs/wiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>https://gsbelarus.com:80/gs/wiki/index.php?action=history&amp;feed=atom&amp;title=%D0%9F%D0%B0%D0%B4%D1%82%D1%80%D1%8B%D0%BC%D0%BA%D0%B0_%D0%B1%D1%83%D1%84%D0%B5%D1%80%D0%B0</id>
		<title>Падтрымка буфера - История изменений</title>
		<link rel="self" type="application/atom+xml" href="https://gsbelarus.com:80/gs/wiki/index.php?action=history&amp;feed=atom&amp;title=%D0%9F%D0%B0%D0%B4%D1%82%D1%80%D1%8B%D0%BC%D0%BA%D0%B0_%D0%B1%D1%83%D1%84%D0%B5%D1%80%D0%B0"/>
		<link rel="alternate" type="text/html" href="https://gsbelarus.com:80/gs/wiki/index.php?title=%D0%9F%D0%B0%D0%B4%D1%82%D1%80%D1%8B%D0%BC%D0%BA%D0%B0_%D0%B1%D1%83%D1%84%D0%B5%D1%80%D0%B0&amp;action=history"/>
		<updated>2026-07-16T21:48:22Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.19.16</generator>

	<entry>
		<id>https://gsbelarus.com:80/gs/wiki/index.php?title=%D0%9F%D0%B0%D0%B4%D1%82%D1%80%D1%8B%D0%BC%D0%BA%D0%B0_%D0%B1%D1%83%D1%84%D0%B5%D1%80%D0%B0&amp;diff=2144&amp;oldid=prev</id>
		<title>SYSDBA в 17:26, 5 октября 2007</title>
		<link rel="alternate" type="text/html" href="https://gsbelarus.com:80/gs/wiki/index.php?title=%D0%9F%D0%B0%D0%B4%D1%82%D1%80%D1%8B%D0%BC%D0%BA%D0%B0_%D0%B1%D1%83%D1%84%D0%B5%D1%80%D0%B0&amp;diff=2144&amp;oldid=prev"/>
				<updated>2007-10-05T17:26:50Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;У базавы клас [[TgdcBase]] закладзена падтрымка аперацыяў з буферам абмена (капіраваньне, альбо выразаньне аб'екта, ці аб'ектаў і змяшчэньне іх у буфер, а таксама ўстаўка аб'ектаў з буфера).&lt;br /&gt;
&lt;br /&gt;
За капіраваньне аб'ектаў у буфер адказвае метад CopyToClipboard. Ен мае два параметры. Першы, сьпіс закладак запісаў, якія трэба скапіраваць з бягучага датасету ў буфер. Можа быць НІЛ, у гэтым выпадку толькі бягучы запіс з датасэта трапіць ў буфер. Другі параметр -- булеўская велічыня, якая паказвае: трэба &amp;quot;выразаць&amp;quot; запісы ці капіраваць. Па ўмаўчаньню другі параметр мае значэньне Ілжа. Метад чакае, што датасет адкрыты і ў ім ёсць прынамсі адзін запіс.&lt;br /&gt;
&lt;br /&gt;
Для ўстаўкі запісаў з буферу неабходна вызваць метад PasteFromClipboard. Гэты метад не мае параметраў і вяртае Посьпех, альбо Няўдачу ў залежнасці ад таго сапраўды адбылася ўстаўка запісаў, ці не (былі памылкі, буфер ня меў адпаведных дадзеных і г.д.).&lt;br /&gt;
&lt;br /&gt;
Каб праверыць, ці ёсць у буферы дадзеныя, прыдатныя для ўстаўкі, трэба выклікаць функцыю CanPasteFromClipboard, якая вяртае адпаведнае булеўскае значэньне.&lt;br /&gt;
&lt;br /&gt;
==Як гэта працуе==&lt;br /&gt;
&lt;br /&gt;
===Структура TgdcClipboardData===&lt;br /&gt;
&lt;br /&gt;
Для перадачы дадзеных праз буфер Гедымін мае свой адмысловы фармат, які рэгіструецца пры запуску сістэмы і ягоны ідэнтыфікатар захоўваецца ў глабальнай зьменнай gdcClipboardFormat, аб'яўленнай у модулі [[gdcBase.pas]].&lt;br /&gt;
&lt;br /&gt;
Праз буфер перадаецца структура тыпу [[TgdcClipboardData]], аб'яўленная наступным чынам:&lt;br /&gt;
&lt;br /&gt;
  TObjectData = record&lt;br /&gt;
    ID: TID;&lt;br /&gt;
    ObjectName: array[0..63] of Char;&lt;br /&gt;
    ClassName: array[0..63] of Char;&lt;br /&gt;
    SubType: array[0..63] of Char;&lt;br /&gt;
  end;&lt;br /&gt;
 &lt;br /&gt;
  TObjectArr = array[0..0] of TObjectData;&lt;br /&gt;
 &lt;br /&gt;
  PgdcClipboardData = ^TgdcClipboardData;&lt;br /&gt;
 &lt;br /&gt;
  TgdcClipboardData = record&lt;br /&gt;
    Signature: Longint;&lt;br /&gt;
    Version: Longint;&lt;br /&gt;
    ClassName: array[0..63] of Char;&lt;br /&gt;
    SubType: array[0..63] of Char;&lt;br /&gt;
    Obj: TgdcBase;&lt;br /&gt;
    Cut: Boolean;&lt;br /&gt;
    ObjectCount: Integer;&lt;br /&gt;
    ObjectArr: TObjectArr;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
Палі '''Signature''' і '''Version''' выкарыстоўваюцца для спраўджваньня дадзеных, што знаходзяцца ў буферы. Бягучыя значэньні задаюцца канстантамі '''gdcCurrentClipboardSignature''' і '''gdcCurrentClipboardVersion'''.&lt;br /&gt;
&lt;br /&gt;
Калі дадзеныя ў буферы сфармаваныя праз метад CopyToClipboard пэўнага бізнэс аб'екта, палі '''ClassName''' і '''SubType''' будуць утрымліваць імя ягонага класа і падтып. Поле '''Obj''' будзе утрымліваць спасылку на гэты аб'ект. Магчыма, што дадзеныя ў буфер трапяць не праз бізнэс аб'ект, у гэтым разе вышэй азначаныя палі будуць утрымліваць пустыя строкі, а поле '''Obj''' будзе раўняцца nil.&lt;br /&gt;
&lt;br /&gt;
'''Cut''' паказвае якая аперацыя была выклікана: Капіраваньне, ці Выразаньне.&lt;br /&gt;
&lt;br /&gt;
'''ObjectCount''' паказвае колькасць аб'ектаў, што перадаюцца праз буфер. Інфармацыя пра самі аб'екты передаецца ў масіве ObjectArr. Кожны элемент масіву -- гэта запіс тыпу TObjectData. Запіс утрымлівае інфармацыю пра ідэнтыфікатар, клас, падтып і імя перадаваемага аб'екта.&lt;br /&gt;
&lt;br /&gt;
===Запіс дадзеных у буфер===&lt;br /&gt;
&lt;br /&gt;
Функцыя CopyToClipboard выконвае ўсю неабходную працу па выдзяленьню блока памяці пад структуру TgdcClipboardData і запаўненьню яго дадзенымі. Паралельна з дадзенымі ва ўласным фармаце ў буфер запісваецца і тэкставы сьпіс ідэнтыфікатараў і імен аб'ектаў.&lt;br /&gt;
&lt;br /&gt;
Калі датасэт закрыты, альбо пусты выклік функцыі прывядзе да выключнай сітуацыі EgdcException.&lt;br /&gt;
&lt;br /&gt;
Перакрываць дадзены метад мае сэнс толькі, еслі будзе неабходна падтрымліваць нейкі іншы фармат дадзеных.&lt;br /&gt;
Устаўка запісаў з буфера&lt;br /&gt;
&lt;br /&gt;
Метад PasteFromClipboard правярае дадзеныя, што знаходзяцца ў буферы на карэктнасць і вызывае метад AcceptClipboard перадаваючы туды ўказальнік на структуру TgdcClipboardData. AcceptClipboard мусіць вярнуць Посьпех, калі аб'екты былі ўстаўленыя і Няўдачу, калі паўсталі нейкія перашкоды. У базавым класе AcceptClipboard ня робіць нічога. Гэты метад мусіць быць перакрыты ў нашчадках.&lt;/div&gt;</summary>
		<author><name>SYSDBA</name></author>	</entry>

	</feed>