![]() |
Problem mit Forms in DLLs und Packages
Hallo zusammen,
ich stehe immmer noch vor meinem ungelösten Problem mit der Einbettung von Forms in meine Hauptanwendung. Nachdem ich mich durch die Variante mit DLLs gekämpft habe und technisch soweit alles funktionierte, musste ich aufgeben, da ich bemerkte, dass es leider ein Problem mit dem Ansprechen von Komponenten auf der DLL-Form über die TAB-Taste gab - das Wechseln von z.B. Eingabefeld zu Eingabefeld per TAB-Taste funktionierte nicht. Also wurden mir Packages empfohlen. Habe mich etwas in die Thematik eingearbeitet, meine Forms erscheinen in der Hauptanwendung und schwupps, erneut das Problem mit der TAB-Taste. So langsam bin ich mit meinem Latein an Ende... Vielleicht geht das auch gar nicht, was ich möchte, deshalb nochmal hier die Anforderung: Ich habe eine Mainform mit einem TreeView links als Menübaum, dann einen Splitter und rechts eine freie Fläche (z.B. ein Panel). In genau dieser freien Fläche möchte ich abhängig von der Auswahl im TreeView-Menü ein "Modul" anzeigen lassen - also eine in meine Hauptanwendung eingebettete Form. Ich möchte mich auf dieser eingebetteten Form "ganz normal" mit der TAB-Taste bewegen können. Ich habe mir die Tutorials über "Plugins" etc. alle durchgelesen und wie gesagt, ist die Technik nicht das Problem, sondern einzig die "Anzeige", denn alle Beispiele gehen von einer separaten Form aus, die dargestellt wird (das bekomme ich hin, ist aber leider nicht meine Anforderung). Danke und Gruß Igotcha |
Re: Problem mit Forms in DLLs und Packages
Hallo igotcha,
ob du ein Form normal anzeigst oder in einem Panel ist egal, es ändert sich ja nur der Parent. Zu den Tabs: hast du versucht, den Fokus mit Mausklick auf ein Element des Forms im Panel zu setzen, und anschließend mit Tab zu wechseln? Was ist dort passiert? Du könntest auch probieren, im Programm ein Editfeld auf das Panel zu setzen, und das Form ein Stückchen tiefer auf dem Panel anzeigen. Dann kannst du sehen ob das Editfeld den Fokus bekommt. Falls nicht, dann heißt das, dass beim Panel wahrscheinlich TabStop=False ist. Ich hoffe ich hab dir ein kleines bisschen weiterhelfen können... Greetz alcaeus |
Re: Problem mit Forms in DLLs und Packages
Zitat:
Selbstverständlich geht es um die "parent"-Eigenschaft. Wenn ich eine Testanwendung mache mit 2 Forms und die zweite dynamisch erstelle (mit "parent" auf z.B. "Panel1"), dann geht das nämlich auch wunderbar. Zitat:
Zitat:
Ich habe auch schon das "Application"-Objekt an die DLL bzw. das Package übergeben, aber bisher ohne Erfolg. Gruß Igotcha |
Re: Problem mit Forms in DLLs und Packages
Liste der Anhänge anzeigen (Anzahl: 1)
Ich füge mal meinen BPL-Versuch bei.
Vielleicht hat ja jemand einen Ansatz. Gruß Igotcha |
Re: Problem mit Forms in DLLs und Packages
Versuchs mal hiermit:
in der Unit controls.pas folgende Methode ergänzen:
Delphi-Quellcode:
Jetzt brauchst Du noch 2 Methoden in der DLL, eine um den Wert zu setzen und eine um den alten Wert wiederherzustellen:
function GetControlAtom : Pointer;
function GetControlAtom : Pointer; begin Result := @ControlAtom; end;
Delphi-Quellcode:
Was da eigentlich passiert (und warum) steht ja oben im Quelltext als Kommentar.
locOldAtom: Integer = -1;
function Init(iRealControlAtom : Integer): Boolean; stdcall; var P: PWord; begin Result := False; // TApplication ermittelt für das Verarbeiten einiger Messages die richtige Komponente // über einen globalen "Atom". Der ist aber leider prozesspezifisch. D.h., dass er in // einer Anwendung bestens funktioniert. Sobald aber (wie hier) eine DLL dazukommt // wird innerhalb der DLL ein neuer eigener "Atom" initialisiert. Um trotzdem richtig // arbeiten zu können teilen wir daher unserer DLL den "Atom" der Anwendung mit. // Dazu haben wir uns in "controls.pas" gehackt und die Datei um eine neue Methode // erweitert: // function GetControlAtom : Pointer; // begin // Result := @ControlAtom; // end; P := GetControlAtom; locOldAtom := P^; P^ := iRealControlAtom; Result := True; end; procedure Uninit; var P: PWord; begin if locOldAtom<>-1 then begin P := GetControlAtom; P^ := locOldAtom; end; end; |
Re: Problem mit Forms in DLLs und Packages
Zitat:
MfG Binärbaum |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13: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