Работа с екрана в Delphi, Delphi, Delphi компоненти, Delphi изходни кодове

Работа с екрана в Delphi

За първия бутон напишете съдържанието на списъка в събитието onclick:

С тази процедура рисуваме директно на екрана, извън областта на прозореца на нашата програма. Докато рисуваме, не обръщаме внимание на работещите приложения. Ако се натъкнат, тогава върху тях се появява рисуване.

Сега за съдържанието на програмния код. Първо се декларира променливата ScreenDC от тип hdc. hdc е тип контекст за рисуване за самия Windows и работи почти по същия начин като TCanvas (ще видите връзката малко по-късно). С помощта на функцията GetDC(0) получаваме контекста на прозореца, определен като параметър. Но скобата е 0 (нула), а не указател към реално устройство или прозорец. Това означава, че искаме да получим глобалния контекст, т.е. самия екран.

След това се извиква функцията Rectangle, която е подобна на тази, която използвахме по-рано, когато работехме сTCanvas.Rectangle платното. Има само една разлика - първият параметър вече е контекстът на устройството, а след това координатите на правоъгълника. Това се дължи на факта, че по-рано рисувахме чрез обекта TCanvas, който е прикрепен към конкретен компонент. А това означава, че обектът може независимо да замени указател към своя обект. Сега ще рисуваме с помощта на GDI Windows. Неговата функция Rectangle е обща и не е свързана с конкретни контроли или прозорци. Честно казано, процедурата TCanvas.Rectangle просто извиква Rectangle от Windows API и замества желания контекст и размери на устройството, така че има един параметър по-малко. Сега го правим сами без помощта на TCanvas.

След изчертаване, вече ненужният контекст на изчертаване се освобождава чрез функцията ReleaseDC. Такива неща трябва да се правят, за да не се запушва паметта.

Ако искате да рисуватена екрана, но вътре в определен прозорец, тогава при тази процедура трябва да се коригира само първият ред. А именно, като параметър GetDC, подайте указател към прозореца.

Сега можете да стартирате програмата и да видите резултата. Сега да преминем към втория бутон. За него нека напишем (за процедурата за събитие onclick) съдържанието на списъка:

Тук получаваме копие на екрана и го съхраняваме в компонента image1.

Първият ред е същият като в предишната процедура. Получаваме контекста за чертане на екрана по същия начин. След това променливата canvas от тип TCanvas (познатият контекст на рисуване) се инициализира. След това ги свързваме заедно с просто присвояване вcanvas.Handle:=screenDC. Сега TCanvas сочи към екрана и можете да рисувате върху него по обичайния начин. Сега можете да видите връзката между платното и контекста на рисуване на hdc. Обектът canvas винаги съдържа указател към контекста на рисуване на hdc в своето свойство handle и използва този контекст, когато извиква всички свои методи (като Rectangle). За компонентите на Delphi това свойство се попълва автоматично и не е нужно да се притесняваме за това.

Оказва се, чеTCanvas е обект, който опростява API функциите в Windows и превръща работата с графики в обектна.

След това получаваме копие на екрана и го записваме в изображението Timage с помощта на функцията CopyRect.В контекста на рисуване на изображение (imagel .Canvas .CopyRect).

След копирането трябва да освободите контекста за чертане на ScreenDC и създаденото платно, за да освободите разпределената памет.