Entwickler-Ecke

Windows API - Formular aus DLL nur einmal erzeugen


f.elix - Mi 28.02.07 13:00
Titel: Formular aus DLL nur einmal erzeugen
Hallo erstmal ... wieder

Ich hab ein klitzekleines Problem...chen

Ich hab eine DLL, die alle meine Apps als Message-Ausgabe benutzen. Also wird ein Formular erzeugt:

NCMessageForm := TNCMessageForm.create(Application);

Nun erzeugt jede Applikation eine eigene Instanz davon und bastelt sich ein eigenes Fenster - was nicht gewollt ist.

Also Handle ermitteln (und falls noch nicht existiert Fenster erzeugen) mit:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
var
  MyHandle          : THandle;
begin
  MyHandle:=  FindWindow('TNCMessageForm',nil);
  if MyHandle=0 then
    NCMyMessageForm := TNCMessageForm.create(Application)
  else
    NCMyMessageForm := ...-> Problem!!!

end;


Wie mach ich aus dem gefundenen Handle ein NCMessageForm oder einen Zeiger darauf? Sendmessage will ich nicht nutzen.

Hat mal jemand einen schnellen Tip.

Vielen Dank schonmal.

Moderiert von user profile iconraziel: Delphi-Tags hinzugefügt


HelgeLange - Mi 28.02.07 13:14

eine DLL, welche in verschiedenen apps benutzt wird, wird auch mehrfach in den Speicher geladen. Dadurch hat jede Kopie der DLL seinen eigenen Adressraum, auch für Daten. Du kannst also nicht direkt ene Variable in der DLL setzen und danach Fenster anzeigen oder nicht.

Was du machen kannst : Einfach das Fenster suchen, wenn es existiert, garnicht erst neu erzeugen. Schau doch mal nach FindWindow etc...

Es gibt auch noch andere Methoden wie MemoryMappedFiles oder irgendwas in die Registry schreiben etc... Aber meiner Meinung nach ist das Fenster-Suchen das Beste.


f.elix - Mi 28.02.07 14:15
Titel: Findwindow ist wird genutzt
Hi, danke erstmal für die schnelle Antwort,

aber ich ermittle ja schon das Fester-Handle, falls eins existiert.

Aber wie bekomme ich einen Zeiger auf das Fenster, zu dem dieses Handle gehört?


HelgeLange - Mi 28.02.07 14:27

Frage Deine Form mit SendMessage...
achne.. das willste ja nicht benutzen.. Pech gehabt dann...

Warum machst Du denn den Führerschein, kaufst Dir ein Auto setzt dich rein und fährst dann nicht ?