1. Jak otworzyć Excel-a ?
2. Jak zrobić systemowego About\'a?
3. Jak uniaktywnić Alt+F4?
4. Jak dodawać elementy do menu systemowego aplikacji?
5. Jak sprawdzić czy dany rok jest przestępny ?
6. Jak sformatować dysk w Delphi ?
7. Jak odświeżyć pulpit ?
8. Jakie są podstawowe właściwości Hint\'ów ?
9. Jak dokonać zrzutu ekranu lub aktywnego okna do schowka ?
10. Jak zaświecić albo zgasić diodę \"CapsLock\" lub \"NumLock\" ?
11. Jak uruchomić jakiś program np. calculator ?
12. Jak pobrać ścieżki do folderów Windows (Fonts, Pulpit, Menu Start)?
13. Jak odczytywać zmienne środowiskowe?
14. Jak rozpoznać czy Windows jest 16 czy 32 bitowy?
15. Jak rozpoznać wersję Delphi?
16. Jak uzyskać informację o konfiguracji sprzętowej?
17. Jak sprawdzić czy klawisz INSERT jest włączony?
18. Jak sprawdzić czy klawisz CAPSLOCK jest włączony?
19. Jak sprawdzić czy klawisz NUMLOCK jest włączony?
20. Jak wykonać jakąś procedurę po naciśnięciu klawisza ENTER?
21. Jak rozpoznać typ klawiatury?
22. Jak pobrać nazwę komputera?
23. Jak odczytać nazwę zalogowanego użytkownika?
24. Co zrobić, aby dymki z podpowiedziami długo nie znikały?
25. Co zrobić, aby program na pasku zadań migał?
26. Jak wyświetlić messagebox\'a z flagę błędu, pytania lub informacji?
27. Jak zmieniać datę w systemie?
28. Jak uzyskać informację o pamięci ?
29. Jak rozpoznać wersję systemu operacyjnego ?
30. Jak rozpoznać typ napędu ?
31. Jak dodać pozycję w Dodaj\\Usuń programy (Panel Sterowania)?
32. Jak odczytać ikonę skojarzoną z rozszerzeniem?
33. Jak symulować naciśnięcie klawisza klawiatury ?
34. Jak zawiesić działanie klawiatury?
35. Jak pobrać lub zmienić częstotliwość migania kursora ?
36. Jak pobrać lub ustawić prędkość dwukrotnego kliknięcia myszą ?
37. Jak zamienić przyciski myszy ?
38. Jak poustawiać okna jedno pod drugim (cascade)?
39. Jak poustawiać okna obok siebie (tile) ?
40. Jak zabić dowolny proces w systemie ?
41. Jak wysłać komunikat do wszystkich aplikacji ?
42. Jak zrobić by program mógł być uruchamiany tylko w jednym egzemplarzu?
43. Jak ustawić wygaszacz ekranu na (brak) ?
44. Jak wyświetlić plik pomocy ?
45. Jak zastąpić pascalową procedurę Delay ?
46. Jak za pomocą Delphi włączyć i wyłączyć monitor ?
47. Jak napisać odpowiednik pascalowej funkcji PORT ?
48. Jak pobrać nazwy wszystkich czionek dostępnych w systemie ?
49. Jak zmienić położenie przycisku Start - Windows\'a?
50. Jak wrzucić program do Traya ( obok zegarka na pasku zadań ) ?
51. Jak programowo zmienić rozdzielczość ekranu ?
52. Jak wywołać okienko do wyboru katalogu ?
53. Jak wyłączyć skróty Windows\'a CTRL+ALT+DEL CTRL+ESC ALT+TAB i.t.d. ?
54. Jak odczytywać i zapisywać wartości w rejestrze Windows\'a ?
55. Jak nie korzystając z komponentu dokleić do pliku program EXE?
56. Jak skonwertować zmienną Integer na PChar i odwrotnie?
57. Jak wydrukować stronę testową drukarki?
58. Jak zmienić tekst dowolnego okna?
59. Jak pobrać uchwyt ( Handle ) dowolnego okna?
60. Jak odczytać numer seryjny dysku lub dyskietki?
61. Jak utworzyć skrót do programu na pulpicie lub w menu start?
62. Jak zminimalizować, przywrócić, ukryć okno?
63. Jak ograniczyć położenie kursora myszki?
64. Jak zablokować ponowne uruchomienie programu?
65. Jak ukryć program z paska zadań?
66. Jak pobrać ikony programów?
67. Jak załadować z zasobów kursor?
68. Jak ukryć kursor myszy?
69. Jak wysunąć szufladkę CD-ROM-u?
70. Jak zmienić tapetę pulpitu?
71. Jak odczytać ścieżkę katalogu Windows i System?
72. Jak sprawdzić jaka jest pojemność dysku i ile jest wolnego miejsca?
73. Jak wykryć czy w komputerze jest zainstalowana karta muzyczna?
74. Jak ustawić kursor w podanym przeze mnie miejscu?
75. Jak zamknąć, zresetować, wylogować się z systemu?


1. 

Jak otworzyć Excel-a ? 2003-10-09

Function ExcelOpenFile(Excel : Variant; FileName : String): Boolean;
Begin
Result := True;
try
{Otworzenie pliku do pracy}
Excel.Workbooks.Open[FileName];
except
MessageDlg('Nie można znaleźć ' + FileName, mtError, [mbOK], 0);
Result := False;
end;
End;

wstecz

ADMIN

2. 

Jak zrobić systemowego About\'a? 2003-10-09

I kolejny raz odwołujemy się do moduły ShelApi. Dodaj go do uses i na kliknięcie guzika w pisz taki oto kod:

ShellAbout(Form1.Handle, 'Program', 'Jest OK', Application.Icon.handle);
// 1 Parametr: Uchwyt okna
// 2 Parametr: Nazwa programu
// 3 Parametr: Tekst
// 4 Parametr: Uchwyt ikony naszej aplikacji

wstecz

ADMIN

3. 

Jak uniaktywnić Alt+F4? 2003-10-09

W onFormCreate wpisz taki kod:

KeyPreview := True;

A procedura na OnKeyDown formy ma mieć postać:

procedure TForm1.FormKeyDown(Sender: TObject);
begin
if ((ssAlt in Shift) and (Key = VK_F4)) then
Key := 0;
end;

wstecz

ADMIN

4. 

Jak dodawać elementy do menu systemowego aplikacji? 2003-10-09

Należy odwołać się do funkcji Api. Najpierw dodaj do sekcji public taki wpis:

procedure WndMsg(var Msg : TMsg; var Handled:Boolean);

Następnie zadeklaruj stałą msgNew = 100 i napisz odpowiednik powyższej procedury. Ma wyglądać tak:

procedure TForm1.WndMsg(var Msg : TMsg; var Handled : Boolean);
begin
if (Msg.Message=WM_SYSCOMMAND) and (Msg.wParam=msgNew) then
ShowMessage('Kliknięto na nowy Item w menu systemowym!!!');
Handled := False;
end;

A w OnFormCreate wpisz taki kod:

AppendMenu(GetSystemMenu(Application.Handle, FALSE ), MF_SEPARATOR, 0, ' ');
AppendMenu(GetSystemMenu(Application.Handle, FALSE ), MF_STRING, msgNew, 'Jestem nowy');
Application.OnMessage := WNDMsg;

wstecz

ADMIN

5. 

Jak sprawdzić czy dany rok jest przestępny ? 2003-10-09

Służy do tego funkcja IsLeapYear(Rok);
Przykład użycia :
if IsLeapYear(2001) then ShowMessage('Rok 2001 to rok przestępny !');

wstecz

ADMIN

6. 

Jak sformatować dysk w Delphi ? 2003-10-09

Należy użyć funkcji zawartej w module ShellAPI - ShFormatDrive().
Oto wycinek kodu.

const SHFMT_DRV_A = 0;
const SHFMT_DRV_B = 1;
const SHFMT_ID_DEFAULT = $FFFF;
const SHFMT_OPT_QUICKFORMAT = 0;
const SHFMT_OPT_FULLFORMAT = 1;
const SHFMT_OPT_SYSONLY = 2;
const SHFMT_ERROR = -1;
const SHFMT_CANCEL = -2;
const SHFMT_NOFORMAT = -3;

function SHFormatDrive(hWnd : HWND; Drive: Word; fmtID: Word; Options: Word) : Longint stdcall; external 'Shell32.dll' name 'SHFormatDrive';

procedure TForm1.Button1Click(Sender: TObject);
var
FmtRes : longint;
begin
try
FmtRes:= ShFormatDrive(Handle, SHFMT_DRV_A, SHFMT_ID_DEFAULT, SHFMT_OPT_QUICKFORMAT);
case FmtRes of
SHFMT_ERROR : ShowMessage('Błąd podczas formatowania.');
SHFMT_CANCEL : ShowMessage('Użytkownik przerwał formatowanie.');
SHFMT_NOFORMAT : ShowMessage('Nie sformatowano dysku')
else
ShowMessage('Dysk został sformatowany.');
end;
except
end;
end;

wstecz

ADMIN

7. 

Jak odświeżyć pulpit ? 2003-10-09

UpdateWindow(GetDesktopWindow);

wstecz

ADMIN

8. 

Jakie są podstawowe właściwości Hint\'ów ? 2003-10-09

4 podstawowe właściwości :

HintColor Określa kolor tła podpowiedzi.
HintHidePause Definiuje czas, przez jaki podpowiedź jest pokazana jeżeli pozycja kursora myszy nie ulegnie zmianie. Domyślnie jest to 2500 milisekund.
HintPause Określa czas jaki mija od chwili zatrzymania kursora nad komponentem do tego w jakim zostanie pokazana podpowiedź. Domyślnie 500 milisekund.
HintShortPause Jeżeli przemieszczasz się kursorem pomiędzy kilkoma komponentami to następuje pewien czas, w którym stara podpowiedź zostaje schowana, a nowa pokazana - to właśnie definiuje ta właściwość. Wartość domyślna: 50 milisekund.

Przykład :
Application.HintPause:=1000;

wstecz

ADMIN

9. 

Jak dokonać zrzutu ekranu lub aktywnego okna do schowka ? 2003-10-09

keybd_event(44,1,0,0); //zrzuca cały ekran
keybd_event(44,0,0,0); //zrzuca aktywne okno

wstecz

ADMIN

10. 

Jak zaświecić albo zgasić diodę \"CapsLock\" lub \"NumLock\" ? 2003-10-09

var
k:TKeyBoardState;
Begin
GetKeyboardState(k);
k[VK_CAPITAL]:=0; {CAPSLOCK 0 - wyłączone 1 - włączone}
k[VK_NUMLOCK]:=0; {NUMLOCK 0 - wyłączone 1 - włączone}
SetKeyboardState(k);
End;

wstecz

ADMIN

11. 

Jak uruchomić jakiś program np. calculator ? 2003-10-09

WinExec('c:\win98\calc.exe',sw_normal);

jednak bezpieczniej i wydajniej jest stosować ShellExecute (patrz niżej...);

wstecz

ADMIN

12. 

Jak pobrać ścieżki do folderów Windows (Fonts, Pulpit, Menu Start)? 2003-10-09

Można czytać z rejestru Windows'a. Lecz łatwiejszą metodą jest funkcja SHGetSpecjalFolderPath(hwndOnwer: HWND; lpszPath: PChar; nFolder: Integer; fCreate: BOOL): BOOL; stdcall;
Składnia:
uses ShlObj;

function GetP(Folder: Integer): String;
var FilePath: array[0..MAX_PATH] of char;
begin
SHGetSpecialFolderPath(0, FilePath, Folder , False);
Result:=FilePath;
end;

A to wrzuć do zdarzenia np Button1Click
Składnia
begin
ListBox1.Items.Add('AutoStart '+getp(CSIDL_STARTUP));
ListBox1.Items.Add('Dane aplikacji '+getp(CSIDL_APPDATA));
ListBox1.Items.Add('Kosz'+getp(CSIDL_BITBUCKET));
ListBox1.Items.Add('Ikony dla Panelu Sterowania '+getp(CSIDL_CONTROLS));
ListBox1.Items.Add('Cookies (Internet) '+getp(CSIDL_COOKIES));
ListBox1.Items.Add('Wirtualny pulpit '+getp(CSIDL_DESKTOP));
ListBox1.Items.Add('Fizyczny pulpit '+getp(CSIDL_DESKTOPDIRECTORY));
ListBox1.Items.Add('Mój komputer '+getp(CSIDL_DRIVES));
ListBox1.Items.Add('Ulubione '+getp(CSIDL_FAVORITES));
ListBox1.Items.Add('Czcionki '+getp(CSIDL_FONTS));
ListBox1.Items.Add('Historia (Internet) '+getp(CSIDL_HISTORY));
ListBox1.Items.Add('Wirtualny internet '+getp(CSIDL_INTERNET));
ListBox1.Items.Add('Tymczasowy internet '+getp(CSIDL_INTERNET_CACHE));
ListBox1.Items.Add('Otoczenie sieciowe '+getp(CSIDL_NETHOOD));
ListBox1.Items.Add('Dokumenty '+getp(CSIDL_PERSONAL));
ListBox1.Items.Add('Drukarki '+getp(CSIDL_PRINTERS));
ListBox1.Items.Add('Programy Menu Start '+getp(CSIDL_PROGRAMS));
ListBox1.Items.Add('Ostanio używane dokumenty '+getp(CSIDL_RECENT));
ListBox1.Items.Add('Wyślij do... '+getp(CSIDL_SENDTO));
ListBox1.Items.Add('Opcje Menu Start '+getp(CSIDL_STARTMENU));
ListBox1.Items.Add('Wzorce dokumentów '+getp(CSIDL_TEMPLATES));
end;

wstecz

ADMIN

13. 

Jak odczytywać zmienne środowiskowe? 2003-10-09

Najpierw dodaj komponent ListBox do formy:
Składna:
var
Zmienne:PChar;
begin
Zmienne:=GetEnvironmentStrings;
repeat
ListBox1.Items.Add(StrPas(Zmienne));
inc(Zmienne,StrLen(Zmienne)+1);
until Zmienne^=#0;
FreeEnvironmentStrings(Zmienne);
end;

wstecz

ADMIN

14. 

Jak rozpoznać czy Windows jest 16 czy 32 bitowy? 2003-10-09

begin
{$IFDEF WINDOWS}
Form1.Caption:='Windows 16-bitowy';
{$ENDIF}
{$IFDEF WIN32}
Form1.Caption:='Windows 32-bitowy';
{$ENDIF}
end;

wstecz

ADMIN

15. 

Jak rozpoznać wersję Delphi? 2003-10-09

Składnia:
begin
{$IFDEF VER80}
Form1.Caption:='Delphi 1';
{$ENDIF}
{$IFDEF VER90}
Form1.Caption:='Delphi 2';
{$ENDIF}
{$IFDEF VER100}
Form1.Caption:='Delphi 3';
{$ENDIF}
{$IFDEF VER120}
Form1.Caption:='Delphi 4';
{$ENDIF}
end;

wstecz

ADMIN

16. 

Jak uzyskać informację o konfiguracji sprzętowej? 2003-10-09

Dodaj komponent TListBox do formy:
Składnia:
var
Sys:TSystemInfo;
begin
GetSystemInfo(Sys);
with ListBox1.Items,Sys do begin
Add('Architektura procesora : Intel');
Add('Rozmiar strony : '+inttostr(dwPageSize)+' bajtów');
Add('Min. adres aplikacji : '+StrPas(lpMinimumApplicationAddress));
// Add('Max. adres aplikacji : '+StrPas(lpMaximumApplicationAddress));
Add('Liczba procesorów : '+inttostr(dwNumberOfProcessors));
Add('Granulacja przydziału : '+inttostr(dwAllocationGranularity)+' bajtów');
case wProcessorLevel of
3: Add('Poziom procesora : 80386');
4: Add('Poziom procesora : 80486');
5: Add('Poziom procesora : Pentium');
6: Add('Poziom procesora : Pentium Pro');
else Add('Poziom procesora : '+inttostr(wProcessorLevel));
end;
end;
end;

wstecz

ADMIN

17. 

Jak sprawdzić czy klawisz INSERT jest włączony? 2003-10-09

Składnia:
CheckBox4.Checked := GetKeyState(VK_INSERT) <> 0; // Insert
// Przykład podany na komponencie Checkbox
end;

wstecz

ADMIN

18. 

Jak sprawdzić czy klawisz CAPSLOCK jest włączony? 2003-10-09

Składnia:
CheckBox1.Checked := GetKeyState(VK_CAPITAL) <> 0;// Caps
// Przykład podany na komponencie Checkbox
end;

wstecz

ADMIN

19. 

Jak sprawdzić czy klawisz NUMLOCK jest włączony? 2003-10-09

Składnia:
begin
CheckBox2.Checked := GetKeyState(VK_NUMLOCK) <> 0; // Num lock
// Przykład podany na komponencie CheckBox
end;

wstecz

ADMIN

20. 

Jak wykonać jakąś procedurę po naciśnięciu klawisza ENTER? 2003-10-09

Składnia:
begin
if Key = #13 then
memo1.lines.add(''wladek'); //na przykład;
end;

wstecz

ADMIN

21. 

Jak rozpoznać typ klawiatury? 2003-10-09

W zależności od wyniku procedury:

1. IBM 83 klawisze.
2. Olivetti ( 102 klawisze ).
3. IBM PC/AT (83-84 klawisze ).
4. IBM 103 - 104 klawisze.
5. Nokia 1050
6. Nokia 9140
7. Japońska klawiatura.

A oto procedura:
Składnia:
begin
ShowMessage(IntToStr(
GetKeyboardType(0));
end;

wstecz

ADMIN

22. 

Jak pobrać nazwę komputera? 2003-10-09

Składnia:
var
Comp : String;
Buff : DWORD;
begin
Buff := 64;
SetLength(Comp, Buff);
GetComputerName(PChar(Comp), Buff);
ShowMessage(Comp);
end;

wstecz

ADMIN

23. 

Jak odczytać nazwę zalogowanego użytkownika? 2003-10-09

Składnia:
var
User : String;
Buff : DWORD;
begin
// dlugoosc Nazwiska
Buff := 12;
SetLength(User, Buff);
GetUserName(PChar(User), Buff);
ShowMessage(User);
end;

wstecz

ADMIN

24. 

Co zrobić, aby dymki z podpowiedziami długo nie znikały? 2003-10-09

W zdarzeniu onCreate formy należy wpisać:
Składnia:
begin
Application.HintHidePause(tutaj_musisz_wpisac_dużą_wartość_typu_integer_np. 100000000000);
end;

wstecz

ADMIN

25. 

Co zrobić, aby program na pasku zadań migał? 2003-10-09

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 "gasł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;

wstecz

ADMIN

26. 

Jak wyświetlić messagebox\'a z flagę błędu, pytania lub informacji? 2003-10-09

Składnia
begin
messagebox(handle,'treść','tytuł okna', mb_ok + mb_iconerror); //błędu
messagebox(handle,'treść','tytuł okna', mb_ok + mb_iconquestion); // pytania
messagebox(handle,'treść','tytuł okna', mb_ok + mb_iconinformation); // informacji
end;

wstecz

ADMIN

27. 

Jak zmieniać datę w systemie? 2003-10-09

Zmiana daty w systemie nie jest wcale trudna. Wystarczy tylko zadeklarować zmienną typu Systemtime. Do zmiany miesiąca służy metoda "wMonth", dnia "WDay", a roku "wYear". Na końcu widać funkcję SetLocalTime, która zmienia nasz czas w podane wcześniej wartości.
Składnia:
var
Data:Systemtime; //deklarowanie zmiennej typu Systemtime
begin
Data.wMonth:= 12; //Przypisywanie wartości miesiąca
Data.wDay:=22; //Przypisywanie wartości dnia
Data.wYear:=1995; //Przypisywanie wartości roku
SetLocalTime(Data); //Zmiana czasu z podanymi wcześniej wartościami
end;

wstecz

ADMIN

28. 

Jak uzyskać informację o pamięci ? 2003-10-09

var
MS:TMemoryStatus;
begin
MS.dwLength:=sizeof(ms);
GlobalMemoryStatus(ms);
with ms,listbox1.items do begin
add('Pamięć używana : '+inttostr(dwMemoryLoad)+' %');
add('Całkowita pamięć fizyczna : '+inttostr(dwToTalPhys)+' bajtów');
add('Wolna pamięć fizyczna : '+inttostr(dwAvailPhys)+' bajtów');
add('Całkowita pamięć stronicowana : '+inttostr(dwTotalPageFile)+' bajtów');
add('Wolna pamięć stronicowana : '+inttostr(dwAvailPageFile)+' bajtów');
add('Całkowita pamięć wirtualna : '+inttostr(dwTotalVirtual)+' bajtów');
add('Wolna pamięć wirtualna : '+inttostr(dwAvailVirtual)+' bajtów');
end;
end;

wstecz

ADMIN

29. 

Jak rozpoznać wersję systemu operacyjnego ? 2003-10-09

var
OS:TOsVersionInfo;
begin
OS.dwOSVersionInfoSize:=SizeOf(os);
GetVersionEx(os);
case os.dwPlatformId of
VER_PLATFORM_WIN32s: Form1.Caption:='WIN 3.1';
VER_PLATFORM_WIN32_WINDOWS: Form1.Caption:='WIN 95\98';
VER_PLATFORM_WIN32_NT: Form1.Caption:='WIN NT';
end;
end;

wstecz

ADMIN

30. 

Jak rozpoznać typ napędu ? 2003-10-09

procedure TypyNapedu;
var
i,typ: Integer;
c,nazwa: String;
begin
for i:=Ord('A') to Ord('Z') do
begin
c:=chr(i)+':\';
typ:=GetDriveType(PChar(c));

case typ of
0: Nazwa:=C+' Nie można określić typu urządzenia';
1: Nazwa:=C+' Na urządzeniu nie istnieje katalog źródłowy';
Drive_Removable: Nazwa:=C+' Dysk wymienny';
Drive_Fixed: Nazwa:=C+' Dysk stały';
Drive_Remote: Nazwa:=C+' Dysk sieciowy';
Drive_Cdrom: Nazwa:=C+' Napęd CD-ROM';
Drive_Ramdisk: Nazwa:=C+' Dysk pamięciowy (RAM disk)';
end;

if not ((typ=0) or (typ=1)) then
ListBox1.Items.AddObject(Nazwa, Pointer(i));
end;
end;

wstecz

ADMIN

31. 

Jak dodać pozycję w Dodaj\\Usuń programy (Panel Sterowania)? 2003-10-09

Nalezy dodac nowy klucz w 'HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall'
W nowym kluczu nalezy dodac Nową wartość ciągu o nazwie DisplayName i wartości odpowiadającej nazwie aplikacji
oraz dodac Nową wartość ciągu o nazwie UninstallString i wartośći odpowiadającej plikowi do odinstalowania

wstecz

ADMIN

32. 

Jak odczytać ikonę skojarzoną z rozszerzeniem? 2003-10-09

uses ShellAPi;


var
sfi : PShFileInfo;

begin
GetMem( sfi, sizeof(TShFileInfo) );
try
shGetFileInfo( PChar('sciezka_i_nazwa_pliku'), 0, sfi^, sizeof(TShFileInfo), shgfi_sysiconindex or shgfi_icon or shgfi_smallicon);

Form1.Icon.Handle:=sfi.hIcon;

finally
FreeMem(sfi);
end;
end;

wstecz

ADMIN

33. 

Jak symulować naciśnięcie klawisza klawiatury ? 2003-10-09

Na formie powinien być komponent TEdit i TButton

type
TKomunikatLista = class(TList)
public
destructor Destroy; override;
end;

var
KomIlosc: word ;
Hook:Integer;
Komunikat:TEventMsg;
KomunikatLista: TKomunikatLista ;

destructor TKomunikatLista.Destroy;
var
i: word;
begin
for i := 0 to Count-1 do
Dispose(PEventMsg(Items[i]));
inherited Destroy;
end;

procedure ZrobKomunikat(Klawisz: byte; Komun: Cardinal);
var
Kom: PEventMsg;
begin
New(Kom);
with Kom^ do begin
message := Komun;
paramL := Klawisz;
paramH := MapVirtualKey(Klawisz, 0);
time := GetTickCount;
hwnd := 0;
end;
KomunikatLista.Add(Kom);
end;


function Play(Code: integer; wParam, lParam: Longint): Longint; stdcall;
begin
case Code of
hc_Skip: begin
inc(KomIlosc);
if KomunikatLista.Count<=KomIlosc then begin
UnhookWindowsHookEx(Hook);
KomunikatLista.Free; end
else
Komunikat := TEventMsg(KomunikatLista.Items[KomIlosc]^);
Result := 0;
end;

hc_GetNext: begin
PEventMsg(lParam)^ := Komunikat;
Result := 0
end
else
Result := CallNextHookEx(Hook, Code, wParam, lParam);
end;
end;

procedure Push(s:string);
var x:integer;
begin
KomunikatLista:=TKomunikatLista.Create;
for x:=1 to Length(s) do begin
ZrobKomunikat(vkKeyScan(s[x]), wm_KeyDown);
ZrobKomunikat(vkKeyScan(s[x]), wm_KeyUp);
KomIlosc := 0;
end;
Komunikat:=TEventMsg(KomunikatLista.Items[0]^);
Hook:=SetWindowsHookEx(wh_JournalPlayback, Play, hInstance, 0);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.SetFocus;
Push('symulacja');
end;

wstecz

ADMIN

34. 

Jak zawiesić działanie klawiatury? 2003-10-09

uses ShellApi;

ShellExecute(Handle,'open','rundll32','keyboard,disable',nil,SW_SHOWNORMAL);

wstecz

ADMIN

35. 

Jak pobrać lub zmienić częstotliwość migania kursora ? 2003-10-09

SetCaretBlinkTime(200);
GetCaretBlinkTime;

wstecz

ADMIN

36. 

Jak pobrać lub ustawić prędkość dwukrotnego kliknięcia myszą ? 2003-10-09

SetDoubleCliktime(10); Standardowo 500 osiągalne również poprzez parametr 0

Funkcja GetDoubleClickTime zwraca aktualne ustawienie

wstecz

ADMIN

37. 

Jak zamienić przyciski myszy ? 2003-10-09

SwapMouseButton(True); Aby przywrócić przyciski myszy należy podać parametr False

wstecz

ADMIN

38. 

Jak poustawiać okna jedno pod drugim (cascade)? 2003-10-09

var Obszar:TRect;
begin
Obszar.Top:=0;
Obszar.Left:=0;
Obszar.Right:=640;
Obszar.Bottom:=480;
CascadeWindows(GetDesktopWindow,MDITILE_SKIPDISABLED,,@Obszar,0,NIL);
end;

wstecz

ADMIN

39. 

Jak poustawiać okna obok siebie (tile) ? 2003-10-09

var Obszar:TRect;
begin
Obszar.Top:=0;
Obszar.Left:=0;
Obszar.Right:=640;
Obszar.Bottom:=480;
TileWindows(GetDesktopWindow,MDITILE_HORIZONTAL,@Obszar,0,NIL);
end;

Drugim parametrem funkcji TileWindows może być MDITILE_VERTICAL

wstecz

ADMIN

40. 

Jak zabić dowolny proces w systemie ? 2003-10-09

function ZabijProces(ProcessId:Integer):Boolean;
var
Uchwyt:tHandle;
begin
Uchwyt:=OpenProcess(PROCESS_TERMINATE,bool(0),ProcessId);
if TerminateProcess(Uchwyt,0) then result:=true else result:=false;
CloseHandle(Uchwyt);
end;

wstecz

ADMIN

41. 

Jak wysłać komunikat do wszystkich aplikacji ? 2003-10-09

Jako uchwyt okna w funkcji SendMessage lub PostMessage podać HWND_BROADCAST

wstecz

ADMIN

42. 

Jak zrobić by program mógł być uruchamiany tylko w jednym egzemplarzu? 2003-10-09

unit unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
MessageId: Integer;
{ Private declarations }
public
{ Public declarations }
end;

const
UniqueAppStr : PChar = 'To jest unikatowy string aplikacji';


MI_FAIL_SUBCLASS = 1;
MI_FAIL_CREATE_MUTEX = 2;

var
Form1: TForm1;
MutHandle: THandle =0;
WProc: TFNWndProc = Nil;
MessageID:integer;
MIError: Integer = 0;

implementation



{$R *.DFM}

function NewWndProc(Handle: HWND; Msg: Integer; wParam, lParam: Longint):
Longint; stdcall;
begin

{ Jeżeli to ten komunikat... }
if Msg = MessageID then
begin
{ jeżeli okno główne jest zminimalizowane, przywróć jego normalną postać }
if IsIconic(Application.Handle) then
begin
Application.MainForm.WindowState := wsNormal;
Application.Restore;
end;
SetForegroundWindow(Application.MainForm.Handle);
Result := 0;
end
{ W przeciwnym wypadku przekaż komunikat do poprzedniej procedury okienkowej }
else
Result := CallWindowProc(WProc, Handle, Msg, wParam, lParam);
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
MessageID := RegisterWindowMessage(UniqueAppStr);
MutHandle := OpenMutex(MUTEX_ALL_ACCESS, False, UniqueAppStr);
if MutHandle = 0 then
begin
WProc := TFNWndProc(SetWindowLong(Application.Handle, GWL_WNDPROC,Longint(@NewWndProc)));
{ Zasygnalizuj nieudany subclassing }
if WProc = Nil then
MIError := MIError or MI_FAIL_SUBCLASS;

MutHandle := CreateMutex(Nil, False, UniqueAppStr);
if MutHandle = 0 then
MIError := MIError or MI_FAIL_CREATE_MUTEX;
end else begin
{ Pierwszy egzemplarz programu jest już uruchomiony }
ShowMessage('Nie mozna uruchomic drugiego egzemplarza tej aplikacji');
Application.Terminate;
end;
end;

end.

Martin Brzezinka zaproponował inny sposób

procedure TForm1.FormCreate(Sender: TObject);
begin
if GlobalFindAtom('PROGRAM_RUNNING') = 0 then
atom := GlobalAddAtom('PROGRAM_RUNNING')
else
begin
MessageDlg('You have the program running all ready!!', mtWarning,
[mbOK], 0);
Halt;
end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
GlobalDeleteAtom(atom);
end;

wstecz

ADMIN

43. 

Jak ustawić wygaszacz ekranu na (brak) ? 2003-10-09

SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, Word(False), nil, 0);

Aby przywrócić poprzednie ustawienia

SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, Word(True), nil, 0);

wstecz

ADMIN

44. 

Jak wyświetlić plik pomocy ? 2003-10-09

uses ShellApi;

procedure TForm1.Button1Click(Sender:TObject);
begin

ShellExecute(Handle, 'open', 'sciezka+nazwa_pliku', nil, nil, SW_SHOWNORMAL);

end;

wstecz

ADMIN

45. 

Jak zastąpić pascalową procedurę Delay ? 2003-10-09

Sleep(ilosc_milisekund)

wstecz

ADMIN

46. 

Jak za pomocą Delphi włączyć i wyłączyć monitor ? 2003-10-09

SendMessage(Application.Handle,wm_SysCommand,SC_MonitorPower,1);
//wyłączenie monitora

SendMessage(Application.Handle,wm_SysCommand,SC_MonitorPower,-1);
//włączenie monitora

wstecz

ADMIN

47. 

Jak napisać odpowiednik pascalowej funkcji PORT ? 2003-10-09

function PortIn(Port:Word):Byte;
var Cos:Byte;
begin
asm
mov DX , Port
in AL , DX
mov Cos, AL
end;
PortIn:=Cos;
end;


procedure PortOut(Port:Word;Wartosc:Byte); assembler;
asm
mov DX, Port
mov AL, Wartosc
out DX, AL
end;

wstecz

ADMIN

48. 

Jak pobrać nazwy wszystkich czionek dostępnych w systemie ? 2003-10-09

function Fonty(var LogFont: TLogFont; var TextMetric: TTextMetric; FontType: Integer; Data: Pointer): Integer; stdcall;
begin
Form1.Memo1.Lines.Append(LogFont.lfFaceName);
Result := 1;
end;

procedure TForm1.Button1Click(Sender: TObject);
var DC:HDC;
begin
DC:=GetDC(0);
EnumFonts(DC,nil,@Fonty,nil);
end;

wstecz

ADMIN

49. 

Jak zmienić położenie przycisku Start - Windows\'a? 2003-10-09

var Uchwyt: THandle;
begin

Uchwyt := FindWindow(PChar('Shell_TrayWnd'), nil);
SetWindowPos(Uchwyt, HWND_TOPMOST, 200, 200, 60, 10,SWP_NOSENDCHANGING or SWP_FRAMECHANGED);

end;

wstecz

ADMIN

50. 

Jak wrzucić program do Traya ( obok zegarka na pasku zadań ) ? 2003-10-09

Są dwie rzeczy, które trzeba wziąć pod uwagę tworząc aplikację do traya. Pierwsza to "ukrycie" aplikacji przed Windows. Mimo, że aplikacje takie wyglądają i zachowują się jak zwykłe aplikacje Windows, nie można się na nie przełączyć przy użyciu Alt-Tab ani nie mają swojego przycisku na pasku zadań. Tym zajmiemy się najpierw.

Każde okno posiadające styl WS_EX_TOOLWINDOW ani nie ma przycisku na pasku zadań ani nie można się na nie przełączyć. Z początku może wydawać się właściwym ustawienie tego stylu przy użyciu CreateParams. Niestety nie zadziała to dla formy. Tu mała dygresja. Główna forma aplikacji nie jest oknem (w terminologii Windows) aplikacji. Obiekt aplikacji ma swoje własne okno - nie można go zobaczyć ale ono "tam" jest. To jest właśnie to okno, do którego należy przypisać styl WS_EX_TOOLWINDOW. Gdzie więc należy wstawić kod? Oczywiście w źródle projektu. Po wybraniu View|Project Source należy skopiować poniższy kod:



program Project1;

uses Forms,
Unit1 in 'Unit1.pas' {Form1},
Windows; //To jest wymagane aby znana była stała WS_EX_TOOLWINDOW i pozostałe

{$R *.RES}

//Deklaracja zmiennej do przyjęcia informacji o stylu okna

var ExtendedStyle : Integer;

begin
Application.Initialize;
//Pobranie informacji o oknie aplikacji przy użyciu GetWindowLong
ExtendedStyle:=GetWindowLong(Application.Handle, GWL_EXSTYLE);

//Teraz ustawiamy styl rozszerzony przy użyciu operacji na bitach
//Przekształca to okno z okna-aplikacji do okna-narzędzia
SetWindowLong(Application.Handle,GWL_EXSTYLE,ExtendedStyle or WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW);
Application.CreateForm(TForm1, Form1);
Application.Run;
end.


A teraz aby utworzyć właściwy efekt aplikacji w trayu będziemy potrzebowali przede wszystkim głównej formy aplikacji. Połóż na formie komponent TPopupMenu. Będzie to główny interfejs do naszej aplikacji. Popatrz na poniższy kod:


{ Poniższe umieszcza aplikację w trayu. Jest to główna forma aplikacji. Posiada ona menu popup używane do wyświetlenia formy i zamknięcia aplikacji. Używając modułu ShellApi w prosty sposób pokażemy ikonę aplikacji w trayu i spowodujemy aby reagowała na kliknięcia myszą }

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ShellAPI, ExtCtrls, Menus;

type
TForm1 = class(TForm)
PopupMenu1: TPopupMenu;
ShowMainForm1: TMenuItem;
N1: TMenuItem;
ExitApplication1: TMenuItem;
procedure FormCreate(Sender: TObject);
procedure ShowMainForm1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure ExitApplication1Click(Sender: TObject);
private
procedure WndProc(var Msg : TMessage); override;
public
IconNotifyData : TNotifyIconData;
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
// Zostawiamy tylko przycisk zamykający okno
BorderIcons := [biSystemMenu];

// Teraz wypełniamy rekord IconNotifyData tak aby przyjmował
// komunikaty wysyłane do aplikacji i pokazywał "dymki" podpowiedzi.
with IconNotifyData do begin
hIcon:=Application.Icon.Handle;
uCallbackMessage:=WM_USER+1;
cbSize:=SizeOf(IconNotifyData);
Wnd:=Handle;
uID:=100;
uFlags:=NIF_MESSAGE+NIF_ICON+NIF_TIP;
end;
// Kopiujemy tytuł aplikacji jako "dymek"
StrPCopy(IconNotifyData.szTip, Application.Title);

// Dodajemy ikonę do traya
Shell_NotifyIcon(NIM_ADD,@IconNotifyData);
end;

procedure TForm1.WndProc(var Msg : TMessage);
var
p : TPoint;
begin
if (Msg.Msg=WM_USER+1)and(Msg.lParam=WM_RBUTTONDOWN) then
begin
GetCursorPos(p);
PopupMenu1.Popup(p.x, p.y);
end; inherited;
end;

// To jedna z procedur obsługi elementów menu
procedure TForm1.ShowMainForm1Click(Sender: TObject);
begin
Form1.Show;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caNone;
Form1.Hide;
end;

procedure TForm1.ExitApplication1Click(Sender: TObject);
begin
Shell_NotifyIcon(NIM_DELETE, @IconNotifyData);
Application.ProcessMessages;
Application.Terminate;
end;

end.

Jak widać nie ma wiele do zrobienia. Ale ważne jest aby rozumieć co zrobiliśmy w metodzie Create i jakie znaczenie ma rekord IconNotifyData. Jest to rekord zdefiniowany w module ShellAPI, który przechowuje informację o ikonie w trayu. Zauważ flagi, których użyliśmy: NIF_MESSAGE + NIF_ICON + NIF_TIP. Oznaczają one kolejno: obsługę komunikatów dla aplikacji, pokazywanie ikony aplikacji i pokazywanie "dymku" z podpowiedzią.

Następna sprawa to nadpisanie procedury WndProc (skrót od WindowProcedure). Dostaje ona wszystkie komunikaty przesyłane do okna i zachowuje się jak centralna rozdzielnia komunikatów. Można przejąć obsługę komunikatu pisząc własną jego obsługę i wywołując odziedziczoną procedurę. Przy obsłudze komunikatu sprawdzamy czy jest to nasz własny (wm_User+1) zdefiniowany w zmiennej IconNotifyData oraz czy nastąpiło kliknięcie prawym przyciskiem myszy. Pozostałe komunikaty przesyłamy bez zmian.[...]"

wstecz

ADMIN

51. 

Jak programowo zmienić rozdzielczość ekranu ? 2003-10-09

Wykorzystuje się do tego celu funkcję ChangeDisplaySettings

procedure TForm1.Button1Click(Sender:TObject);
var Mode:TDeviceMode;
S:String;
begin
with Mode do
begin
dmSize:=SizeOf(Mode);
dmBitsPerPel:=16;
dmPelsWidth:=800;
dmPelsHeight:=600;
dmFields:=DM_PELSWIDTH+DM_PELSHEIGHT;
end;
case ChangeDisplaySettings(Mode,0) of
DISP_CHANGE_SUCCESSFUL:S:='Operacja przebiegła pomyślnie';
DISP_CHANGE_RESTART:S:='Aby zmiany odniosły skutek należy zrestartować systi';
DISP_CHANGE_BADFLAGS:S:='Błędne pole dmFields';
DISP_CHANGE_FAILED:S:='Błąd podczas ustawiania trybu';
DISP_CHANGE_BADMODE:S:='Ten tryb nie jest obsługiwany';
DISP_CHANGE_NOTUPDATED:S:='Rejestr nie został zaktualizowany';
else S:='Nieznany kod wyniku';
end;
ShowMessage(S);
end;

wstecz

ADMIN

52. 

Jak wywołać okienko do wyboru katalogu ? 2003-10-09

Do wywołania Windows'owskiego okienka służy systemowa funkcja SHBrowseForFolder.

Funkcja ta jako parametr wywołania przyjmuje strukturę typu TBrowseInfo. Określa ona parametry wejściowe dla wyświetlanego okienka.

Poszczególne pola tej struktury oznaczają:

hwndOwner uchwyt do okna, z poziomu którego chcemy wywołać okienko wyboru;
pidlRoot wskaźnik na katlog podstawowy, który stanie się u nas katalogiem głównym i niemożliwe będzię przejście wyżej od niego; jeżeli podamy nil to przyjęty zostanie najwyższy możliwy poziom, czyli Desktop;
pszDisplayName wskaźnik na bufor tekstowy (PChar), który będzie przechowywał katalog wybrany przez użytkownika;
lpszTitle określa napis informacyjny jaki pojawi się w okienku tuż nad drzewem katalogów;
ulFlags ustala dodatkowe opcje, których znaczenie przedstawione zostało poniżej;
lpfn wskaźnik na funkcję zwrotną, która zostanie wywołana w momencie wystąpienia ewentualnego błędu; może przyjmować nil;
lParam parametr, jaki zostanie przekazany do powyższej funkcji;
iImage zmienna przyjmuje indeks ikony z listy systemowej, odpowiadający wybranemu katalogowi.

W strukturze tej występuje pole ulFlags, które może przyjąć dowolną kombinację z wymienionych niżej wartości (oczywiście pierwsze trzy paramatry wykluczają się nawzajem):

BIF_BROWSEFORCOMPUTER powoduje przeszukiwanie jedynie pod kątem komputerów; jeżeli użytkownik wybierze cokolwiek innego niż komputer przycisk OK pozostanie niedostępny;
BIF_BROWSEFORPRINTER jak wyżej, ale dotyczy drukarek;
BIF_RETURNONLYFSDIRS tutaj również, ale pozwala wybrać jedynie katalogi;
BIF_DONTGOBELOWDOMAIN powoduje ukrycie wszelkich katalogów sieciowych;
BIF_STATUSTEXT dodaje w obszarze okienka pole statusu, którego zawartość może być modyfikowana poprzez wysłanie komunikatu od funkcji zwrotnej.

Jeżeli chcemy wyświetlić okienko, to w pierwszej kolejności musimy wypełnić właśnie ten rekord. Deklarujemy użycie modułu ShlObj i dalej definiujemy trzy zmienne:

var
opcje : TBrowseInfo;
bufor : PChar;
dir : PItemIDList;

Następnie przydzielamy pamięć dla naszego bufora. Jego rozmiar jest tutaj określony przez wartość stałej systemowej MAX_PATH: GetMem(bufor, MAX_PATH);

W dalszej kolejności wypełniamy pozostałe pola rekordu, na przykład w podany niżej sposób:

with opcje do
begin
hwndOwner:=Form1.Handle;
pidlRoot:=nil;
pszDisplayName:=bufor;
lpszTitle:='Dokonaj wyboru katalogu:';
ulFlags:=BIF_RETURNONLYFSDIRS;
lpfn:=nil;
end;

Przypisując zmiennej ulFlags podaną wartość ograniczymy możliwość wyboru jedynie do katalogów, co jest sytuacją typową dla większości zastosowań. Teraz możemy już wywołać nasze okienko: dir:=SHBrowseForFolder(opcje);Następnie wystarczy sprawdzić, czy zwrócona przez fukcję wartość nie jest pusta i pobrać ścieżkę do wybranego obiektu przypisując ją na przykład zmiennej bufor:

if dir<>nil then SHGetPathFromIDList(dir,bufor);

Na koniec nie możemy jeszcze zapomnieć o zwolnieniu pamięci: FreeMem(bufor);
I to w zasadzie byłoby na tyle. Jednak w niektórych przypadkach zależy nam, aby ograniczyć przeszukiwanie tylko do konkretnej gałęzi lub też folderu specjalnego. Możemy na przykład ograniczyć wybór użytkownika wyłącznie do napędów dysków. Aby tego dokonać należy w odpowiedni sposób zmodyfikować flagę pidlRoot. Do tego celu służy funkcja SHGetSpecialFolderLocation, która podaje położenie folderów specjalnych. Jako paramatery przyjmuje ona uchwyt do bieżącego okienka, stałą określającą zakres oraz wskaźnik na zmienną, której przypisany zostanie stosowny identyfikator obiektu. Dla naszego przykładu zakres określony jest przez wartość stałej CSIDL_DRIVES. Wywołanie funkcji będzie przedstawiało się zatem następująco: SHGetSpecialFolderLocation(Form1.Handle,CSIDL_DRIVES,root);Następnie wystarczy dokonać przypisania: opcje.pidlRoot=root;i otrzymamy pożądane przez nas zawężenie. Z innych interesujących zakresów wymienić należy:

CSIDL_DESKTOP Pulpit (Desktop)
CSIDL_DRIVES Mój Komputer (My Computer)
CSIDL_NETWORK Otoczenie sieciowe (Network Neighborhood)
CSIDL_PERSONAL Moje dokumenty (My documents)
CSIDL_PROGRAMS gałąź Programy z Menu Start
CSIDL_STARTMENU pełne Menu Start

wstecz

ADMIN

53. 

Jak wyłączyć skróty Windows\'a CTRL+ALT+DEL CTRL+ESC ALT+TAB i.t.d. ? 2003-10-09

Trzeba oszukać Windows'a tak, żeby myślał, że nasza alpikacja jest wygaszaczem ekranu. Nie działa na Windows NT !!!

var wartosc:longbool;

begin
SystemParametersInfo(97,Word(True),@wartosc,0); //Włącza blokadę
SystemParametersInfo(97,Word(False),@wartosc,0); //Wyłącza blokadę
end;

wstecz

ADMIN

54. 

Jak odczytywać i zapisywać wartości w rejestrze Windows\'a ? 2003-10-09

Do grzebania w rejestrze służy objekt TRegistry ( lub TRegIniFile ).W sekcji USES deklarujemy Registry. Obiekt ten należy stworzyć przy pomocy konstruktora create tzn. Nazwa_Zmiennej_TRegisry:=TRegistry.Create; W segmencie VAR należy zadeklarować nazwę zmiennej typu TRegistry np. Rejestr:TRegistry; Właściwośći RootKey należy przypisać nazwę klucza głównego (domyślnie HKEY_CURRENT_USER) np. Rejestr.RootKey:=(HKEY_LOCAL_MACHINE); . function OpenKey(const Key: string; CanCreate: Boolean): Boolean; otwiera interesujący nas klucz. function ReadString(const Name: string): string; powoduje odczytanie wartości ciągu (o nazwie podanej w Name). Do zapisania wartości ciągu używamy procedure WriteString(const Name, Value: string); gdzie w zmiennej Name podajemy nazwę nowej wartości ciągu , a w Value wartość ciągu. Pozostałe funkcje i procedury należy używać analogicznie do opisanej.

Przykład : ( odczytanie numeru seryjnego Windows'a )


uses Registry;

procedure TForm1.Button1Click(Sender: TObject);

var Rejestr:TRegistry;

begin
Rejestr:=TRegistry.Create;
Rejestr.RootKey:=(HKEY_LOCAL_MACHINE);
Rejestr.OpenKey('Software\Microsoft\Windows\CurrentVersion',False);
Label1.Caption:=Rejestr.ReadString('ProductId');
end;

wstecz

ADMIN

55. 

Jak nie korzystając z komponentu dokleić do pliku program EXE? 2003-10-09

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.

wstecz

ADMIN

56. 

Jak skonwertować zmienną Integer na PChar i odwrotnie? 2003-10-09

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

wstecz

ADMIN

57. 

Jak wydrukować stronę testową drukarki? 2003-10-09

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);

wstecz

ADMIN

58. 

Jak zmienić tekst dowolnego okna? 2003-10-09

SetWindowText(Handle, 'Nowa nazwa okna');

wstecz

ADMIN

59. 

Jak pobrać uchwyt ( Handle ) dowolnego okna? 2003-10-09

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');

wstecz

ADMIN

60. 

Jak odczytać numer seryjny dysku lub dyskietki? 2003-10-09

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.

wstecz

ADMIN

61. 

Jak utworzyć skrót do programu na pulpicie lub w menu start? 2003-10-09

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;

wstecz

ADMIN

62. 

Jak zminimalizować, przywrócić, ukryć okno? 2003-10-09

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);

wstecz

ADMIN

63. 

Jak ograniczyć położenie kursora myszki? 2003-10-09

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;

wstecz

ADMIN

64. 

Jak zablokować ponowne uruchomienie programu? 2003-10-09

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;

wstecz

ADMIN

65. 

Jak ukryć program z paska zadań? 2003-10-09

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.

wstecz

ADMIN

66. 

Jak pobrać ikony programów? 2003-10-09

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;

wstecz

ADMIN

67. 

Jak załadować z zasobów kursor? 2003-10-09

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;

wstecz

ADMIN

68. 

Jak ukryć kursor myszy? 2003-10-09

ShowCursor(False);
ShowCursor(True);

wstecz

ADMIN

69. 

Jak wysunąć szufladkę CD-ROM-u? 2003-10-09

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ń

wstecz

ADMIN

70. 

Jak zmienić tapetę pulpitu? 2003-10-09

var
S : String;
begin
S := 'zdjecie.bmp';
SystemParametersInfo(SPI_SETDESKWALLPAPER,0, PChar(s),
SPIF_UPDATEINIFILE or SPIF_SENDWININICHANGE);

wstecz

ADMIN

71. 

Jak odczytać ścieżkę katalogu Windows i System? 2003-10-09

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.

wstecz

ADMIN

72. 

Jak sprawdzić jaka jest pojemność dysku i ile jest wolnego miejsca? 2003-10-09

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;

wstecz

ADMIN

73. 

Jak wykryć czy w komputerze jest zainstalowana karta muzyczna? 2003-10-09

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!';

wstecz

ADMIN

74. 

Jak ustawić kursor w podanym przeze mnie miejscu? 2003-10-09

To tego służy funkcja SetCursorPos(10, 10);
W tym przypadku ustawi kursor myszy w punkcie 10, 10.

wstecz

ADMIN

75. 

Jak zamknąć, zresetować, wylogować się z systemu? 2003-10-09

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

wstecz

ADMIN