Erstellen Sie benutzerdefinierte Inputquery/Messagebox etc. ohne Schmerzen.

Erstellen Sie benutzerdefinierte Inputquery/Messagebox etc. ohne Schmerzen.


Es ist möglich, generische Message-Boxen ändern und Symbol, bearbeiten, Schaltfläche, Größe usw., mit einer Art und Weise, die es aussehen wie ein Hack kann...

Die Idee hinter dieser Anpassung ist, erstellen Sie eine benutzerdefinierte Nachricht, senden Sie es an der Warteschlange * vor * Aufruf Meldungsfelds. In der Nachricht (wenn es Messagebox ist), rufen Sie das Handle des Fensters, oder Form (wenn es Inputbox/Inputquery/Messagedlg ist) und ändern, was Sie wollen. Ich nenne zwei Beispiele, eines für eine regelmäßige api-Messagebox und zum anderen mit einem Inputquery.

1. Beispiel: müssen Sie ändern die Standardbeschriftung der ja/keine regulären Messagebox-Taste.

Typ
TForm1 = class(TForm)
Button1: TButton;
Prozedur Button1Click(Sender: TObject);
Private
Procedure WMHackBox (Var Message: TMessage); Nachricht WM_USER + 1025;
Ende;
...
Umsetzung
...
Prozedur TForm1.Button1Click(Sender: TObject);
beginnen
Unsere benutzerdefinierte Nachricht
PostMessage (Handle, WM_USER + 1025, 0, 0);
MessageBox-Aufruf
Application.MessageBox ('ich '' ganz dumm.', 'MyApplication', MB_YESNO oder MB_ICONINFORMATION);
Ende;

Procedure TForm1.WMHackBox (Var Message: TMessage);
var
h: HWND;
beginnen
Das Meldungsfeld angezeigt wird, lassen Sie uns dessen Handle abzurufen
h: = FindWindow (WC_DIALOG, 'MyApplication');
Ist dies der richtige Messagebox, lassen Sie uns es ändern
Wenn GetParent(h) = Application.Handle then
beginnen
SetDlgItemText (h, ID_YES, ' ich & Stimmen ');


SetDlgItemText (h, ID_NO, ' ich & nicht einverstanden ');
Ende;
Ende;

Bedenke, dass bei Verwendung von MessageDlg es keiner regelmäßigen API-Messagebox, sondern eine Form von Delphi dynamisch erstellt. Siehe 2. Beispiel.

Result'

2. Beispiel: Du musst eine InputQuery, zum Beispiel die PasswordChar-Eigenschaft bearbeiten ändern.

Typ
TForm1 = class(TForm)
Button1: TButton;
Prozedur Button1Click(Sender: TObject);
Private
Procedure WMHack (Var Message: TMessage); Nachricht WM_USER + 1024;
Ende;
...
Umsetzung
...
const
ACaption = 'Beschriftung';

Prozedur TForm1.Button1Click(Sender: TObject);
beginnen
PostMessage (Handle, WM_USER + 1024, 0, 0);
InputBox (ACaption, 'Prompt', 'Standard');
Ende;

Procedure TForm1.WMHack (Var Message: TMessage);
var
i: Integer;
j: Integer;
beginnen
für i: = 0 to Screen.FormCount-1
Wenn Screen.Forms[i]. Beschriftung = ACaption then
beginnen
für j: = 0 to Screen.Forms[i]. ControlCount-1
Wenn Screen.Forms[i]. Controls [j] ist dann TEdit.
beginnen
TEdit (Screen.Forms [i]. Controls[j]). PasswordChar: = '#';
TEdit (Screen.Forms [i]. Controls[j]). SelectAll;
Ausfahrt;
Ende;
Ende;
Ende;
Result








Erstellen Sie benutzerdefinierte Inputquery/Messagebox etc. ohne Schmerzen.


Erstellen Sie benutzerdefinierte Inputquery/Messagebox etc. ohne Schmerzen. : Mehreren tausend Tipps, um Ihr Leben einfacher machen.


Es ist möglich, generische Message-Boxen ändern und Symbol, bearbeiten, Schaltfläche, Größe usw., mit einer Art und Weise, die es aussehen wie ein Hack kann...

Die Idee hinter dieser Anpassung ist, erstellen Sie eine benutzerdefinierte Nachricht, senden Sie es an der Warteschlange * vor * Aufruf Meldungsfelds. In der Nachricht (wenn es Messagebox ist), rufen Sie das Handle des Fensters, oder Form (wenn es Inputbox/Inputquery/Messagedlg ist) und ändern, was Sie wollen. Ich nenne zwei Beispiele, eines für eine regelmäßige api-Messagebox und zum anderen mit einem Inputquery.

1. Beispiel: müssen Sie ändern die Standardbeschriftung der ja/keine regulären Messagebox-Taste.

Typ
TForm1 = class(TForm)
Button1: TButton;
Prozedur Button1Click(Sender: TObject);
Private
Procedure WMHackBox (Var Message: TMessage); Nachricht WM_USER + 1025;
Ende;
...
Umsetzung
...
Prozedur TForm1.Button1Click(Sender: TObject);
beginnen
Unsere benutzerdefinierte Nachricht
PostMessage (Handle, WM_USER + 1025, 0, 0);
MessageBox-Aufruf
Application.MessageBox ('ich '' ganz dumm.', 'MyApplication', MB_YESNO oder MB_ICONINFORMATION);
Ende;

Procedure TForm1.WMHackBox (Var Message: TMessage);
var
h: HWND;
beginnen
Das Meldungsfeld angezeigt wird, lassen Sie uns dessen Handle abzurufen
h: = FindWindow (WC_DIALOG, 'MyApplication');
Ist dies der richtige Messagebox, lassen Sie uns es ändern
Wenn GetParent(h) = Application.Handle then
beginnen
SetDlgItemText (h, ID_YES, ' ich & Stimmen ');


SetDlgItemText (h, ID_NO, ' ich & nicht einverstanden ');
Ende;
Ende;

Bedenke, dass bei Verwendung von MessageDlg es keiner regelmäßigen API-Messagebox, sondern eine Form von Delphi dynamisch erstellt. Siehe 2. Beispiel.

Result'

2. Beispiel: Du musst eine InputQuery, zum Beispiel die PasswordChar-Eigenschaft bearbeiten ändern.

Typ
TForm1 = class(TForm)
Button1: TButton;
Prozedur Button1Click(Sender: TObject);
Private
Procedure WMHack (Var Message: TMessage); Nachricht WM_USER + 1024;
Ende;
...
Umsetzung
...
const
ACaption = 'Beschriftung';

Prozedur TForm1.Button1Click(Sender: TObject);
beginnen
PostMessage (Handle, WM_USER + 1024, 0, 0);
InputBox (ACaption, 'Prompt', 'Standard');
Ende;

Procedure TForm1.WMHack (Var Message: TMessage);
var
i: Integer;
j: Integer;
beginnen
für i: = 0 to Screen.FormCount-1
Wenn Screen.Forms[i]. Beschriftung = ACaption then
beginnen
für j: = 0 to Screen.Forms[i]. ControlCount-1
Wenn Screen.Forms[i]. Controls [j] ist dann TEdit.
beginnen
TEdit (Screen.Forms [i]. Controls[j]). PasswordChar: = '#';
TEdit (Screen.Forms [i]. Controls[j]). SelectAll;
Ausfahrt;
Ende;
Ende;
Ende;
Result

Erstellen Sie benutzerdefinierte Inputquery/Messagebox etc. ohne Schmerzen.

Erstellen Sie benutzerdefinierte Inputquery/Messagebox etc. ohne Schmerzen. : Mehreren tausend Tipps, um Ihr Leben einfacher machen.
Erstellen Sie benutzerdefinierte Inputquery/Messagebox etc. ohne Schmerzen.
Wiezutun
Freunden empfehlen
  • gplus
  • pinterest

Kommentar

Einen Kommentar hinterlassen

Wertung