Créer des inputquery/messagebox etc sans douleur.
à l'Aide d'une manière qui peut ressembler à un hack, il est possible de modifier générique boîtes de message et de changer l'icône, modifier, bouton, taille, etc...
L'idée derrière cette personnalisation est de créer un message personnalisé, de la poster sur la file d'attente *avant* l'appel de la boîte de message. Dans le message, vous pouvez récupérer le handle de la fenêtre (si c'est messagebox) ou la forme (si c'est inputbox/inputquery/messagedlg) et de vous modifier ce que vous voulez. Permettez-moi de vous donner deux exemples, l'un pour un examen de routine de l'api messagebox et un autre avec un inputquery.
1er exemple: Vous avez besoin de modifier le titre par défaut du type Oui/Non bouton de régulièrement un messagebox.
type
TForm1 = class(TForm)
Button1: TButton
procédure Button1Click(Sender: TObject)
private
procédure WMHackBox(var message: TMessage) message WM_USER 1025
fin
...
application
...
procedure TForm1.Button1Click(Sender: TObject)
begin
// Affichage de notre message personnalisé
PostMessage(Poignée, WM_USER 1025, 0, 0)
// appel Messagebox
Application.MessageBox ('je' complètement stupide.', 'MyApplication', MB_YESNO ou MB_ICONINFORMATION)
fin
procedure TForm1.WMHackBox(var message: TMessage)
var
h: HWND
begin
// La boîte de message est affiché, nous allons récupérer sa poignée
h := FindWindow(WC_DIALOG, 'MyApplication')
// Si c'est la bonne messagebox, nous allons le modifier
si GetParent(h) = Application.Poignée puis
begin
SetDlgItemText(h, ID_YES, 'I & d'accord')
SetDlgItemText(h, ID_NO, 'I & pas d'accord')
fin
fin
Notez que si vous utilisez MessageDlg, ce n'est pas un régulier de l'API messagebox mais d'un Formulaire créé dynamiquement par Delphi. Voir 2ème Exemple.
2ème exemple: Vous avez besoin de modifier la modifier la propriété d'un InputQuery, par exemple le PasswordChar.
type
TForm1 = class(TForm)
Button1: TButton
procédure Button1Click(Sender: TObject)
private
procédure WMHack(var message: TMessage) message WM_USER 1024
fin
...
application
...
const
ACaption = 'Légende'
procedure TForm1.Button1Click(Sender: TObject)
begin
PostMessage(Poignée, WM_USER 1024, 0, 0)
InputBox(ACaption, 'Invite', 'Default')
fin
procedure TForm1.WMHack(var message: TMessage)
var
i: Integer
j: Integer
begin
for i := 0 à l'Écran.FormCount-1 do
si l'Écran.Les formes[i].Caption = ACaption puis
begin
pour j := 0 à l'Écran.Les formes[i].ControlCount-1 do
si l'Écran.Les formes[i].Les témoins[j] est TEdit puis
begin
TEdit(l'Écran.Les formes[i].Les témoins[j]).PasswordChar := '#'
TEdit(l'Écran.Les formes[i].Les témoins[j]).SelectAll
Sortie
fin
fin
fin
& nbsp
Creer des inputquery/messagebox etc sans douleur.
Creer des inputquery/messagebox etc sans douleur. : Plusieurs milliers de conseils pour vous faciliter la vie.
a l'Aide d'une maniere qui peut ressembler a un hack, il est possible de modifier generique boîtes de message et de changer l'icone, modifier, bouton, taille, etc...
L'idee derriere cette personnalisation est de creer un message personnalise, de la poster sur la file d'attente *avant* l'appel de la boîte de message. Dans le message, vous pouvez recuperer le handle de la fenetre (si c'est messagebox) ou la forme (si c'est inputbox/inputquery/messagedlg) et de vous modifier ce que vous voulez. Permettez-moi de vous donner deux exemples, l'un pour un examen de routine de l'api messagebox et un autre avec un inputquery.
1er exemple: Vous avez besoin de modifier le titre par defaut du type Oui/Non bouton de regulierement un messagebox.
type
TForm1 = class(TForm)
Button1: TButton
procedure Button1Click(Sender: TObject)
private
procedure WMHackBox(var message: TMessage) message WM_USER 1025
fin
...
application
...
procedure TForm1.Button1Click(Sender: TObject)
begin
// Affichage de notre message personnalise
PostMessage(Poignee, WM_USER 1025, 0, 0)
// appel Messagebox
Application.MessageBox ('je' completement stupide.', 'MyApplication', MB_YESNO ou MB_ICONINFORMATION)
fin
procedure TForm1.WMHackBox(var message: TMessage)
var
h: HWND
begin
// La boîte de message est affiche, nous allons recuperer sa poignee
h := FindWindow(WC_DIALOG, 'MyApplication')
// Si c'est la bonne messagebox, nous allons le modifier
si GetParent(h) = Application.Poignee puis
begin
SetDlgItemText(h, ID_YES, 'I & d'accord')
SetDlgItemText(h, ID_NO, 'I & pas d'accord')
fin
fin
Notez que si vous utilisez MessageDlg, ce n'est pas un regulier de l'API messagebox mais d'un Formulaire cree dynamiquement par Delphi. Voir 2eme Exemple.
2eme exemple: Vous avez besoin de modifier la modifier la propriete d'un InputQuery, par exemple le PasswordChar.
type
TForm1 = class(TForm)
Button1: TButton
procedure Button1Click(Sender: TObject)
private
procedure WMHack(var message: TMessage) message WM_USER 1024
fin
...
application
...
const
ACaption = 'Legende'
procedure TForm1.Button1Click(Sender: TObject)
begin
PostMessage(Poignee, WM_USER 1024, 0, 0)
InputBox(ACaption, 'Invite', 'Default')
fin
procedure TForm1.WMHack(var message: TMessage)
var
i: Integer
j: Integer
begin
for i := 0 a l'Ecran.FormCount-1 do
si l'Ecran.Les formes[i].Caption = ACaption puis
begin
pour j := 0 a l'Ecran.Les formes[i].ControlCount-1 do
si l'Ecran.Les formes[i].Les temoins[j] est TEdit puis
begin
TEdit(l'Ecran.Les formes[i].Les temoins[j]).PasswordChar := '#'
TEdit(l'Ecran.Les formes[i].Les temoins[j]).SelectAll
Sortie
fin
fin
fin
& nbsp
Créer des inputquery/messagebox etc sans douleur.
By commentfaire
Créer des inputquery/messagebox etc sans douleur. : Plusieurs milliers de conseils pour vous faciliter la vie.