Erstmal

hier im Forum!
Ja, warum das so ist: OnEnter wird vor OnMouseUp ausgelöst, wenn derweil aber die Maustaste losgelassen wird (wird sie ja normalerweise), dann wird das OnMouseUp nicht ausgelöst, weil dieses ja an das Dialog-Fenster geht.
Dass es tatsächlich so ist, lässt sich sehr einfach demonstrieren: Halt mal die Maustaste gedrückt, wenn du das Edit anklickst, dann bestätige den Dialog mit Return... Dann geht alles.
Ich frage mich allerdings, was es für einen Sinn hat in OnEnter eine Meldung auszugeben. Aber du wirst schon wissen was du tust.
Jedenfalls lässt sich das so lösen:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31:
| const WM_SHOWEDITENTERMSG = WM_USER + 10;
type TForm63 = class(TForm) Edit1: TEdit; Edit2: TEdit; procedure Edit1Enter(Sender: TObject); private public procedure ShowEditEnterMsg(var Msg: TMessage); message WM_SHOWEDITENTERMSG; end;
var Form63: TForm63;
implementation
{$R *.dfm}
procedure TForm63.ShowEditEnterMsg(var Msg: TMessage); begin Application.MessageBox(PChar('Feld ' + IntToStr(Msg.WParam)), '', 0); end;
procedure TForm63.Edit1Enter(Sender: TObject); begin PostMessage(Handle, WM_SHOWEDITENTERMSG, TEdit(Sender).Tag, 0); end; |
PostMessage sendet ja einfach nur die Botschaft ab und kehrt sofort zurück, sodass dort keine Unterbrechung der normalen Abläufe gibt, denn das MouseUp wird abgearbeitet bevor die andere Message für den Dialog verarbeitet wird.