1. Jak zrobić, aby w ListBox każda czcionka była wyswietlana w osobnym kroju?
2. Jak zmienić datę w systemie?
3. Jak używać w swojej aplikacji innych kursorów?
4. Jak zrobić program wyszukujący daną pozycję w TListBox?
5. Jak przewijać zawartość Memo poprzez naciskanie przycisku?
6. Jak rozpoznać typy dysków jakie są w komputerze?
7. Jak wyszukać plik na dysku?
8. Jak zmienić wybraną właściwość wszystkich komponentów danego typu?
9. Jak sprawdzić czy dany plik istnieje?
10. Jak wykryć literę CD-ROM'u?
11. Jak usunąć moją aplikację z listy znajdującej się po naciśnięciu klawiszy: Ctrl + Alt + Del?
12. Jak wyciągnąć listę zainstalowanych czcionek?
13. Jak zrobić zrzut ekranu do komponentu TImage?
14. Jak odtworzyć dźwięk?
15. Jak uruchomić jakąś aplikację?
16. Jak wyłączyć komputer?
17. Jak sprawdzić naraz w dwóch TMemo, czy zawierają jakieś linie?
18. Jak dodać poziomy pasek przesuwania do TListBox?
19. Jak wyciągnąć źródło strony z TWebBrowser'a?
20. Jak obliczyć ile miejsca na dysku zajmuje katalog wraz z podkatalogami?
21. Jak odczytać rozdzielczość ekrnau?
22. Jak ukryć jakiś plik (Atrybut: Ukryty )?
23. Jak odświeżyć pulpit?
24. Jak pobrać ikonę dowolnego programu?
25. Jak pobrać uchwyt (Handle) dowolnego okna?
26. Jak sformatować datę do postaci: 25 stycznia 2001?
27. Jak regulować dźwięk przy pomocy TTrackBar'a?
28. Jak skonwertować obrazek z *.bmp na *.jpg?
29. Jak uaktywnić jakiś kopmonent, np. TEdit?
30. Jak ukryć kursor klawiatury?
31. Jak ukryć kursor myszy?
32. Jak uruchomić program przy starcie systemu?
33. Jak wyciągnąć folder w którym znajduje się plik z podanej ścieżki?
34. Jak wyciągnąć nazwę pliku z podanej ścieżki?
35. Jak sprawdzić ile miejsca na dysku zajmuje plik?
36. Jak wykonać tyle operacjii ile jest liń w TMemo?
37. Jak uzyskać listę uruchomionych aplikacjii?
38. Jak zmienić tapetę pulpitu?
39. Jak wywołać standardowe okno do wyboru katalogu?
40. Jak uzyskać systemowe ikonki?
41. Jak spośród 20 TLabel wybrać ten o najwiekszej wartości?
42. Jak w wstawić text do RichEdit w miejscu, gdzie jest kursor?
43. Jak pobrac lub ustawic pozycje kursora klawiatury?
44. Jak pobrac lub zmienic czestotliwosc migania kursora klawiatury?
45. Jak malowac po pulpicie?
1. Jak zrobić, aby w ListBox każda czcionka była wyswietlana w osobnym kroju?
1.w OnCreate listbox wpisz:
ListBox.Items := Screen.Fonts;
2.w DrawItem:
with ListBox1.Canvas do
begin
FillRect(Rect);
Font.Name := ListBox1.Items[Index];
Font.Size := 0;
TextOut(Rect.Left, Rect.Top, ListBox1.Items[Index]);
end;
3.w MeasureItem:
with ListBox1.Canvas do
begin
Font.Name := Listbox1.Items[Index];
Font.Size := 0;
Height := TextHeight('!!') ;
end;
Teraz w Inspektorze Obiektów musisz zmienić właściwość "Style" komponentu "ListBox" na "lbOwnerDrawVariable".Można to zrobić też w kombi.
2. Jak zmienić datę w systemie?
Var
Data:Systemtime;
Begin
Data.wMonth:= 05;
Data.wDay:=02;
Data.wYear:=2005;
SetLocalTime(Data);
end;
3. Jak używać w swojej aplikacji innych kursorów?
Screen.Cursors[numer_kursora]:=LoadCursorFromFile('nazwa_pliku');
Form1.Cursor:=numer_kursora;
numer_kursora jest dowolną liczbą całkowitą większą od 0 lub mniejszą od -20.
4. Jak zrobić program wyszukujący daną pozycję w TListBox?
W OnKeyUp Edit1 wpisz:
Var
I, Found : Integer;
Begin
For I := 0 to ListBox1.Items.Count -1 do
begin
Found := Pos(Edit1.Text, ListBox1.Items[i]);
if (Found > 0)and(ListBox1.Items[i][1] = Edit1.Text[1]) then
begin
ListBox1.ItemIndex := i;
Break;
end;
end;
end;
5. Jak przewijać zawartość Memo poprzez naciskanie przycisku?
Aby przewinąć linie w dół:
Memo1.Perform(WM_VSCROLL,SB_LINEDOWN,0);
Aby przewinąć linie w górę:
Memo1.Perform(WM_VSCROLL,SB_LINEUP,0);
6. Jak rozpoznać typy dysków jakie są w komputerze?
procedure JakieDyski;
var
i : Integer;
Typ : Integer;
Dysk : String;
Opis : String;
begin
for i := Ord('A') to Ord('Z') do
begin
Dysk := Chr(i) + ':\';
Typ := GetDriveType(PChar(Dysk));
case Typ of
0: Opis:='Nie można określić typu urządzenia';
1: Opis:='Na urządzeniu nie ma katalogu źródłowego';
Drive_Removable:Opis:= Dysk + ' Dysk wymienny';
Drive_Fixed: Opis:=Dysk + ' Dysk stały';
Drive_Remote: Opis:=Dysk + ' Dysk sieciowy';
Drive_Cdrom: Opis:=Dysk + ' CD-ROM';
Drive_Ramdisk: Opis:=Dysk + ' Dysk pamięciowy (RAM disk)';
end;
if(Typ<>0)and(Typ<>1)then Form1.ListBox1.Items.Add(Opis);
end;
end;
7. Jak wyszukać plik na dysku?
procedure TForm1.Button1Click(Sender: TObject);
var
Plik : Integer;
SR : TSearchRec;
Begin
Plik := FindFirst('c:\*.*',faAnyFile,SR);
while Plik = 0 do
begin
ListBox1.Items.Add(SR.Name);
Plik := FindNext(SR);
end;
FindClose(SR);
end;
8. Jak zmienić wybraną właściwość wszystkich komponentów danego typu?
Pokażę to na przykładzie: zmienię własciwość caption wszystkich labeli na 'coś'
var
x:integer;
begin
for x:=0 to ComponentCount-1 do
if Components[x] is TLabel then
TLabel(Components[x]).Caption:='coś';
end;
9. Jak sprawdzić czy dany plik istnieje?
if FileExists('C:\a.txt') then
ShowMessage('Plik isnieje!')
else
ShowMessage('Plik nie istnieje!');
10. Jak wykryć literę CD-ROM'u?
function DetectCD: string;
var
Drive : char;
DrivesCD : string;
begin
DrivesCD:='';
for Drive:='a' to 'z' do
if GetDriveType(PChar(Drive+':\'))=DRIVE_CDROM then
DrivesCD:=DrivesCD+Drive;
Result:=DrivesCD;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Drives : string;
I : integer;
begin
Memo1.Clear;
Drives:=DetectCD;
for I:=1 to Length(Drives) do
Memo1.Lines.Add(Drives[I]+':\');
end;
11. Jak usunąć moją aplikację z listy znajdującej się po naciśnięciu klawiszy: Ctrl + Alt + Del?
W sekcji "Interface" dodaj linię:
function RegisterServiceProcess(dwProcessId, dwType:dword) :Integer; stdcall;
external 'kernel32.dll'
Teraz możesz napisać:
RegisterServiceProcess(GetCurrentProcessID, 1);
Uwaga! Działa tylko w Win 9x
12. Jak wyciągnąć listę zainstalowanych czcionek?
ListBox1.Items := Screen.Fonts;
13. Jak zrobić zrzut ekranu do komponentu TImage?
Bitblt(Image.Picture.Canvas.Handle, 0, 0, Screen.Width, Screen.Height, 0, 0, 0);
14. Jak odtworzyć dźwięk?
Za pomocą komponentu TMediaPlayer:
MediaPlayer1.DeviceType := dtAutoSelect;
MediaPlayer1.FileName:='c:\a.mid';
MediaPlayer1.open;
MediaPlayer1.play;
Dodaj komponent TMediaPlayer
Za pomocą funkcji SndPlaySound:
SndPlaySound('c:\a.wav', PARAMETR);
Do sekcji Uses trzeba dodać MMSystem
A oto opisy parametrów :
SND_NODEFAULT - w razie nie znalezienia dźwięku nie odtwarza dźwieku domyślnego
SND_SYNC - na czas odtwarzania dźwięku zatrzymuje program
SND_ASYNC - odtwarza dźwięk w tle - nie zatrzymuje programu
SND_NOSTOP - odtwarza dźwięk od razu, nie sprawdzając, czy nie są odtwarzane inne
15. Jak uruchomić jakąś aplikację?
Sposób pierwszy:
Winexec('C:\windows\calc.exe', sw_normal);
Sposób drugi:
var
ProInf: TProcessInformation;
StaInf: TStartupInfo;
begin
CreateProcess('c:\windows\notepad.exe', nil, nil, nil, false, 0,
nil, nil, StaInf, ProInf);
end;
16. Jak wyłączyć komputer?
Win 9x:
ExitWindowsEx(EWX_SHUTDOWN,0)- zamknięcie systemu
ExitWindowsEx(EWX_LOGOFF,0)- wylogowanie
ExitWindowsEx(EWX_REBOOT,0) - reset
Win XP:
ShellExecute(0, nil, PChar('shutdown.exe') ,PChar('-s'), nil,SW_SHOW);
17. Jak sprawdzić naraz w dwóch TMemo, czy zawierają jakieś linie?
if (Memo1.Lines.Count>0)and(Memo2.Lines.Count>0) then
begin
//instrukcje jesli zawierają
end else
begin
//w przeciwnym wypadku...
end;
18. Jak dodać poziomy pasek przesuwania do TListBox?
W OnClick listy wpisz:
procedure TForm1.ListBox1Click(Sender: TObject);
var
S : String;
begin
if ListBox1.ItemIndex = -1 then Exit;
S := ListBox1.Items[ListBox1.ItemIndex];
ListBox1.Canvas.Font.Assign(ListBox1.Font);
if ListBox1.Canvas.TextWidth(S) > ListBox1.ClientWidth then
SendMessage(ListBox1.Handle, LB_SETHORIZONTALEXTENT,
ListBox1.Canvas.TextWidth(S) + 10, 0 )
else SendMessage(ListBox1.Handle, LB_SETHORIZONTALEXTENT, 0, 0);
end;
19. Jak wyciągnąć źródło strony z TWebBrowser'a?
Sposób 1:
uses ActiveX, MSHTML_TLB, SHDocVw_TLB,
ComCtrls, OleCtrls;
procedure TForm1.Button1Click(Sender: TObject);
var
HTMLDocument: IHTMLDocument2;
PersistFile: IPersistFile;
begin
HTMLDocument := WebBrowser1.Document as IHTMLDocument2;
PersistFile := HTMLDocument as IPersistFile;
PersistFile.Save(StringToOleStr('c:\SavedFile.html'), System.True);
end;
Sposób 2:
uses
WinInet
function HttpGetFile(const URL, FileOut: string): Boolean;
var
hOpen, hOpenUrl: HINTERNET;
buffer: array[0..63] of Char;
fsOut: TFileStream;
dwX: DWORD;
begin
Result := False;
hOpen := InternetOpen(
'',
INTERNET_OPEN_TYPE_PRECONFIG,
'', '', 0
);
if hOpen = nil then
begin
ShowMessage('InternetOpen Failed !. Please try again !');
Exit;
end;
hOpenUrl := InternetOpenURL(
hOpen,
PChar(URL),
'',
0,
INTERNET_FLAG_RELOAD or INTERNET_FLAG_HYPERLINK,
0
);
if hOpenUrl = nil then
begin
InternetCloseHandle(hOpen);
ShowMessage('InternetOpenUrl Failed ! Please try again !');
Exit;
end;
try
dwX := 0;
fsOut := TFileStream.Create(FileOut, fmCreate);
try
repeat
InternetReadFile(
hOpenUrl,
@buffer,
SizeOf(buffer),
dwX
);
fsOut.write(buffer, dwX);
until dwX < SizeOf(buffer);
Result := True;
finally
fsOut.Free;
end;
finally
InternetCloseHandle(hOpenUrl);
InternetCloseHandle(hOpen);
end;
end;
Wywołanie, np.:
procedure TFormMain.Button1Click(Sender: TObject);
begin
if HttpGetFile('http://www.dhost.info/jack1024', 'jack1024.html') then
RichEdit1.Lines.LoadFromFile('jack1024.html')
else
ShowMessage('ERROR !');
end;
Sposób 3:
function GetHtml(WebBrowser : TWebBrowser) : string;
begin
Result:=WebBrowser.OleObject.Document.documentElement.innerHTML;
end;
RichEdit.Lines.Text := GetHtml(WebBrowser);
20. Jak obliczyć ile miejsca na dysku zajmuje katalog wraz z podkatalogami?
function DirectorySize(path: string): Int64;
var
SRec: TSearchRec;
retval, oldlen : Integer;
Size : Int64;
begin
Size := 0;
if path[Length(path)] <> '\' then
path := path + '\';
oldlen := Length(path);
retval := FindFirst(path + '*.*', faAnyFile, SRec);
while retval = 0 do
begin
Size := Size + SRec.Size;
retval := FindNext(SRec);
end;
FindClose(SRec);
retval := FindFirst(path + '*.*', faDirectory, SRec);
while retval = 0 do
begin
if (SRec.Attr and faDirectory) <> 0 then
if (SRec.Name <> '.') and (SRec.Name <> '..') then
begin
path := path + SRec.Name + '\';
Size := Size + DirectorySize(path);
Delete(path, oldlen+1, 255);
end;
retval := FindNext(SRec);
end;
FindClose(SRec);
Result := Size;
end;
21. Jak odczytać rozdzielczość ekrnau?
var
Rozd : packed record
X, Y : Integer;
end;
begin
Rozd.X := GetSystemMetrics(SM_CXSCREEN);
Rozd.Y := GetSystemMetrics(SM_CYSCREEN);
ShowMessage(
Format('Rozdzialość ekranu: ' + #13+ '%d x %d', [Rozd.X, Rozd.Y]));
22. Jak ukryć jakiś plik (Atrybut: Ukryty )?
SetFileAttributes('C:\Plik.exe', FILE_ATTRIBUTE_HIDDEN);
23. Jak odświeżyć pulpit?
UpdateWindow(GetDesktopWindow);
24. Jak pobrać ikonę dowolnego programu?
Sposób 1:
var
H : HIcon;
begin
H := ExtractIcon(Handle,Nazwa Programu.exe', 0);
Image1.Picture.Icon.Assign(H);
Sposób 2:
uses ShellApi;
Image1.Picture.Icon.Handle:=ExtractIcon(Hinstance,'c:\Program.exe',32);
25. Jak pobrać uchwyt (Handle) dowolnego okna?
var
H : THandle;
begin
H:=FindWindow(nil,'Object Inspector');
26. Jak sformatować datę do postaci: 25 stycznia 2001?
ShowMessage( FormatDateTime('dd mmmm yyyy', Now) );
27. Jak regulować dźwięk przy pomocy TTrackBar'a?
W OnChange wpisz:
if TrackBar1.Position = 100 then {jeżeli bar na maxa to vol na maxa}
WaveOutSetVolume(0, $FFFFFFF)
else
WaveOutSetVolume(0, ScrollPos * 1000);
28. Jak skonwertować obrazek z *.bmp na *.jpg?
var
Bitmap : TBitmap;
JPG : TJPEGImage;
begin
try
Bitmap := TBitmap.Create;
Bitmap.LoadFromFile('C:\plik.bmp');
JPG := TJPEGImage.Create;
JPG.Assign(B);
JPG.SaveToFile('C:\plik.jpg');
finally
B.Free;
JPG.Free;
end;
end;
29. Jak uaktywnić jakiś kopmonent, np. TEdit?
30. Jak ukryć kursor klawiatury?
HideCaret(Edit1.Handle); -> ukryj
ShowCaret(Edit1.Handle); -> pokaż
31. Jak ukryć kursor myszy?
ShowCursor(False); -> ukryj
ShowCursor(True); -> pokaż
32. Jak uruchomić program przy starcie systemu?
Sposób 1 - dodanie wpisu do rejestru:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServicesOnce
Pierwsze dwóch klucze - program uruchamiami się po zalogowaniu
Klucze 3 i 4 - program uruchamiami się przed zalogowaniem
Oto przykładowy kod procedury:
uses Registry;
var
Reg : TRegistry;
begin
Reg := TRegistry.Create;
Reg.RootKey := HKEY_LOCAL_MACHINE;
Reg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run', False);
Reg.WriteString('MójProgram',Application.Exename);
Reg.CloseKey;
Reg.Relase;
Sposób 2 - dodanie skrótu do Menu Start (grupa Autorun):
uses ShlObj, ActiveX, ComObj, Registry;
var
MyObject:IUnknown;
MySLink:IShellLink;
MyPFile:IPersistFile;
FileName:String;
Directory:String;
WFileName:WideString;
Reg:TRegistry;
begin
MyObject:=CreateComObject(CLSID_ShellLink);
MySLink:=MyObject as IShellLink;
MyPFile:=MyObject as IPersistFile;
FileName:=Application.Exename;
with MySLink do
begin
SetArguments('C:\AUTOEXEC.BAT');
SetPath(PChar(FileName));
SetWorkingDirectory(PChar(ExtractFilePath(FileName)));
end;
Reg := TRegistry.Create;
Reg.RootKey := HKEY_CURRENT_USER;
Reg.OpenKey('Software\MicroSoft\Windows\CurrentVersion\Explorer\Shell Folders',
False);
Directory := Reg.ReadString('Startup')
WFileName := Directory+'\Program.lnk';
MyPFile.Save(PWChar(WFileName),False);
Reg.CloseKey;
Reg.Relase;
33. Jak wyciągnąć folder w którym znajduje się plik z podanej ścieżki?
function ED(Filename:string):string;
var
s:string;
begin
s:=Filename;
while Pos('\',s[length(s)])=0 do
delete(s,length(s),1);
delete(s,length(s),1);
result:=s;
end;
34. Jak wyciągnąć nazwę pliku z podanej ścieżki?
function EF(Filename:String):String;
begin
while (Pos('\',Filename)<>0)or(Pos('/',Filename)<>0) do
delete(Filename,1,1);
EF:=Filename;
end;
35. Jak sprawdzić ile miejsca na dysku zajmuje plik?
var
Plik : TSearchRec;
FSize : Integer;
const // sciezka do programu
Sciezka = 'C:\Windows\Pulpit\prog.exe';
begin
if FindFirst(Sciezka, faAnyFile, Plik) = 0 then
FSize:= PLik.Size else FSize:=0;
FindClose(PLik);
// wyswietl rozmiar pliku
ShowMessage(IntToStr(FSize) + ' bajtów');
36. Jak wykonać tyle operacjii ile jest liń w TMemo?
Wystarczy skorzystać z pętli for:
var
x:integer;
begin
for x:=9 to memo1.count-1 do
begin
{instrukcje}
end;
end;
[instrukcje] będą powtarzane tyle razy ile jest liń w TMemo.
37. Jak uzyskać listę uruchomionych aplikacjii?
uses TlHelp32;
procedure TForm1.btnAddEXEClick(Sender: TObject);
var
_HWND : THandle;
Proc : TProcessEntry32;
begin
_HWND := CreateToolHelp32SnapShot(TH32CS_SNAPALL,0);
Proc.dwSize:=SizeOf(Proc); // okresl rozmiar struktory
if Integer(Process32First(_HWND, Proc)) <> 0 then
repeat
ListBox1.Items.Add(Proc.szExeFile); //dodaje sciezkie do Listy
until Integer(Process32Next(_HWND, Proc)) = 0; //dopoki wartosc <> 0
CloseHandle(_HWND);
end;
38. Jak zmienić tapetę pulpitu?
SystemParametersInfo(SPI_SETDESKWALLPAPER,0, 'c:\tapeta.jpg',
SPIF_UPDATEINIFILE or SPIF_SENDWININICHANGE);
39. Jak wywołać standardowe okno do wyboru katalogu?
uses ShlObj,ActiveX;
procedure TForm1.Button1Click(Sender: TObject);
var
BI:TBrowseInfo;
Buf:PChar;
Dir,Root:PItemIDList;
Alloc:IMalloc;
begin
// Pobieramy obiekt zarządzający pamięcią
SHGetMalloc(Alloc);
// Przydzielamy pamięć na string
Buf:=Alloc.Alloc(Max_Path);
// Ograniczamy wybór tylko do katalogu "Menu Start\Programs"
SHGetSpecialFolderLocation(Handle,CSIDL_PROGRAMS,Root);
with BI do
begin
hwndOwner:=Form1.Handle;
pidlRoot:=Root; //Można podać NIL żeby można było wybrać każdy katalog
pszDisplayName:=Buf;
lpszTitle:='Wybierz katalog'; // Etykietka przed listą katalogów
ulFlags:=0;
lpfn:=nil;
end;
try
Dir:=SHBrowseForFolder(BI);
if Dir<>Nil then
begin
// Pobieramy pełną ścieżkę do katalogu
SHGetPathFromIDList(Dir,Buf);
// Przykładowe zastosowanie
ShowMessage(Buf);
Alloc.Free(Dir);
end;
finally
Alloc.Free(Root);
Alloc.Free(Buf);
end;
end;
Inne możliwe do wybrania katalogi specjalne:
CSIDL_BITBUCKET RecycleBin czyli kosz na śmieci
CSIDL_CONTROLS Wirtualny katalog ControlPanel
CSIDL_DESKTOP Wirtualny katalog Desktop
CSIDL_DESKTOPDIRECTORY Katalog na dysku przechowujący obiekty z desktopu
CSIDL_DRIVES My Computer
CSIDL_FONTS Wirtualny folder z fontami
CSIDL_NETHOOD Otoczenia sieciowe
CSIDL_NETWORK Wirtualny odpowiednik powyższego
CSIDL_PERSONAL Katalog Personal
CSIDL_PRINTERS Wirtualny folder z drukarkami
CSIDL_PROGRAMS Programy z menu Start
CSIDL_RECENT Ostatnio użyte dokumenty
CSIDL_SENDTO Folder SendTo
CSIDL_STARTMENU Całe StartMenu
CSIDL_STARTUP Grupa Autostart
CSIDL_TEMPLATES Szablony dokumentów
40. Jak uzyskać systemowe ikonki?
Image1.Picture.Icon.Handle := LoadIcon(0, IDI_APPLICATION);
Istnieje możliwość zastosowania także tych ikonek:
IDI_ASTERISK
IDI_EXCLAMATION
IDI_HAND
IDI_QUESTION
IDI_WINLOGO
41. Jak spośród 20 TLabel wybrać ten o najwiekszej wartości?
function PobierzNajwieksza: Integer;
var
Najwieksza: Integer;
begin
Najwieksza := -MaxInt;
for i := 0 to Form.ComponentCount - 1 do
if Form.Components[i] is TLabel then
with Form.Components[i] as TLabel do
Najwieksza := Max(StrToInt(Caption), Najwieksza);
Result := Najwieksza;
end;
42. Jak w wstawić text do RichEdit w miejscu, gdzie jest kursor?
RichEdit1.SelText:='MST';
Kiedy zaznaczymy w RichEdit jakiś tekst i wywołamy tą procedurę to tekst ten zostanie zamieniony na 'MST'.
43. Jak pobrac lub ustawic pozycje kursora klawiatury?
var Punkt:TPoint;
SetCaretPos(0,0); //Ustaw
GetCaretPos(Punkt); //Pobierz
44. Jak pobrac lub zmienic czestotliwosc migania kursora klawiatury?
SetCaretBlinkTime(200); //ustaw na 200mS
x:=GetCaretBlinkTime; //pobierz
45. Jak malowac po pulpicie?
Wystarczy pobrac uchwyt pulpitu:
Canvas.Handle := GetWindowDC(GetDesktopWindow);
Canvas.TextOut(100,100, 'MST KJ');
ReleaseDC(GetDesktopWindow, Canvas.Handle);
|