Entwickler-Ecke

Windows API - PostMessage


r_le - Di 08.06.04 14:00
Titel: PostMessage
Hallo!

Folgendes Problem: Ich erstelle ein Edit und lasse das dann nach dem Drücken einer Taste wieder löschen.

Hier mal grob der Code dazu:


Delphi-Quelltext
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:
const 
  WM_EditFree=WM_USER+1

type 
  TMyEdit=class(TEdit)
  private 
    procedure EditKeyPress(Sender: TObject); 
    procedure EditMsgHandler(var Msg: TMessage ); message WM_EditFree;
  public
    constructor Create(aOwner: TComponent);
  end

constructor TMyEdit.Create(aOwner: TComponent); 
begin 
  inherited Create(aOwner);
  OnKeyPress:=EditKeyPress;
  {...}
end

procedure TMyEdit.EditKeyPress(Sender: TObject); 
begin 
  {...} 
  PostMessage(self.Handle,WM_EditFree,0,0); 
end

procedure TMyEdit.EditMsgHandler(var Msg: TMessage); 
begin 
  self.Free; 
end;


Unter WinXP funktioniert das ganze auch wie es soll, aber unter Win98 wird MyEdit nicht wieder gelöscht.
Kann mir jemand sagen, woran das liegt? Gibt es hinsichtlich des PostMessage bei Windows98 was, was man beachten müßte??


Moderiert von user profile iconMotzi: Topic aus VCL (Visual Component Library) verschoben am Di 08.06.2004 um 16:27


MSCH - Di 08.06.04 20:01

die frage lautet eher, kann ein Objekt sich selbst löschen oder muss das nicht der Parent machen?
grez
msch


r_le - Di 08.06.04 22:38

Naja, unter XP klappt's ja auch.

Mir ist bis jetzt noch keine andere Möglichkeit eingefallen, das Edit abhängig von einem bestimmten Eingabezeichen vom Parent zu löschen. Denn das entsprechende Ereignis kann ich ja auch nur innerhalb der Komponente auswerten.

(Ein Timer und ein Flag wär noch ne Variante, aber das ist ja nicht sonderlich elegant.)


Delete - Di 08.06.04 23:12

XP ist da wohl etwas gutmütiger und stabiler in der Hinsicht und schluckt den Fehler.


r_le - Mi 09.06.04 01:49

Hab den MessageHandler jetzt in ne andere Komponente geschrieben.
Blickt zwar nun kein Mensch mehr durch, aber hauptsache es funktioniert erstmal. :wink:

@Luckie: Ich wäre ja schon dankbar gewesen, wenn er mir wenigstens ne Fehlermeldung gebracht hätte.