AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ActiveX - Non blocking calls

Ein Thema von Karl-Heinz · begonnen am 14. Nov 2003 · letzter Beitrag vom 14. Nov 2003
Antwort Antwort
Karl-Heinz

Registriert seit: 12. Nov 2003
Ort: Waldkirch
12 Beiträge
 
Delphi 5 Enterprise
 
#1

ActiveX - Non blocking calls

  Alt 14. Nov 2003, 09:37
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,
  Mit Zitat antworten Zitat
Bernd Ua

Registriert seit: 10. Nov 2003
Ort: Lindhorst
87 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: ActiveX - Non blocking calls

  Alt 14. Nov 2003, 10:01
Hi,

Zitat:
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?
Threads wären natürlich die beste Wahl, aber schneller bzw einfacher gehts vielleicht mit einem
asynchronen PostMessage an das Anzeigefenster.

Code:
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;
Aufruf könnte dann so aussehen

Code:
procedure ActiveXServerdings.ShowHelpWnd;
begin
  with TForm1.Create(nil) do
    PostMessage(Handle,CM_MYMsg,0,0);
end;

Grüsse Bernd
Bernd Ua
  Mit Zitat antworten Zitat
Karl-Heinz

Registriert seit: 12. Nov 2003
Ort: Waldkirch
12 Beiträge
 
Delphi 5 Enterprise
 
#3

Re: ActiveX - Non blocking calls

  Alt 14. Nov 2003, 10:21
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!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz