![]() |
Grosse Probleme mit delphi-dll.
Hallo Forum,
ich habe eine kleine dll geschrieben, die ein InfoFenster mit einem Panel öffnet. Nun möchte ich die Breite dieses Panels bei geöffnetem InfoFenster verändern, bekomme dies aber partout nicht hin. Wie aktualisiere ich das Panel im InfoFenster, ohne das bestehende Fenster schließen und neu aufbauen zu müssen. Im voraus Dank für die Mühe. Gruß Karlheinz Quelltext: ----------
Delphi-Quellcode:
[edit=Jelly]Delphi Tags ergänzt... Mfg, Jelly[/edit]
unit dll_mit_Fenster;
interface uses ShareMem, inifiles, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, IdComponent, IdTCPConnection, IdTCPClient, IdMessageClient, IdSMTP, ComCtrls, StdCtrls, Buttons, ExtCtrls, IdBaseComponent, IdMessage; type TKischAlles = class(TComponent) KischFenster : TForm; KischPanel : TPanel; constructor Create(AOwner: TComponent); override; destructor Destroy; override; Procedure ErstelleFenster(PanelBreite: Integer); private public { Public declarations } end; ///*** die DLL-Deklarationen function ZeigeFenster(const PanelBreite :Integer) : Integer; stdcall; export; implementation constructor TKischAlles.Create(AOwner: TComponent); begin inherited Create(AOwner); KischFenster := TForm.Create(nil); KischPanel := Tpanel.Create(nil); end; destructor TKischAlles.Destroy; begin KischFenster.Free; KischPanel.Free; inherited Destroy; end; Procedure TKischAlles.ErstelleFenster(PanelBreite: Integer); begin KischFenster.Top := 200; KischFenster.Left := 200; KischFenster.Height := 300; KischFenster.Width := 500; KischFenster.Caption := 'Jippi-ey-hey.'; KischPanel.Parent := KischFenster; KischPanel.Top := 100; KischPanel.Left := 100; KischPanel.Height := 20; KischPanel.Width := PanelBreite; KischPanel.Caption := '0,0 % Fett'; KischFenster.Show; end; ///*** die DLL-Definitionen function ZeigeFenster(const PanelBreite :Integer) : Integer; stdcall; export; var KischAlles : TKischAlles; begin KischAlles := TKischAlles.Create(nil); KischAlles.ErstelleFenster(Panelbreite); Result := 0; end; end. |
Re: Grosse Probleme mit delphi-dll.
Zitat:
|
Re: Grosse Probleme mit delphi-dll.
Zitat:
nein, align habe ich nicht gesetzt. Alle Startwerte stehen ausschließlich in obiger dll. Das Problem ist, dass ich über die Host-Anwendung zwar die Panelbreite erstmals setzen kann und diese auch exakt im Fenster dargestellt wird. Wenn ich aber nun im aufgebauten "dll-Fenster" den Panelwert ändern möchte, habe ich keinen Zugriff mehr auf dieses von der dll aufgebaute Fenster. Deshalb stellt sich mir die Frage: wie erhalte ich den Zugriff auf das dll-Fenster jederzeit aufrecht ? Hier komme ich leider gar nicht weiter. Ich hatte bereits daran gedacht, einen Timer zu integrieren, der laufend globale vereinbarte Variable ausliest, die von der Host-Anwendung an die dll übertragen werden. Auch das hat bislang nicht geklappt. Mit besten Grüßen Karlheinz |
Re: Grosse Probleme mit delphi-dll.
Hallo Karlheinz,
der Code Deiner DLL ist etwas konfus (Verzeihung). Hier mein Vorschlag.
Delphi-Quellcode:
unit dll_mit_fenster;
interface uses {### ShareMem, Diese Unit - falls notwendig - ganz zuerst in der DLL-Projektdatei (*.dpr) einbinden. Siehe Delphi-Doku.} inifiles, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, IdComponent, IdTCPConnection, IdTCPClient, IdMessageClient, IdSMTP, ComCtrls, StdCtrls, Buttons, ExtCtrls, IdBaseComponent, IdMessage; {### die Klassendefinitionen können in den Implementation- Teil der Unit} ///*** die DLL-Deklarationen function ZeigeFenster(const PanelBreite :Integer) : Integer; stdcall; {## export;} {### 'export' - Anweisung ist überflüssig.} implementation type {## TKischAlles = class(TComponent) diese Klasse ist überflüsssig, einfacher gleich eine Klasse von TForm ableiten: } TKischFenster = class (TForm) private FKischPanel : TPanel; public { Public declarations } constructor Create(AOwner: TComponent); override; {### destructor Destroy; override; } Procedure ZeigeFenster(PanelBreite: Integer); end; var KischFenster : TKischFenster = Nil; {### Deklariere eine mit Nil initialisierte Instanzvariable des Fensters, damit bei jedem Aufruf einer DLL- Funktion(en) die Instanz verwendet werden kann } //----------- TKischFenster constructor TKischFenster.Create(AOwner: TComponent); begin CreateNew(AOwner); {### Konstruktor CreateNew verwenden, weil es keine *.DFM- Datei zu dem Form gibt!} SetBounds (200,200,500,300); Caption := 'Jippi-ey-hey.'; FKischPanel := Tpanel.Create(Self); with FKischPanel do begin Parent := Self; {### Initialisiere das Panel mit default-Eigenschaften} SetBounds (100, 100, 100, 20); Caption := '0,0 % Fett'; end; end; Procedure TKischFenster.ZeigeFenster(PanelBreite: Integer); begin FKischPanel.Width := PanelBreite; Show; end; //----- DLL-Export function ZeigeFenster(const PanelBreite :Integer) : Integer; stdcall; begin if KischFenster = Nil then KischFenster := TKischFenster.Create(Nil); KischFenster.ZeigeFenster(PanelBreite); end; //----------- initialization finalization {### das Fenster muss irgendwann wieder gelöscht werden - spätestens jetzt !} KischFenster.Free; end. |
Re: Grosse Probleme mit delphi-dll.
Jippie.
Es läuft und das auch noch so, wie es sollte. An meinen code-strukturen werde ich gerne feilen. ;-) Tausend Dank für deine Mühe. Mit besten Grüßen Karlheinz |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:42 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