Monday, May 14, 2007

CommDlg

K příkladu potřebujeme knihovnu CommDlg. Celý příklad funguje tak, že si zjistíme "identifikační čísla" jednotlivých prvků (tedy kromě tlačítek, na ně lze odkazovat "rovnou") a na jejich základě pak přepíšeme jejich popisky přímo v dialogu, k čemuž nám bude nápomocná funkce SendMessage. Čísla jednotlivých prvků najdete ve zdrojovém kódu v konstantách a samotný kód je umístěn v události OnShow příslušného OpenDialogu.
.
.
.
uses CommDlg;
.
.
.

procedure TForm1.OpenDialog1Show(Sender: TObject);

const
LB_FILETYPES_ID = 1089;
LB_FILENAME_ID = 1090;
LB_DRIVES_ID = 1091;

Str1 = '&Otevřít';
Str2 = '&Storno';
Str3 = '&Typ souboru';
Str4 = '&Název';
Str5 = 'S&ložka';

var hOpenDialog: HWND;

begin
hOpenDialog := GetParent(OpenDialog1.Handle);
SendMessage(hOpenDialog, CDM_SETCONTROLTEXT, idOk, Longint(PChar(Str1)));
SendMessage(hOpenDialog, CDM_SETCONTROLTEXT, idCancel, Longint(PChar(Str2)));
SendMessage(hOpenDialog, CDM_SETCONTROLTEXT, LB_FILETYPES_ID, Longint(PChar(Str3)));
SendMessage(hOpenDialog, CDM_SETCONTROLTEXT, LB_FILENAME_ID, Longint(PChar(Str4)));
SendMessage(hOpenDialog, CDM_SETCONTROLTEXT, LB_DRIVES_ID, Longint(PChar(Str5)));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
OpenDialog1.Execute;
end;