AGB  ·  Datenschutz  ·  Impressum  







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

Grosse Probleme mit delphi-dll.

Ein Thema von Explorer · begonnen am 10. Aug 2006 · letzter Beitrag vom 10. Aug 2006
Antwort Antwort
Explorer

Registriert seit: 10. Aug 2006
Ort: im Rhein-Main-Gebiet
21 Beiträge
 
Delphi 10.1 Berlin Professional
 
#1

Grosse Probleme mit delphi-dll.

  Alt 10. Aug 2006, 08:39
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:
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.
[edit=Jelly]Delphi Tags ergänzt... Mfg, Jelly[/edit]
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2

Re: Grosse Probleme mit delphi-dll.

  Alt 10. Aug 2006, 11:29
Zitat von Explorer:
Nun möchte ich die Breite dieses Panels bei geöffnetem InfoFenster verändern, bekomme dies aber partout nicht hin.
Ist vielleicht die Align-Eigenschaft des Panels gesetzt? Wenn ja, dann wird sich Width und Height nie ändern.
  Mit Zitat antworten Zitat
Explorer

Registriert seit: 10. Aug 2006
Ort: im Rhein-Main-Gebiet
21 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3

Re: Grosse Probleme mit delphi-dll.

  Alt 10. Aug 2006, 11:40
Zitat von jbg:
Zitat von Explorer:
Nun möchte ich die Breite dieses Panels bei geöffnetem InfoFenster verändern, bekomme dies aber partout nicht hin.
Ist vielleicht die Align-Eigenschaft des Panels gesetzt? Wenn ja, dann wird sich Width und Height nie ändern.
Hallo,
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
  Mit Zitat antworten Zitat
rbonk

Registriert seit: 10. Aug 2006
3 Beiträge
 
#4

Re: Grosse Probleme mit delphi-dll.

  Alt 10. Aug 2006, 12:54
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.
  Mit Zitat antworten Zitat
Explorer

Registriert seit: 10. Aug 2006
Ort: im Rhein-Main-Gebiet
21 Beiträge
 
Delphi 10.1 Berlin Professional
 
#5

Re: Grosse Probleme mit delphi-dll.

  Alt 10. Aug 2006, 13:39
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
  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 07:21 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