OLE сыныбы автоматты түрде нысан жасайтын сервер бағдарламасын анықтайды. Мысалы, егер нысан сыныбы .doc құжаты болса, ол Word бағдарламасын пайдалана отырып жасалды.
OLE құжаттары OLE нысанының деректерін қамтитын бастапқы файлға сілтеме жасайды. Кез-келген құжат тиісті объекті болуы керек (яғни ендірілмеген), өйткені тиісті құжаттардың деректері файлда сақталуы тиіс.
OLE элементі құжаттың қай бөлігіне басқа құжатқа байланыстырылатын немесе ендірілетін деректерді анықтайды. Осылайша, бүкіл құжаттың орнына, бірнеше құжаттарды өздерінің деректерінің кішкене бөлігі ғана байланыстыра аласыз. OLE элементтері нысандардың өлшемін азайтады.
Сонымен, COM дегеніміз не? Бұл сұраққа жауап беру үшін бағдарламалық жасақтаманың бір бөлігі басқа бөлік ұсынатын қызметтерге қалай қол жеткізуі керек екенін түсінуі керек. Кітапханамен байланысы бар қолданбалар осы кітапханадан функцияларды шақыратын қызметтерді пайдалана алады. Өтінім басқа да қосымшалардың қызметтерін пайдалана алады, бұл толықтай жеке процесс. Бұл жағдайда екі жергілікті процестер белгілі бір байланыс механизмі арқылы өзара әрекеттеседі, бұл әдетте осы қосымшалар арасындағы хаттаманы анықтауды талап етеді (бір өтінімге сұраулар жіберуге мүмкіндік беретін хабарлар жиынтығы және екіншісіне тиісті түрде жауап беру). Мысалы, бағдарлама амалдық жүйенің қызметтерін немесе басқа компьютерде жұмыс істейтін бағдарламалық жасақтама қызметтерін пайдаланады. Мәселе мынада, бағдарламалық қамтамасыз етудің бір бөлігі басқа бөлік ұсынатын қызметтерге қол жеткізуі керек. Бірақ әр жағдайда, қол жеткізу механизмі әртүрлі.
COM технологиясында, қолданбаның COM нысандарын пайдалану арқылы оның қызметтерін пайдалануға болады. Бір бағдарламада кем дегенде бір нысан бар. Әрбір нысанның бір немесе бірнеше интерфейсі бар. Әрбір интерфейс қасиеттерге (деректерге) және операцияларды жасауға мүмкіндік беретін объектілі әдістерді біріктіреді. Әдетте, бір типті операцияларды орындайтын немесе біртекті қасиеттермен жұмыс істейтін барлық әдістер интерфейсте біріктіріледі.
Клиент тек қана интерфейс пен оның әдістерінің көмегімен объектінің қызметтеріне қол жеткізеді. Бұл механизм - кілт.
Объектінің қасиеттері мен әдістерінің құрамы туралы толық ақпарат алу үшін клиенттің бірнеше негізгі интерфейстерін білуі жеткілікті. COM спецификациясына сәйкес, бұрыннан жасалған интерфейс ешқандай жағдайда өзгермейді. Бұл кез-келген жаңартуларға қарамастан, қосымшалардың әрқашан COM негізінде жұмыс істейтіндігін қамтамасыз етеді.
Объект әрдайым COM серверінде жұмыс істейді. Сервер динамикалық кітапхана немесе орындалатын файл болуы мүмкін. Нысанда өз қасиеттері мен әдістерінің болуы немесе сервер деректерін және қызметтерін пайдалану мүмкін. Нысан әдістеріне қол жеткізу үшін, клиент тиісті интерфейске көрсеткішті алу керек. Әр интерфейс үшін таңдамалы көрсеткіш бар. Осыдан кейін клиент объектінің қызметтерін пайдалана алады, жай ғана оның әдістерін шақыра алады. Объектілердің қасиеттеріне қол жеткізу тек оның әдістері арқылы жүзеге асады.
COM нысаны электрондық кестеге ендірілсін делік. Клиент пен объект арасындағы өзара әрекеттесуді COM негізгі механизмдері қамтамасыз етеді; клиент клиенттің бағдарламалық жасақтамасының тұрғысынан, сол процестің мекенжай кеңістігінде, басқа процесте немесе басқа компьютерде жасырады, сондықтан, клиенттің бағдарламалық жасақтамасын әзірлеуші тұрғысынан, электрондық кестенің функцияларын пайдалану нысанның әдісіне қалыпты сілтеме сияқты көрінеді.
Сұрақ пайда болады: COM нысанын жасау және инициализациялау клиенттің бірінші данасында қалай пайда болады? Операциялық жүйе олардың біреуі қажет болған жағдайда тіркелген барлық сыныптардың даналарын өз бетімен жасауға тиіс емес. Бірақ объектінің жұмысы үшін сізге серверлер қажет. Windows жүктеген сайын Word, Excel, Internet Explorer және т.б. іске қосылғанын елестетіп көріңіз.
Кез келген COM нысаны оның қасиеттері мен әдістерін сипаттайтын кейбір сыныптың тұрақты данасы болып табылады. Осы операциялық жүйеде тіркелген және қол жетімді барлық COM сыныптары туралы ақпарат арнайы сыныптағы COM кітапханасында жиналады, ол объект классының данасын бастау үшін пайдаланылады.
Біріншіден, клиент қажетті кітапхананың атауын және бірінші қажетті интерфейсті тапсыру арқылы COM кітапханасына кіреді. Кітапхана қажетті классты табады және алдымен серверді бастайды, содан кейін сыныптың даналық объектісін жасайды. Осыдан кейін кітапхана объектіге және интерфейске клиенттік көрсеткішке қайтарады. Кейінгі жұмыста клиент тікелей объектіге
және оның интерфейстеріне жүгіне алады.
Біріншіден, клиент кітапханаға қажетті кітапхананы және оған қажетті COM интерфейсімен кіреді. Кітапхана қажетті класты табады және алдымен серверді бастайды, содан кейін сыныптың даналық объектісін жасайды. Содан кейін кітапхана объекіге және Интерфейс тұтынушы көрсеткішке қайтарды. Жобаның объектісі болып табылатын «Каяйинг жимиста» клиенті алға интерфейсінде.
Сұрақ туындайды: клиент объект туралы ақпаратты қалай ала алады? Мысалы, клиент бағдарламалық жасақтамасының әзірлеушісі электрондық кестенің COM сипаттамасына сәйкес жасалғанын біледі, бірақ клиенттерге оның қызметтерімен қамтамасыз ететін COM нысандары туралы білмейді.
Осындай жағдайларды шешу үшін, COM нысанының әзірлеушісі объектімен бірге түр туралы ақпарат таратуы мүмкін. Онда интерфейстер, олардың қасиеттері мен әдістері, әдістің параметрлері туралы ақпарат бар. Бұл ақпарат арнаулы интерфейсті анықтау тілі (IDL) арқылы жасалған түр кітапханасында болады.
Енді Delphi-да COM нысандарын жасау механизмін қарастырыңыз. Жоғарыда айтылғандай, COM нысаны интерфейске сілтегіш арқылы қол жетімді әдістердің белгілі бір тіркесімі ретінде түсінікті интерфейстердің ерікті санын жасау мүмкіндігін қамтамасыз етуі керек.
Осындай талаптарды объектілі-бағдарлы бағдарламалаудың стандартты тәсілдері шеңберінде тікелей орындау өте қиын. Delphi- де бұл іске асыру төменде келтірілген. COM нысанының өзі әдеттегі TComObject сыныбы арқылы сипатталады, ол тікелей TObject-ден жасалады.
Нысанның мақсатын жүзеге асыратын барлық қасиеттер мен әдістер өзінің декларациясында жарияланады және сипатталады, сондықтан жаңа COM нысанының сыныбы негізінен өзгеше болмайды. TComObject сыныбы COM объектісін жасайтын негізгі нысан функцияларын қамтамасыз етеді. Төменде Excel кестесін OLE автоматтандыру механизмі арқылы қол жеткізудің мысалы келтірілген. Excel және Word бағдарламаларына қатысты OLE автоматтандыруын пайдалану VBA анықтамасы барлық бағдарламалардың, сипаттар мен әдістердің сипаттамасын қамтитын осы бағдарламаға ендірілгеніне байланысты жеңілдетілген. Осылайша, әзірлеуші Delphi қосымшасынан жұмыс істеуге мүмкіндік алады.
9.2. DELPHI-дегі OLE АВТОМАТТАНДЫРУДЫ EXCEL кестесі АРҚЫЛЫ КӨРСЕТУ
Код редакторындағы MS Excel серверімен байланыс орнату үшін, пайдалану бөліміндегі ComObj модулін пайдаланыңыз. Бұл модуль COM нысандарымен жұмыс істеу үшін қажетті барлық функцияларды сипаттайды. Төменде MS Excel тізіміндегі бағдарлама кодының мысалы болып табылады, ол BookTable кестесінде сақталады:
procedure TMainForm.ExcelButtonClick(Sender
: TObject);
var XLApp,Sheet,Colum:Variant; index,i:Integer;
begin
XLApp:= CreateOleObj
ect('Excel.Application'); XLApp.Visible:=true; XLApp.Workbooks.Add(-4167); XLApp.Workbooks[1].WorkSheets[1].Name:='Есе
п';
Colum:=XLApp.Workbooks[1].WorkSheets['Есеп'
].Columns;
Colum.Columns[1].ColumnWidth:=20; Colum.Columns[2].ColumnWidth:=20; Colum.Columns[3].ColumnWidth:=20; Colum.Columns[4].ColumnWidth:=20; Colum.Columns[5].ColumnWidth:=20;
Colum:=XLApp.Workbooks[1].WorkSheets['Есеп'
].Rows; Colum.Rows[2].Font.Bold:=true; Colum.Rows[1].Font.Bold:=true; Colum.Rows[1].Font.Color:=clBlue; Colum.Rows[1].Font.Size:=14;
Sheet:=XLApp.Workbooks[1].WorkSheets["Есеп"
];
Sheet.Cells[1,2]:='Тауар тізімі';
Sheet.Cells[2/1]:='аталуы м'; Sheet.Cells[2,2]
='Өлшем бірлігі '
; Sheet.Cells[2,3]:='Бағасы';
Sheet.Cells[2,4]:='Қал дығы'; index:=3;
DataModule1.BookTable.First;
for i:=0 to DataModule1.BookTable.RecordCount-1 do
begin
Sheet.Cells[index,1]:=DataModule1.BookTable
.Fields.Fields[1].
AsString; Sheet.Cells[index,2]:=DataModule1.BookTable
.Fields.Fields[2].
AsString; Sheet.Cells[index,3]:=DataModule1.BookTable
.Fields.Fields[3].
AsInteger; Sheet.Cells[index,4]:=DataModule1.BookTable
.Fields.Fields[5].A
sInteger;
Inc(index);
DataModule1.BookTable.Next; end;
end;
Кодтың бірінші жолы Excel нысанын жасайды және оны XLApp айнымалысына жазады:
XLApp:= CreateOleObj
ect('Excel.Application');
CreateOleObject функциясы COM технологиясы бойынша басқа бағдарламамен байланыс орнатуға мүмкіндік береді. Осыған байланысты деректерді басқа қолданбаларға тасымалдауға болады. Ол үшін қосылым жасалатын бағдарлама деректерді сыртқы (мысалы, Word немесе Excel) қабылдау үшін тиісті мүмкіндіктері болуы керек, сондықтан сіз жұмыс істей алатын функциялар туралы білуіңіз керек.
Екінші код коды Excel бағдарламасын көрсетуді күшейтеді.
Содан кейін жаңа жұмыс кітабы қосылады:
XLApp.Workbooks.Add(-4167);.
Жақшадағы нөмір тұрақты болып табылады, яғни кітапты жасауды білдіреді және оны өзгерте алмайсыз. Барлық тұрақты мәндер туралы қосымша ақпаратты әзірлеуші нұсқаулығынан табуға болады. Бұдан әрі осы кітаптың атауы қалыптасады:
XLApp.Workbooks[1].WorkSheets[1].Name:='Отч
ет';
Бұл әрекет міндетті емес, бірақ бұл қажет, өйткені әдепкі
атау «Sheet 1».
Енді бізде Excel жұмыс істейді және жаңа кітап жасайды, сіз деректерді жіберуді жүзеге асыра аласыз. Бірақ бұған дейін бағандар мен жолдарды пішімдеу қажет; бұл үшін жұмыс кітабының бағандарында индексті алу керек:
Colum:=XLApp.Workbooks[1].WorkSheets['Отчет '].Columns;
Нәтиже Variant түрінің Varium айнымалысына жазылады.
Енді баған енін өзгертеміз (ColumnWidth):
Colum.Columns[1].ColumnWidth:=20;
Содан кейін бір айнымалы мәнде жұмыс кітабының жолдарына көрсеткішті жазыңыз:
Colum:=XLApp.Workbooks[1].WorkSheets['0T4eT '].Rows;
Есептің бірінші екі жолында шрифт түрін орнатыңыз:
Colum.Rows[2].Font.Bold:=true; Colum.Rows[1].Font.Bold:=true;
Төрт жақшаларда енді сызық нөмірі бар. Содан кейін,
бірінші жолдың түстерін көк түске орнатыңыз және қаріп өлшемі 14: Colum.Rows[1].Font.Color:=clBlue; Colum.Rows[1].Font.Size:=14;
Пішімдеу аяқталды, енді сіз деректерді жібере аласыз. Мұны істеу үшін параққа көрсеткішті аламыз:
Sheet:=XLApp.Workbooks[1].WorkSheets['Отчет
'];
Деректерді көрсету үшін, сізге мәнді тағайындау керек
Sheet.Cells[строка, колонка]
Кестенің шығу кодын қарастырыңыз:
index:=3; DataModule1.BookTable.First;
for i:=0 to DataModule1.BookTable.RecordCount-1 do
begin
Sheet.Cells[index,1]:=DataModule1.BookTable
.Fields.Fields[1].
AsString; Sheet.Cells[index,2]:=DataModule1.BookTable
.Fields.Fields[2].
AsString; Sheet.Cells[index,3]:=DataModule1.BookTable
.Fields.Fields[3].
AsInteger; Sheet.Cells[index,4]:=DataModule1.BookTable
.Fields.Fields[5].
AsInteger;
Inc(index);
DataModule1.BookTable.Next;
end;
Айнымалы индекс енді Excel кестесінің қандай жолын
көрсететінін көрсетеді. Алғашқы екі жол баяндама тақырыбы бойынша жұмыс істеп тұрғандықтан, деректер үшінші жолдан шығуы керек (index = 3). Excel бағдарламасындағы жолдар мен кестелер қалған кестелерде және массивтердегідей нөлден емес, бірден басталады.
Осыдан кейін, ADOTable құрамдас бөлігінің бірінші әдісін қолданып, дерекқордағы кестенің бірінші жолына өтеміз. Бұл пайдаланушы есеп кестесін басудан бұрын кестенің ортасындағы кез келген жолды таңдауы мүмкін, себебі бұл есеп осы таңдалған жолдан шығады.Енді барлық циклдар айналдырылатын циклды бастау шарттары дайындалып, олардан ақпарат Excel бағдарламасына қойылады. Цикл нөлдік жолдан басталады және кестедегі жолдар санының мәніне жеткенге дейін жалғасады:
For i:=0 to DataModule1.BookTable.RecordCount-1
Осылайша, біз барлық жазбаларды өткізіп, әрбір жазбаны Excel-ге, дәйекті барлық бағандарға жаздық (1-5).
Бұл OLE автоматтандыруымен орындалатын типтік операцияларды шолуды аяқтайды. Жалпы, OLE автоматтандыруды
пайдалану VB-ге өте жақын және жоғарыда қарастырылмайтын Excel-мен жұмыс істеудің барлық мүмкіндіктерін Excel бағдарламасының кіріктірілген бағдарламасымен танысу арқылы іске асыруға болады.
Біз Excel-мен жұмыс істеуді қарастырдық. Word бағдарламасымен жұмыс істеу үшін, OLE автоматикасы ұқсас түрде пайдаланылады, тек нысандар, олардың қасиеттері мен әдістер Excel- тен ерекшеленеді. Word бағдарламасының жаңа данасын келесідей:
uses ComObj; var
WordApp:Variant; WordApp:=CreateOleObject('Word.Application'
);
WordApp.Visible:=true;
Көріп отырғаныңыздай, Excel бағдарламасымен
байланысудың жалғыз айырмашылығы - басқа класқа арналған атау, ал басқалары Excel бағдарламасымен бірге жұмыс істейтін барлық қарастырылған әдістер Word функциясына, мүмкіндіктері ескерілгенде қолданылады.
Достарыңызбен бөлісу: |