AGB  ·  Datenschutz  ·  Impressum  







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

Modales Fenster in DLL, Taskleiste

Ein Thema von Dalai · begonnen am 23. Feb 2015 · letzter Beitrag vom 18. Mär 2015
Antwort Antwort
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.684 Beiträge
 
Delphi 5 Professional
 
#1

AW: Modales Fenster in DLL, Taskleiste

  Alt 17. Mär 2015, 16:22
Und wenn du den Constructor überlädst und das Handle mit übergibts? Das entsprechende Handle in ein privates Feld speichern (vor dem inherited) und der Rest bleibt so (Params.WndParent wird mit privatem Member bedient).
Ja, genau so hatte ich das temporär, empfand es aber als unsauber, weil ich mir nicht sicher bin/war, was mit dem privaten Feld passiert bzw. ob das Fehler/Zugriffsverletzungen hagelt, weil das Objekt noch nicht vollständig erzeugt wurde.

Zitat:
Warum sollte man private Member der eigenen Klasse im Konstruktor nicht vor dem inherited setzen dürfen? Imho passiert da nichts schlimmes.
Tja, ich wäre mir gern sicher, bevor ich das auf die Menschheit loslasse .

MfG Dalai
  Mit Zitat antworten Zitat
Edelfix

Registriert seit: 6. Feb 2015
Ort: Stadtoldendorf
236 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Modales Fenster in DLL, Taskleiste

  Alt 17. Mär 2015, 20:04
Ich verstehe deine Code Schnipsel nicht so ganz.

Verstehe ich das richtig dass du mit FindWindow das Handle für dein dll Formular hollst und dann keine Ahnung wie auf fmPluginSettings überträgst.

Also wie gelangt das Formular aus der dll in dein Programm ohne einen neuen Task Eintrag?
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.684 Beiträge
 
Delphi 5 Professional
 
#3

AW: Modales Fenster in DLL, Taskleiste

  Alt 17. Mär 2015, 20:45
Verstehe ich das richtig dass du mit FindWindow das Handle für dein dll Formular hollst und dann keine Ahnung wie auf fmPluginSettings überträgst.
Nein. Das Handle des Parent bekomme ich in der Interface-Funktion FsExecuteFile vom Host (hier Total Commander). Innerhalb dieser Funktion wird die oben angegebene Funktion PluginShowForm gerufen, die das Handle dann weiterreicht; FsExecuteFile und PluginShowForm sind logischerweise in unterschiedlichen Units.

Zitat:
Also wie gelangt das Formular aus der dll in dein Programm ohne einen neuen Task Eintrag?
Fast. Das Formular ist in der DLL vorhanden und das soll im Host (nicht mein Programm) ohne neuen Taskbar-Button angezeigt werden.

MfG Dalai
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.684 Beiträge
 
Delphi 5 Professional
 
#4

AW: Modales Fenster in DLL, Taskleiste

  Alt 18. Mär 2015, 15:54
Jetzt weiß ich wieder, warum ich diese Variante verworfen hatte:
Delphi-Quellcode:
type
  TfmPluginSettings = class(TForm)
  [...]
  private
    FParent : HWND;
  protected
    procedure CreateParams(var Params: TCreateParams); override;
  public
    constructor Create(AOwner: TComponent; const AParent: HWND = 0); overload;
  [...]
  end;

procedure PluginShowForm(const AhParent: HWND);
var
    fmPluginSettings: TfmPluginSettings;
begin
    fmPluginSettings:= TfmPluginSettings.Create(nil, AhParent);
    try
        fmPluginSettings.Init;
        fmPluginSettings.ShowModal;
    finally
        fmPluginSettings.Free;
    end;
end;

constructor TfmPluginSettings.Create(AOwner: TComponent; const AParent: HWND = 0);
begin
    FParent:= AParent;
    inherited Create(AOwner);
end;

procedure TfmPluginSettings.CreateParams(var Params: TCreateParams);
begin
    inherited;
    Params.WndParent:= FParent;
end;
Bekommt man die Warnung
Zitat:
[Warnung] guiPluginSettings.pas(57): Methode 'Create' verbirgt virtuelle Methode vom Basistyp 'TCustomForm'
irgendwie weg? Oder ginge das nur, wenn man die Warnung für den Bereich abschaltet? Das scheint aber nur für die gesamte Klassendeklaration zu funktionieren, nicht für die Deklaration des Konstruktors selbst. override; kann ich ja nicht verwenden, weil die Methode eine andere Signatur hat.

MfG Dalai
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.659 Beiträge
 
Delphi 12 Athens
 
#5

AW: Modales Fenster in DLL, Taskleiste

  Alt 18. Mär 2015, 15:57
reintroduce?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.684 Beiträge
 
Delphi 5 Professional
 
#6

AW: Modales Fenster in DLL, Taskleiste

  Alt 18. Mär 2015, 16:14
Ah, wunderbar. Das kannte ich noch nicht. Wieder was gelernt. Dankeschön .

MfG Dalai
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.372 Beiträge
 
Delphi 12 Athens
 
#7

AW: Modales Fenster in DLL, Taskleiste

  Alt 18. Mär 2015, 18:05
...; reintroduce;
[add]
Zusammen mit overload, wenn das andere Create noch sichtbar bleiben soll
und ohne overload, wenn es nur dieses Create geben soll.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (18. Mär 2015 um 18:07 Uhr) Grund: ich könnte schwören, daß es grade eben noch keine zweite Seite gab.
  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 00:01 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