![]() |
ActiveX - Non blocking calls
Hallo,
ich möchte mir einen ActiveX-Server schreiben, der zu einem gegebenen Thema eine Hilfe in einem Fenster anzeigt. Das Problem ist nur, dass das aufrufende Programm dann einfriert (wartet, bis ActiveX-Server zurückkommt). Gibt es einen Trick direkt per ActiveX, den Client vollständig "weiterleben" zu lassen, ohne Clientcode ändern zu müssen? Oder muss ich im ActiveX-Server womöglich eine eigene Threadverwaltung bauen? Danke und beste Grüsse, |
Re: ActiveX - Non blocking calls
Hi,
Zitat:
asynchronen PostMessage an das Anzeigefenster.
Code:
Aufruf könnte dann so aussehen
const
CM_MyMsg = WM_User + 4000; type TForm1 = class(TForm) private procedure MyMsg (var Message : TMessage); message CM_MYMsg; public { Public-Deklarationen } end; ... procedure TForm1.MyMsg(var Message: TMessage); begin Message.Result := 0; Show; end;
Code:
procedure ActiveXServerdings.ShowHelpWnd;
begin with TForm1.Create(nil) do PostMessage(Handle,CM_MYMsg,0,0); end; Grüsse Bernd |
Re: ActiveX - Non blocking calls
Hallo Bernd,
der Fehler lag woanders. Trotzdem danke für Deine schnelle Antwort, die aber so nicht funktioniert: procedure XServerDings.showhelp(helpidx: longint); // egal begin with helpwnd.create(nil) do // oder application oder was auch immer begin findhelp(helpidx); show; // Non-blocking, aber ActiveServer ist gleich wieder weg, Fenster flackert nur kurz auf... end; end; // Der Fehler war, dass ich Depp im Clientprogramm die Olevariable lokal gemacht habe. Wenn raus aus der lokalen Methode (hier: Button1.onclick(..), dann wird natürlich auch die Variable zerstört. Solche Dummheiten kosten Stunden unseres Programmiererlebens :-; ok, hier isser nun raus, Client lebt weiter, aber das "Hilfe"-Fenster aus ActiveX-Server flackert nur kurz auf und verschwindet dann wieder. Ich nehme an, dass die ActiveX-Application keine "Lebensdauer" hat. Kenne mich aber mit ActiveX zuwenig aus. Der Aufruf aus Client läuft etwa so: var v: variant; begin v:= CreateOleObject(pchar('adelphi.meinprog')); v.showhelp(1); // nein, v wird nicht "unassigned" und sollte eigentlich weiterleben... end; // raus und ... tot! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz