Autor Beitrag
Tropby
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 71
Erhaltene Danke: 4

Vista, Win XP, Win 89
Turbo Delphi Ex.
BeitragVerfasst: Di 09.08.11 21:49 
Hallo zusammen,

ich habe im moment ein Problem bei dem ich garnicht weiß ob das überhaupt lösbar ist.
Ich habe eine DLL - Erstellt die in ein Programm eingebunden wird und da einige Steueraufgaben übernimmt. Jetzt möchte ich noch eine Anzeige machen. Dabei kam ich auch die tolle Idee, dass ich doch die Anzeige in dem schon vorhandenen Fenster machen könnte der Anwendung.

Dieses Vorhanden hat sich dann als schwiriger als erwartet herausgestellt. Ich bekomme zwar den Fenster-Handle aber ich weiß nicht wie ich da jetzt eine Anzeige machen soll. Gibt es da irgendwie eine Möglichkeit? oder muss ich mir da was anderes ausdenken? Es muss doch wohl irgendwie möglich sein, da was drauf zu bekommen :-/

Vielleicht hat von euch ja jemand eine Idee wie das gehen könnte.

mfg
Tropby

_________________
Tropby
moklok
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Mi 10.08.11 01:38 
hallo,

du kannst in deiner dll ein TPanel erstellen und deine anzeige auf diesem panel platzieren... sobald du die dll einbindest kannst du dann irgendwann gewuenschten fensterobjektzeiger an die dll uebergeben, die dann die parent-eigenschaft des panels auf dieses fenster setzt. und dann sollte dein panel auf dem fenster erscheinen...

lg
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19326
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 10.08.11 06:11 
user profile iconmoklok hat folgendes geschrieben Zum zitierten Posting springen:
sobald du die dll einbindest kannst du dann irgendwann gewuenschten fensterobjektzeiger an die dll uebergeben
Vorsicht, der Speichermanager der DLL ist nicht der des Hauptprogramms. Deshalb ist es keine gute Idee ein Objekt an die DLL zu übergeben.

Rein mit der API-Funktion SetParent wird das aber glaube ich auch nicht gehen, weil dein Control dann für Delphi kein Parent hat. Die saubere Variante ist, der DLL eine Möglichkeit anzubieten wie sie etwas anzeigen kann oder über die Windows API zu gehen.

Die schnelle und nicht so saubere Lösung ist ein neues Formular auf das andere zu setzen... So ungefähr, ungetestet und es fehlt die Freigabe des Formulars:
ausblenden YourDLL.dll
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
library YourDLL;

uses
  Forms, Windows, SysUtils, Classes, StdCtrls;

procedure Test(AHandle: Cardinal); stdcall;
var
  NewLabel: TLabel;
  NewForm: TForm;
begin
  NewForm := TForm.Create(nil);
  NewForm.BorderStyle := bsNone;
  NewLabel := TLabel.Create(NewForm);
  NewLabel.Caption := 'Test';
  NewLabel.Name := 'NewEdit';
  NewLabel.Parent := NewForm;
  NewLabel.SetBounds(101010030);
  NewLabel.Visible := True;
  SetParent(NewForm.Handle, AHandle);
  NewForm.SetBounds(1010200200);
  NewForm.Visible := True;
end;

exports
  Test;

begin
end.
ausblenden YourUnit.pas
1:
2:
3:
4:
5:
6:
procedure Test(AHandle: Cardinal); stdcallexternal 'YourDLL.dll';

procedure TYourForm.Anything...
begin
  Test(Handle);
end;
Tropby Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 71
Erhaltene Danke: 4

Vista, Win XP, Win 89
Turbo Delphi Ex.
BeitragVerfasst: Mi 10.08.11 21:41 
Danke super das Funktioniert. Jetzt nur noch was um das ganze weider frei zu geben und ich habs.

_________________
Tropby