Hvordan lage egendefinerte InputQuery /messagebox etc uten pain.

Bruke en måte som kan se ut som en hack det er mulig å endre generiske meldingsbokser og endre ikonet, redigere, knapp, størrelse, etc ...
Ideen bak denne tilpasningen er å opprette en egen melding, legge det til i køen * før * ringer meldingsboksen. I meldingen hente du håndtaket på vinduet (hvis det er messagebox) eller form (hvis det er InputBox /inputquery /messagedlg), og du endre hva du vil. La meg gi to eksempler, en for en vanlig api messagebox og en annen med en inputquery
første eksempel. Du må endre standardteksten av Ja /Nei-knappen på en vanlig messagebox
skriver TForm1 = klasse (. TForm) Button1: TButton; Prosedyren Button1Click (Sender: TObject); private prosedyre WMHackBox (var budskapet: TMessage); Meldingen WM_USER + 1 025; ende; ... Gjennomføring ... prosedyre TForm1.Button1Click (Sender: TObject); begynne //Publisering vår egen melding Postmessage (håndtak, WM_USER + 1025, 0, 0); //Messagebox samtale Application.MessageBox ('jeg' 'helt dum', 'MyApplication', MB_YESNO eller MB_ICONINFORMATION.); end;
prosedyre TForm1.WMHackBox (var budskapet: TMessage); Var h: HWND; begynne //Meldingsboksen vises, la oss hente håndtaket h: = FindWindow (WC_DIALOG, 'MyApplication'); //Hvis dette er riktig messagebox, la oss endre det hvis GetParent (h) = Application.Handle deretter begynne SetDlgItemText (h, ID_YES, 'I & enig'); SetDlgItemText (h, ID_NO, 'I & uenig'); ende; ende;
Merk at hvis du bruker MessageDlg, det er ikke en vanlig API messagebox men en Form opprettet dynamisk av Delphi. Se andre Eksempel
andre eksempel: Du må endre redigerings tilhører en InputQuery, for eksempel PasswordChar
skriver TForm1 = klasse (TForm) Button1:.. TButton; Prosedyren Button1Click (Sender: TObject); private prosedyre WMHack (var budskapet: TMessage); Meldingen WM_USER + 1 024; ende; ... Gjennomføring ... konst ACaption = 'Caption';
prosedyre TForm1.Button1Click (Sender: TObject); begynne Postmessage (håndtak, WM_USER + 1024, 0, 0); InputBox (ACaption, "Spør", "Standard"); end;
prosedyre TForm1.WMHack (var budskapet: TMessage); Var i: Integer; j: Integer; begynne for i: = 0 til Screen.FormCount-en gjøre hvis Screen.Forms [i] .Caption = ACaption begynne så for j: = 0 til Screen.Forms [i] .ControlCount-en gjøre hvis Screen.Forms [i] .Controls [j] er TEdit deretter begynne TEdit (Screen.Forms [i] .Controls [j]) PasswordChar: = '#';. TEdit (Screen.Forms [i] .Controls [j]) velger.; Exit; ende; ende; slutt;



Previous:
Next Page: