1. Jak wy╢wietliµ obrazek
z rozszerzeniem *.jpg?
2. Jak wstawiµ do RichEdit jakie╢ symbole?
3. Jak wycinaµ, wklejaµ tekst do schowka?
4. Jak wczytaµ bitmapΩ z rozszerzeniem *.dat?
5. Jak skonwertowaµ zmienn▒ String na PChar i odwrotnie?
6. Jak zapisaµ warto╢µ do rejestru?
7. Jak skopiowaµ plik?
8. Jak ╢ci▒gn▒µ plik z Internetu?
9. W jaki spos≤b wys│aµ pocztΩ lub otworzyµ stronΩ Internetow▒?
10. Jak wstawiµ do RichEdit datΩ lub godzinΩ?
11. Jak stworzyµ komponent podczas dzia│ania programu?
12. Jak zamkn▒µ, zresetowaµ, wylogowaµ siΩ z systemu?
13. Jak ustawiµ kursor w podanym przeze mnie miejscu?
14. W Delphi 4 nie mam polskich liter, co zrobiµ?
15. Jak stworzyµ animacjΩ przesuwaj▒cego siΩ napisu?
16. Jak utworzyµ, usun▒µ katalog?
17. Co to jest biblioteka DLL?
18. Jak wykryµ czy w komputerze jest zainstalowana karta muzyczna?
19. Jak sprawdziµ jaka jest pojemno╢µ dysku i ile jest wolnego
miejsca?
20. Jak odczytaµ ╢cie┐kΩ katalogu Windows i System
21. Jak dopisaµ do pliku kilka linii.
22. Jak zmieniµ tapetΩ pulpitu?
23. W jaki spos≤b regulowaµ dzwiΩk?
24. Czy jest jaki╢ inny spos≤b odgrywania d╝wiΩku ni┐ poprzez
komponent MediaPlayer?
25. U mnie wszystko gra, ale gdy uruchamiam program u kolegi pokazuje mi
siΩ b│▒d: "Cannot find file vcl50.bpl". O co chodzi?
26. Jak po najechaniu kursorem na Image zmieni│ siΩ obrazek, a po wyj╢ciu
z obszaru obrazek powr≤ci│ do poprzedniego?
27. Jak skonwertowaµ obrazek z *.bmp na *.jpg?
28.
Jak umie╢ciµ w ComboBox listΩ wszystkich zainstalowanych czcionek?
29.
Jak wysun▒µ szufladkΩ CD-ROM-u.
30.
Jak skopiowaµ plik, aby jego postΩp by│ pokazywany na ProgressBar?
31.
Jak zrobiµ, aby forma lub komponent mia│y inny kszta│t?
32. Jak ukryµ kursor myszy?
33. Co zrobiµ, aby pliki
graficzne by│y w jednym EXE, a nie w osobnych plikach?
34. Jak za│adowaµ z zasob≤w
kursor?
35. Jak wydrukowaµ dokument
przy pomocy np. Worda?
36. Jak pobraµ ikony program≤w?
37. Jak ukryµ program z paska zada±?
38. Jak zablokowaµ ponowne
uruchomienie programu?
39. Jak ograniczyµ po│o┐enie
kursora myszki?
40. Jak korzystaµ z plik≤w
INI?
41. Jak sprawdziµ czy dany
plik istnieje?
42. Jak przenie╢ skasowaµ,
zmieniµ nazwΩ katalogu?
43. Jak zminimalizowaµ, przywr≤ciµ, ukryµ okno?
44. Jak utworzyµ skr≤t do programu na pulpicie lub w menu start?
45. Jak zmierzyµ szeroko╢µ
i wysoko╢µ tekstu w pikselach?
46. Jak odczytaµ numer
seryjny dysku lub dyskietki?
47. Jak pobraµ uchwyt (
Handle ) dowolnego okna?
48. Jak zmieniµ tekst dowolnego okna?
49. Jak wydrukowaµ stronΩ testow▒ drukarki?
50. Jak skonwertowaµ zmienn▒ Integer na PChar i odwrotnie?
51. Jak w
Edicie wy╢wietliµ datΩ, tak, ┐eby dwukropek by│ zawsze na tym samym
miejscu?
52. Jak nie korzystaj▒c z komponentu dokleiµ do pliku program
EXE?
53. Jak wywo│aµ migotanie programu na pasku zada±?
54. Jak przechwyciµ uruchamianie wygaszacza ekranu?
55. Jak rysowaµ po komponencie.
56. Jak mogΩ rysowaµ po pasku tytu│owym formy?
57. Jak zrobiµ, aby na formie by│ wy╢wietlany zegarek?
58. Jak zmieniµ datΩ w systemie?
59. Jak usun▒µ (
odinstalowaµ ) aplikacjΩ?
60. Co zrobiµ by menu "Help" by│o po prawej stronie, a
reszta po lewej.
1. Jak wy╢wietliµ
obrazek z rozszerzeniem *.jpg?
Do listy modu│≤w uses dodaj s│owo jpeg. To nie zadzia│a
na pewno w Delphi 2, a byµ mo┐e w Delphi 3.
Image.Picture.LoadFromFile('C:\image.jpg');
2. Jak wstawiµ do RichEdit jakie╢ symbole?
Najpierw musisz znaµ numer ASCII takiego znaku. W tym celu u┐yj mojego
programu do
podawania kod≤w ASCII. Jest to program z kodem ╝r≤d│owym i ┐eby go
u┐ywaµ musisz go skompilowaµ. »eby to zrobiµ potrzebujesz Delphi 5.
Je┐eli nie masz takiej wersji Delphi - napisz do mnie, a ja prze╢le Ci
wersje skompilowan▒.
Gdy ju┐ znasz kod takiego symbolu do RichEdit wpisz:
RichEdit.SelText :=
#169 // np. taki numer....
3. Jak wycinaµ, wklejaµ tekst do schowka?
Mo┐esz u┐yµ funkcji:
Memo1.CopyToClipBoard; //
Kopiowanie...
Memo1.CutToClipboard; // Wycinanie...
Memo1.PasteFromClipboard; // Wklejanie...
4. Jak wczytaµ bitmapΩ z rozszerzeniem *.dat?
Nie mo┐esz do tego celu u┐yµ komponentu Image gdy┐ podczas
wczytywania zasygnalizuje b│▒d. Zmieniasz wiΩc rozszerzenie obrazka,
a programie piszesz:
var
B : TBitmap;
begin
B := TBitmap.Create;
B.LoadFromFile('C:\Bitmap.dat'); //
wczytanie...
Canvas.Draw(10, 10, Bitmap); // w
punkcie 10, 10 zostaje wczytaan
B.Free;
end;
5. Jak skonwertowaµ zmienn▒ String na PChar i
odwrotnie?
Zmienn▒ PChar na String
zmiania funkcja: StrPas, a String
na PChar zmienia funkcja StrPCopy.
6. Jak zapisaµ warto╢µ do rejestru?
Aby wykorzystywaµ funkcje zapisywania warto╢ci do rejestru nale┐y
do listy uses dopisaµ s│owo: Registry.
ProszΩ zapoznaµ siΩ z artyku│em "Rejestry"
w dziale "Delphi". Tam dok│adne
om≤wienie tego zagadnienia.
7. Jak skopiowaµ plik?
Poni┐szy kod nie do╢µ, ┐e kopiuje plik to daje do wyboru jaki
plik skopiowaµ i gdzie. Wska╝nik postΩpu pokazywany jest na
komponencie Gauge.
procedure TForm1.Button1Click(Sender: TObject);
var
Src : File;
FSize,i: Integer;
F : Pchar;
begin
if OpenDialog.Execute then //Wybranie pliku...
AssignFile(Src, OpenDialog.FileName);
SaveDialog.FileName := OpenDialog.FileName;
Reset(Src ,1);
FSize := FileSize(Src); //Pobranie rozmiaru...
Label1.Caption := IntToStr(FSize) + ' bajt≤w';
{ Wyswietlenie na etykiecie rozmiaru pliku }
Sleep(1000);
try
if SaveDialog.Execute then //Gdzie
zapisaµ...
Application.ProcessMessages;
F := PChar(OpenDialog.FileName);
CopyFile(F, PChar(SaveDialog.FileName), True);
for i:=0 to 100 do
begin
Application.ProcessMessages;
Sleep(Trunc(FSize / 1024)); //Czekaj...
Progress.Progress := I; //Pokazuje wska╝nika
postΩpu
end;
finally
ShowMessage('Kopiowanie zako±czone!');
end;
end;
8. Jak ╢ci▒gn▒µ plik z Internetu?
Przede wszytkim nale┐y do listy modu│≤w uses dodaµ
s│owo: URLMon.
if URLDownloadToFile(nil,'http://www.serwer.com/plik.htm',
'c:\plik.htm',0, nil) <> 0 then
ShowMessage('B│▒d podczas ╢ci▒gania pliku');
9. W jaki spos≤b wys│aµ pocztΩ lub otworzyµ
stronΩ Internetow▒?
Nale┐y zastosowaµ funkcje ShellExecute. Do listy modu│≤w musisz
dodaµ s│owo SHELLAPI.
ShellExecute(Handle, 'open', 'www.programowanie.of.pl',
nil, nil, SW_SHOWMAXIMIZED);
Przy okazji tego pytania om≤wiΩ tak┐e konstrukcje
funkcji ShellExecute. Pierwszy parametr to uchwyt okna (co to jest?
Patrz: WinAPI FAQ ) Kolejny parametr to znak,
┐e chcesz skorzystaµ z funkcji open, nastΩpnie podajesz ╢cie┐kΩ
programu, adres strony, lub adres e-mail ( w postaci: mailto:boduch@poland.com
). Ostatnim parametrem jest spos≤b wy╢wietlenia okna:
Domy╢lne: SW_SHOWNORMAL;
Zmaksymilizowane: SW_SHOWMAXIMIZED;
Zminimalizowane: SW_SHOWMINIMIZED;
Ukryte: SW_HIDE;
10. Jak wstawiµ do RichEdit datΩ lub godzinΩ?
Po pierwsze, aby wstawiµ datΩ lub godzinΩ do RichEdit musisz datΩ
skonwertowaµ. Robi to funkcja DateToStr,
TimeToStr. Og≤lna postaµ:
RichEdit1.SelText := DateToStr(Date);
RichEdit1.SelText := TimeToStr(Time);
Powy┐szy kod mo┐e nie dzia│aµ w starych wersjach Delphi gdy┐ nie s▒
przystosowane do daty 2000 i pokazuj▒ date: 99-12-30 :)
11. Jak stworzyµ komponent podczas dzia│ania programu?
Oto kodzik:
var
Button : TButton;
begin
Button := TButton.Create(Self);
Button.Parent := Self; // Przypisanie
rodzica
Button.Caption := 'Przycisk 1';
Button.Left := 100;
Button.Top := 100;
end;
12. Jak zamkn▒µ, zresetowaµ, wylogowaµ siΩ z systemu?
Win32Check(ExitWindows(0, 0));
// Zaloguj siΩ jako nowy u┐ytkownik
Win32Check(ExitWindowsEx(EWX_REBOOT, 0));
//Uruchom ponownie komputer
Win32Check(ExitWindowsEx(EWX_SHUTDOWN, 0));
// Wy│▒cz komputer
13. Jak ustawiµ kursor w podanym przeze mnie
miejscu?
To tego s│u┐y funkcja SetCursorPos(10,
10);
W tym przypadku ustawi kursor myszy w punkcie 10, 10.
14. W Delphi 4 nie mam polskich liter, co zrobiµ?
Uruchom rejestr Windows i stw≤rz now▒ warto╢µ typu DWORD:
HKEY_CURRENT_USER\Software\Borland\Delphi\4.0\
Editor\Options\NoCtrlAltKeys
Z warto╢ci▒ na "1".
15. Jak stworzyµ animacjΩ przesuwaj▒cego siΩ napisu?
Poczytaj artyku│ o animacjach w dziale "Delphi".
16. Jak utworzyµ, usun▒µ katalog?
Funkcja MkDir('Nazwa katlogu')
tworzy katalog, a funkcja RmDir('Nazwa
katalogu') go usuwa.
17. Co to jest biblioteka DLL?
Je┐eli chcesz siΩ dowiedzieµ co to jest biblioteka DLL i jak siΩ
j▒ tworzy poczytaj artyku│ na ich temat.
18. Jak wykryµ czy w komputerze jest zainstalowana karta muzyczna?
Po pierwsze musisz dodaµ do listy uses nazwΩ modu│u
MMSystem.
Nale┐y u┐yµ funkcji WaveOutGetNumDevs
if WaveOutGetNumDevs > 0 then
Label1.Caption := 'Jest karta d╝wiΩkowa!'
else
Label1.Caption := 'Brak karty d╝wiΩkowej!';
19. Jak sprawdziµ jaka jest pojemno╢µ dysku i ile jest wolnego
miejsca?
To podawania wolnej ilo╢ci na dysku s│u┐y funkcja DiskFree, a do
podawania ca│ego rozmiaru s│u┐y DiskSize.
begin
Label1.Caption := Format('Wolne miejsce: %d',[DiskFree(0)]);
Label2.Caption := Format('Ca│e miejsce: %d', [DiskSize(0)]);
end;
20. Jak odczytaµ ╢cie┐kΩ katalogu Windows i System
Do uzyskiwania takiej informacji s│u┐▒ funkcje GetWindowsDirectory
i GetSystemDirectory.
var
WDir : array[0..255] of char;
begin
GetSystemDirectory(WDir, SizeOf(WDir));
Label1.Caption := WDir;
»eby uzyskaµ ╢cie┐kΩ katalogu System nale┐y po prostu zamiast GetWindowsDirectory
podstawiµ GetSystemDirectory.
21. Jak dopisaµ do pliku kilka linii.
var
TF : TextFile;
begin
AssignFile(TF, 'Nazwa pliku.txt');
Append(TF);
Writeln(TF, 'Moja strona w Internecie:');
Writeln(TF, 'www.programowanie.of.pl');
CloseFile(TF);
end;
22. Jak zmieniµ tapetΩ pulpitu?
var
S : String;
begin
S := 'zdjecie.bmp';
SystemParametersInfo(SPI_SETDESKWALLPAPER,0, PChar(s),
SPIF_UPDATEINIFILE or SPIF_SENDWININICHANGE);
23. W jaki spos≤b regulowaµ dzwiΩk?
To tego celu s│u┐y funkcja WaveOutSetVolume. Warto╢µ dzwiΩku
jest waro╢ci▒ Integer. Poni┐sza linia ustawia dzwiΩk na warto╢ci
maksymalnej:
WaveOutSetVolume(0, $FFFFFFFF);
poni┐sza linia ustawia dzwiΩk na
cichszy:
WaveOutSetVolume(0, $20002000);
Konstrukcja jest do╢µ prosta. Po znaku $ ustawiana jest g│o╢no╢µ
prawego i lewego g│o╢nika. W powy┐szych przypadkach na obu g│o╢nikach
warto╢µ jest taka sama. Aha, je┐eli chcesz korzystaµ z tej funkcji
musisz dodaµ do listy uses s│owo MMSystem.
24. Czy jest jaki╢ inny spos≤b odgrywania d╝wiΩku ni┐ poprzez
komponent MediaPlayer?
Tak, musisz skorzystaµ z modu│u MMSystem. NastΩpnie skorzystaj z
funkcji PlaySound:
PlaySound('Dzwiek.wav', 0, SND_FILENAME);
WiΩcej o d╝wiΩkach poczytaj sobie w dziale "Delphi".
25. U mnie wszystko gra, ale gdy uruchamiam program u kolegi pokazuje
mi siΩ b│▒d: "Cannot find file vcl50.bpl". O co chodzi?
Jest to wina kompilacji. Musisz skompilowaµ program wraz z plikiem
vcl50.bpl, czyli plikiem pakietu. Je┐eli Tw≤j kumpel nie posiada
Delphi, nie posiada tak┐e tego pliku. Mo┐esz do│▒czyµ ten plik do
programu, albo skompilowaµ program wraz z tym plikiem. Wtedy program
znacznie "zgrubieje", ale jest to konieczne. Aby to zrobiµ
musisz otworzyµ menu "project" wybraµ "Options" i
odznaczyµ opcjΩ "Bulid with runtime packages".
26. Jak po najechaniu kursorem na Image zmieni│ siΩ obrazek, a po
wyj╢ciu z obszaru obrazek powr≤ci│ do poprzedniego?
ªci▒gnij sobie komponent, kt≤ry dzia│a tak jak Image z tym, ┐e
potrafi kontrolowaµ wej╢cie myszki w obszar komponentu. ªci▒gnij go tutaj.
Je┐eli nie wiesz jak go zainstalowaµ poczytaj
to.
27. Jak skonwertowaµ obrazek z *.bmp na *.jpg?
Pocz▒wszy od Delphi 3 znajduje siΩ modu│ jpeg.
To w│a╢nie dziΩki niemu mo┐na dokonaµ konwersji. Wystarczy, ┐e
zrobisz co╢ takiego:
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;
28. Jak umie╢ciµ w ComboBox listΩ wszystkich zainstalowanych
czcionek?
Wystarczy tylko jedna linia kodu:
ComboBox1.Items := Screen.Fonts;
29. Jak wysun▒µ szufladkΩ CD-ROM-u.
Nale┐y skorzystaµ z modu│u MMSystem.
Oto kod:
mciSendString('Set
cdaudio door open wait',nil,0,handle); //wysu±
mciSendString('Set cdaudio door closed wait',nil,0,handle); //wsu±
30. Jak skopiowaµ plik, aby jego postΩp by│
pokazywany na ProgressBar?
Mo┐na skorzystaµ z poni┐szego kodu: ProgressBar
jest pod nazw▒ CopyB.
procedure TMainFrm.BtnInstallClick(Sender: TObject);
var
FSize : Integer; //Rozmiar pliku
Src : File; //Nazwa programu do
skopiowania
I : Integer;
begin
try
AssignFile(Src, 'NazwaPlik.exe');//
Nazwa
Reset(Src, 1);// Otw≤rz...
FSize := FileSize(Src);// Pobierz
rozmiar
try
while not Done do
begin
for I:=0 to 100 do
begin
Application.ProcessMessages;
Sleep(Trunc(FSize / 10000));
CopyFile(PChar(InstallProgram),
PChar('C:\Nazwa.exe'), True);//Kopiuj
Application.ProcessMessages;
CopyB.Progress := I;//Pokaz
na wskazniku
if I = 100
thne //Je┐eli koniec to Done na True
Done
:= True;
if (Done) then //Je┐eli
Done n True to przerwij
Break;
end;
end;
except
raise Excepion.Create(
'B│▒d podczas
kopiowania!');
end;
finally
CloseFile(Src);
end;
31. Jak zrobiµ, aby forma lub komponent mia│y inny
kszta│t?
Poni┐sza linia robi z formy elipsΩ. Je┐eli chcesz zmieniµ kszta│t
innego komponentu to zamiast Handle podajesz np. Button1.Handle
SetWindowRgn(Handle,CreateEllipticRgn(0,
0, Width, Height), True);
32. Jak ukryµ kursor myszy?
ShowCursor(False);
ShowCursor(True);
33. Co zrobiµ, aby pliki graficzne by│y w jednym EXE, a nie w
osobnych plikach?
Musisz skorzystaµ z edytora zasob≤w dostarczanego wraz z Delphi.
Je┐eli nie wiesz jak to zrobiµ poczytaj artyku│ o tym w dziale
Delphi.
34. Jak za│adowaµ z zasob≤w kursor?
Gdy ju┐ masz przygotowany kursor w edytorze zasob≤w robisz np. co╢
takiego:
{$R NAZWAZASOBU.RES}
const
crMojKursor = 1; //Numer musi byµ wiΩkszy
od zera.
begin
Screen.Cursors[crMojKursor] :=
LoadCursor(hInstance,'MOJKURSOR');
Form1.Cursor := crMojKursor;
NastΩpuje tutaj za│adowanie kursora z zasob≤w. Na samym pocz▒tku
deklarowana jest nazwa zasobu, a p≤╝niej sta│a z nazw▒ kursora. WiΩcej
o zasobach mo┐esz poczytaµ sobie w dziale Delphi.
35. Jak wydrukowaµ dokument przy pomocy np. Worda?
Musisz podaµ nazwΩ pliku z rozszerzeniem *.doc. Aby
wydrukowaµ taki dokument skorzystaj z modu│u SHELLAPI;
uses ShellAPI;
begin
ShellExecute(Handle,'print','C:\Dokument.doc',nil, nil,
SW_HIDE);
DziΩki zastosowaniu znacznika SW_HIDE okno Worda siΩ nie poka┐e, a
dokument zostanie wydrukowany. Tak samo mo┐esz wydrukowaµ dokument u┐ywaj▒c
Notatnika.
36. Jak pobraµ ikony program≤w?
Nale┐y skorzystaµ z modu│u SHELLAPI oraz funkcji ExtractIcon
uses ShellApi;
procedure TForm1.FormCreate(Sender: TObject);
begin
Image1.Picture.Icon.Handle:=
ExtractIcon(Hinstance,'c:\Program.exe',32);
end;
37. Jak ukryµ program z paska zada±?
Pasek musi byµ ukryty zanim stworzone zostan▒ formy. Poni┐szy kod
nale┐y wiΩc dodaµ do ╝r≤d│a projektu ( Project | View Source ).
Tak powinna wygl▒daµ ca│o╢µ:
program Project1;
uses
Forms,
Windows,
Unit1 in 'Unit1.pas' {Form1};
{$R *.RES}
var
Ex : Integer;
begin
Application.Initialize;
Ex:=GetWindowLong(Application.Handle, GWL_EXSTYLE);
SetWindowLong(Application.Handle,GWL_EXSTYLE,
Ex or WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW);
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
Program jest ukrywany z paska zada± dziΩki parametrowi
WS_EX_TOOL_WINDOW.
38. Jak zablokowaµ ponowne uruchomienie programu?
var
hM : HDC;
begin
hM:=CreateFileMapping(THANDLE($FFFFFFFF),nil,
PAGE_READONLY,0,32,'ApplicationTestMap');
if GetLastError=ERROR_ALREADY_EXISTS then
begin
ShowMessage('Nie mo┐na uruchomiµ tego samego programu');
Application.Terminate;
CloseHandle(hM);
end;
39. Jak ograniczyµ po│o┐enie kursora myszki?
S│u┐y do tego funkcja ClipCursor. A ca│o╢µ mo┐e wygl▒daµ np.
tak:
var
R : TRect;
begin
with R do
begin
Top := 20;
Bottom := 20;
Left := 20;
Right := 20;
end;
ClipCursor(@R);
end;
40. Jak korzystaµ z plik≤w INI?
W dziale Delphi znajdziesz artyku│ dotycz▒cy plik≤w INI,
zapisywanie odczyta itp.
41. Jak sprawdziµ czy dany plik istnieje?
S│u┐y do tego funkcja FileExists. Np:
if FileExists('C:\Moj.txt') then
ShowMessage('Plik isnieje!')
else
ShowMessage('Plik nie istnieje!');
42. Jak przenie╢ skasowaµ, zmieniµ nazwΩ katalogu?
Najlepiej jest skorzystaµ z modu│u SHELLAPI. Oto przyk│ad:
uses ShellAPI;
procedure TForm1.Button1Click(Sender: TObject);
var R : TSHFileOpStructA;
begin
with R do
begin
Wnd:=Handle; // oznaczenie uchwytu
wFunc:=FO_COPY;// opcja
pFrom:='c:\moj'; // z katalogu
pTo:='c:\dokumenty\moj';// do
katalogu...
fFlags:=FOF_NOCONFIRMMKDIR;
end;
if SHFileOperation(R)<>0 then
ShowMessage('B│▒d podczas kopiowania')
end;
Zamiast parametru FO_COPY mo┐esz u┐yµ:
- FO_DELETE - kasuje wFrom
- FO_RENAME - zmienia nazwΩ z wFrom do w wTo
- FO_MOVE - przenosi z wFrom do wTo
43. Jak zminimalizowaµ, przywr≤ciµ, ukryµ okno?
S│u┐y do tego funkcja ShowWindow. Pierwszym parametrem jest uchwyt
okna, a drugim stan okna. Mo┐e on byµ:
- SW_HIDE - ukrywa okno.
- SW_MAXIMIZE - maksymalizuje okno.
- SW_MINIMIZE - minimalizuje.
- SW_SHOw - pokazuje.
Np. ShowWindow(Handle, SW_SHOW);
44. Jak utworzyµ skr≤t do programu na pulpicie lub w menu start?
To nie zadzia│a w wypadku Delphi 2. W tym wypadku tworzony jest skr≤t
do programu Notepad.
uses ShlObj, ActiveX, ComObj,
Registry;
procedure TForm1.Button1Click(Sender: TObject);
var MyObject:IUnknown;
MySLink:IShellLink;
MyPFile:IPersistFile;
FileName:String;
Directory:String;
WFileName:WideString;
MyReg:TRegIniFile;
begin
MyObject:=CreateComObject(CLSID_ShellLink);
MySLink:=MyObject as IShellLink;
MyPFile:=MyObject as IPersistFile;
FileName:='C:\Windows\NOTEPAD.EXE';
with MySLink do
begin
SetPath(PChar(FileName));
SetWorkingDirectory(PChar(ExtractFilePath(FileName)));
end;
MyReg := TRegIniFile.Create('Software\MicroSoft\Windows\'+
'CurrentVersion\Explorer');
// Poni┐sze dodaje skr≤t do desktopu
Directory := MyReg.ReadString('Shell Folders','Desktop','');
// A to do menu Start
Directory := MyReg.ReadString('Shell Folders','Start Menu','')+
'\Microspace';
CreateDir(Directory);
WFileName := Directory+'\Notatnik.lnk';
MyPFile.Save(PWChar(WFileName),False);
MyReg.Free;
end;
45. Jak zmierzyµ szeroko╢µ i wysoko╢µ tekstu w pikselach?
S│u┐▒ do tego funkcje:
Canvas.TextWidth, Canvas.TextHeight;
Canvas.TextWidth('Programowanie');
46. Jak odczytaµ numer seryjny dysku lub dyskietki?
var
Bufor:array[0..MAX_PATH] of Char;
MaxCompLength, FileSystemFlags : Integer;
Drive:Char;
Serial:DWORD;
begin
Drive:='A';
GetVolumeInformation(PChar(Drive + ':\'),Bufor,SizeOf(Bufor),
@Serial,MaxCompLength,FileSystemFlags,nil,0);
end;
Zmienna "Serial" posiada numer seryjny dyskietki, a
"Bufor" etykietΩ.
W przypadku dysku podaje numer partycji.
47. Jak pobraµ uchwyt ( Handle ) dowolnego okna?
S│u┐y do tego funkcja "FindWindow". »eby pobraµ uchwyt
nale┐y znaµ w│a╢ciwo╢µ "Caption" lub "ClassName".
Je┐eli nie znamy, kt≤rego╢ z tych element≤w wstawiamy nil. Przyk│ad
pobrania uchwytu Inspektora Obiekt≤w.
var
H : THandle;
begin
FindWindow(nil,'Object Inspector');
48. Jak zmieniµ tekst dowolnego okna?
Musisz znaµ uchwyt okna. (patrz: przyk│ad powy┐ej).
SetWindowText(Handle, 'Nowa nazwa okna');
49. Jak wydrukowaµ stronΩ testow▒ drukarki?
Nale┐y odwo│aµ siΩ do biblioteki rundll.dll i skorzystaµ z modu│u
ShellAPI.
uses ShellAPI;
ShellExecute(Handle, 'open',
'rundll32','msprint2.dll, RUNDLL_PrintTestPage',nil,
SW_SHOWNORMAL);
50. Jak skonwertowaµ zmienn▒ Integer na PChar i odwrotnie?
Chyba najpro╢ciej bΩdzie u┐yµ funkcji Ord i Chr:
// Char na
Integer
ShowMessage(IntToStr(Ord('C'))); // kod
ASCII litery Char
// i
odwrotnie...
ShowMessage(Chr(25)); // znak odpowiadaj▒cy
cyfrze 25
51. Jak w
Edicie wy╢wietliµ datΩ, tak, ┐eby dwukropek by│ zawsze na tym samym
miejscu?
Do tego celu najlepiej jest u┐yµ komponentu "MaskEdit" (
paleta: Additional ).
Wybierasz w│a╢ciwo╢µ "EditMask" - pojawia siΩ okno do
wyboru maski, a nastΩpnie klikasz na przycisku "Mask" i w
oknie wybierasz plik "us.dem". Po prawej stronie pojawi│a siΩ
lista masek. Wybierz z niej "Short Time" i OK! Gotowe.
52. Jak nie
korzystaj▒c z komponentu dokleiµ do pliku program EXE?
Jest to ╢rednio trudne. PostΩpuj wed│ug poni┐szych wskaz≤wek:
Naszym celem bΩdzie dodanie do zasob≤w
Windows. Poniewa┐ standardowy edytor zasob≤w nie umo┐liwia tego
musimy to zrobiµ rΩcznie. Do jednego katalogu skopiuj Tw≤j plik EXE
oraz program "brcc32.exe", kt≤ry jest czΩ╢ciom Delphi [
znajduje siΩ w katalogu ...\Delphi\Bin ].
Teraz stw≤rz plik z rozszerzeniem *.rc, a nastΩpnie uruchom go w
Notatniku. Wpisz taki tekst:
PROGRAM RCDATA "Program.exe"
Program.exe to oczywi╢cie nazwa Twojego programu, kt≤ry
chcesz w│▒czyµ do EXEca. Ok, teraz zapisz ten plik.
Musisz u┐yµ programu brcc32.exe, aby skompilowaµ zas≤b. W tym celu
uruchom okienko MS - DOS'a i przejd╝ do katalogu w kt≤rym skopiowa│e╢
program brcc32.exe. W MS - DOS'ie do katalogu przechodzi siΩ
poleceniem:
cd NazwaKatalogu
a przej╢cie do katalogu wy┐ej powoduje polecenie:
cd..
Gdy ju┐ jeste╢ w tym katalogu wpisz:
brcc32.exe PlikRC.rc
"PlikRC.rc" to plik, kt≤ry przed chwil▒
edytowa│e╢. Je┐eli wszystko p≤jdzie dobrze w katalogu powiniene╢
ujrzeµ plik z rozszerzeniem *.res, kt≤ry zawiera Tw≤j program! Moje
gratulacje - w│a╢nie do│▒czy│e╢ program do zasob≤w.
Teraz w programie nale┐y w kt≤rym╢ miejscu dopisaµ liniΩ:
{$R PLIKRC.RES}
Teraz w kt≤rej╢ procedurze wpisz:
var
Res : TResourceStream;
begin
Res:=TResourceStream.Create(hInstance,'PROGRAM',RT_RCDATA);
Res.SaveToFile('Program.exe'); // zapisz na dysk
Res.Free;
end;
Je┐eli postΩpowa│e╢ wg. powy┐szych wskaz≤wek
powinno siΩ udaµ. Po kompilacji w jednym EXEcu powinien znale╝µ siΩ
Tw≤j doklejony program.
53. Jak wywo│aµ
migotanie programu na pasku zada±?
Normalnie je┐eli chesz, aby na pasku zada± nazwa Twojego programu
siΩ "zapali│a" to piszesz co╢ takiego:
FlashWindow(Application.Handle,True);
Je┐eli chcesz, aby program przesta│ byµ zaznaczony to
zamiast "True" piszesz "False". Teraz je┐eli
chcesz, aby nazwa raz siΩ zapala│a, a raz "gais│a" to
musisz na formie postawiµ komponent Timer. Zmien "Enabled" na
False. W procedurze "OnTimer" tego┐ komponentu piszesz:
var
Miganie : Boolean;
begin
Miganie := not Miganie;
FlashWindow(Application.Handle, Miganie);
Teraz ┐eby uruchomiµ zegar musisz napisaµ:
Timer1.Enabled := True;
54. Jak
przechwyciµ uruchamianie wygaszacza ekranu?
W sekcji "private" umie╢µ tak▒ liniΩ kodu:
procedure WMSYSCommand(var M: TMessage); message WM_SYSCOMMAND;
W sekcji "Implementation" natomiast:
procedure TForm1.WMSYSCommand(var M: TMessage);
begin
if M.WParam <> SC_SCREENSAVE then inherited
else ShowMessage('Uruchamianie wygaszacza...');
end;
55. Jak rysowaµ po
komponencie.
var
C:TCanvas;
begin
C:=TCanvas.Create;
C.Handle:=GetDC(Button1.Handle); // na Buttonie
{Tu mo┐esz rysowaµ jak po zwyk│ym Canviasie}
C.Free;
56. Jak mogΩ
rysowaµ po pasku tytu│owym formy?
Jest to do╢µ trudnΩ gdy┐ rysowaµ mo┐esz za pomoc▒ funkcji API:
1. W sekcji "Interface" dodaj liniΩ:
var
DC : Integer;
2. W OnCreate formy wpisz:
DC :=
GetWindowDC(handle);
3. Teraz w procedurze wpisz:
var
Text : PChar;
begin
Text := 'Adam Boduch';
TextOut(DC, 3, 4, Text, StrLen(Text));
Funkcja "TextOut" to funkcja API. Najpierw
mamy uchwyt do paska, p≤╝niej pozycja wy╢wietlanego tekstu, tekst i w
ko±cu okre╢lenie d│ugo╢ci tekstu ( StrLen ).
57. Jak zrobiµ,
aby na formie by│ wy╢wietlany zegarek?
Na formie umieszczasz komponent "Timer" i w
procedurze "OnTimer" wpisujesz:
Canvas.Brush.Style := bsClear; // prze╝roczyste t│o
Refresh; // od╢wie┐
Canvas.TextOut(20, 20, TimeToStr(Time)); {
wy╢wietl w punkcie 20, 20 }
58. Jak zmieniµ datΩ w
systemie?
var
Data:Systemtime;
begin
Data.wMonth:= 12;
Data.wDay:=22;
Data.wYear:=1995;
SetLocalTime(Data);
59. Jak usun▒µ (
odinstalowaµ ) aplikacjΩ?
W przyk│adzie, kt≤ry za chwilΩ podam nasza aplikacja usuie samego
siebie. Tak. W tym celu stworzony zostanie program ( ! ) ktory usunie
pliki naszego programu. Program zostanie stworzony w katalogu
Windows\Temp, gdy┐ ten katalogu jest czΩsto opr≤zniany, a nasz
program zajmowa│ bΩdzie tylko 18 bajt≤w! Tak, to bΩdzie program
dosowy z rozszerzeniem *.bat. A wiΩc oto kod:
var
TF: TextFile;
begin
PostMessage(Handle, wm_Quit, 0, 0); // zamkniecie naszej aplikacji
AssignFile(TF, 'C:\Windows\Temp\kill.bat'); // zapisz plik
Rewrite(TF);
Writeln(TF, ':kill');
Writeln(TF, 'cd ' + ParamStr(0));
Writeln(TF, 'del ' + ExtractFileName(ParamStr(0)));
Writeln(TF, 'if exist ' +
ExtractFileName(ParamStr(0))+ ' goto kill');
CloseFile(TF);
// uruchom program
WinExec('C:\Windows\Temp\kill.bat', sw_Hide);
60. Co zrobiµ by menu
"Help" by│o po prawej stronie, a reszta po lewej.
Zak│adaj▒c, ┐e "MainMenu" to komponent
"TMainMenu", a "Pomoc1" to menu z pomoc▒ mo┐na
zrobiµ tak w procedurze "OnCreate" formy:
procedure TForm1.FormCreate(Sender: TObject);
var
Info: TMenuItemInfo;
Buff: array[0..MAX_PATH] of Char;
begin
Info.cbSize := SizeOf(TMenuItemInfo);
Info.fMask := MIIM_TYPE;
Info.dwTypeData := Buff;
Info.cch := SizeOf(Buff);
GetMenuItemInfo(MainMenu1.Handle, Pomoc1.Command, False, Info);
Info.fType := Info.fType or MFT_RIGHTJUSTIFY;
SetMenuItemInfo(MainMenu1.Handle, Pomoc1.Command, False, Info);
end;
< TOP
>