Standard Windows Dialoglarını Değiştirmek

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Cevapla
RamazanG
Üye
Mesajlar: 73
Kayıt: 16 Tem 2010 03:38

Standard Windows Dialoglarını Değiştirmek

Mesaj gönderen RamazanG »

  Bazen Open/Save dialog pencerelerinde bağzı metinleri değiştirmek isteriz.
  Malesef Delphi windows dialoglarını değiştirmek için bize imkan sunmaz.
  ama Windows API kullanarak birşeyler yapabiliriz.
Bu uygulama Open dialog taki metinleri değiştirir.

Kod: Tümünü seç

uses
  CommDlg;

{...}

procedure TForm1.OpenDialog1Show(Sender: TObject);
{İlk önce dialog kontrolün özelliklerini algılamamaız lazım:}
const
  LB_FILETYPES_ID = 1089; // "File types:" label
  LB_FILENAME_ID = 1090;  // "File name:" label
  LB_DRIVES_ID = 1091;    // "Look in:" label

  Str1 = 'Four';
  Str2 = 'Five';
  Str3 = 'One';
  Str4 = 'Two';
  Str5 = 'Three';
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.Button5Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
  begin
    // ...
  end;
end;


{ Print - Dialog için:}

procedure TForm1.PrintDialog1Show(Sender: TObject);
begin
  SetWindowText(GetDlgItem(PrintDialog1.Handle, idOk), '&&OK2');
  SetWindowText(GetDlgItem(PrintDialog1.Handle, idCancel), '&Cancel2');
  SetWindowText(GetDlgItem(PrintDialog1.Handle, 1025), '&Properties2');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if PrintDialog1.Execute then
  begin
    // ...
  end;
end;



{ Kontrolü numaralandır - ID:}

function EnumProc(wnd: HWND; Lines: TStrings): BOOL; stdcall;
var
  buf, Caption: array [0..255] of char;
begin
  Result := True;
  GetClassname(wnd, buf, 256);
  GetWindowText(wnd, Caption, 256);
  Lines.Add(Format('ID: %d, class: %s, caption: %s',
    [GetDlgCtrlID(wnd), buf, Caption]));
end;

procedure TForm1.PrintDialog1Show(Sender: TObject);
begin
  memo1.Clear;
  EnumChildWindows(Printdialog1.Handle, @EnumProc, Integer(memo1.Lines));
end;
 
Cevapla