![]() |
eingebettete DLL-Form, Scrollbar Problem
Ich habe eine Anwendung eingebetteten Formularen (DLL basiert).
Diese funktioniert soweit zufriedenstellend, jedoch sind bisher alle Versuche Scrollbalken bei Größenänderung der Hauptanwendung darzustellen erfolglos geblieben. Die DLL-Forms werden auf einem Panel der Hauptanwendung mit CreateParented dargestellt. Zur Zeit versuche ich es auf folgenden Weg: Ich sende im OnResize der Hauptanwendung eine Message an das eingebettete DLL Formular, die der Form die aktuelle Größe des "Patent-Panels" (PluginTarget) mitteilt.
Delphi-Quellcode:
Das DLL-Formular hat einen entsprechenden Eventhandler für die Message.
SendMessage( AdsPlugins[CurrentPluginIndex].Plugin.PluginFormHandle,
WM_MainAppResize, PluginTarget.Width, PluginTarget.Height );
Delphi-Quellcode:
Funktioniert leider nicht. Die Größe der DLL-Form wird zwar angepasst und stimmt, aber wenn die Größe des "ParentPanels" die in den BgPanel.Contraints festgelegten Minimalablessungen unterschreitet zeigt die DLL-Form die Scrollballken nicht an, sondern schiebt sich über den "Bildrand".
procedure TPluginForm.onWM_MsgAppResize(var message: TMessage);
begin // DLL Form positionieren und Größe an den "Parent-Panel anpassen" Align:=alNone; Top:=0; Left:=0; Height:=Message.lParam; Width:=Message.WParam; AutoScroll:=true; // alle Steuerelemente der DLL Form liegen auf einem Panel ("BgPanel") // dieser wird nun konfiguriert With BgPanel do begin Top:=0; Left:=0; Constraints.MinHeight:=680; Constraints.MinWidth:=850; Width:=ClientWidth; Height:=Clientheight; end; end; Ich habe schon 100 andere Wege probiert und kapituliere :? Unter anderem habe ich folgendes erfolglos getestet: - Scrollbox auf der DLL-Form - Scrollbox auf dem "Parent-Panel" - AutoScroll in Hauptanwendung - AutoScroll in DLL-Form - Scrollbars in Hauptanwendung erzwingen mit ShowScrollBar(handle, SB_BOTH, true); - Scrollbars in DLL-Form erzwingen mit ShowScrollBar(handle, SB_BOTH, true); - diverse Varianten von Align und SetBounds Ich bin ratlos. Kann mit jemand erklären wie automatisch Scrollbars bekomme, wenn die Hauptanwendung kleiner ist als das eingebettete DLL-Formular ? Schöne Grüße, Jens :hi: |
Re: eingebettete DLL-Form, Scrollbar Problem
Aus Erfahrung kann ich nur sagen, vergiss DLL-Forms in Form von Fenstern, die Du innerhalb Deiner Anwendung anzeigen willst.
Als modales Fenster von mir aus, aber als eingebettetes Fenster hast Du viele Probleme, da Deine Anwendung und Deine DLL-Form kein gemeinsames Application-Objekt benutzen und somit normalerweise automatisch stattfindende Aktionen (Resizing, Tab-Funktion, etc.) hier nicht funktionieren. Ich habe damit auch eine Weile gekämpft bis ich auf BPLs umgestiegen bin und mit denen funktioniert das absolut problemlos. Viele Grüße Igotcha |
Re: eingebettete DLL-Form, Scrollbar Problem
Zitat:
(klingt für mich allerdings nach massig Arbeit) [add] ach ja ... beim/vorm Freigeben der DLL müßte man das natürlich auch wieder rückgängig machen -.-'' |
Re: eingebettete DLL-Form, Scrollbar Problem
Zitat:
Also wenn schon "lebende" Objekte austauschen dan Laufzeitpackages verwenden. Ansonsten alles auf WinAPI-Ebene mit Handels usw. erledigen. |
Re: eingebettete DLL-Form, Scrollbar Problem
Nicht austauschen ... einfach nur alles was Application zugeordnet ist abfragen und der anderen Application übertragen ...
aber hab ja gesagt, daß es nach massig Arbeit klingt ... vorallem da man dann bei der Übertragung wirklich nichts vergessen dürfte -.-'' Notfalls könnte man ja auch drüben(EXE) die Objekte als Kopie neu erstellen und hier(DLL) löschen. |
Re: eingebettete DLL-Form, Scrollbar Problem
Habe da mal ne Frage ? Wie hast du es geschaft das Forms aus der Dll zuladen kannst du mir da mal ein Bsp. Projekt Posten oder per Mail schicken wäre ganz toll
|
Re: eingebettete DLL-Form, Scrollbar Problem
Zitat:
Falls du es schneller haben willst, schau einfach mal ![]() @All Ich weiss, das Formulare aus DLL's ein leidiges Thema sind, aber in diesem Fall hat es nichts mit der DLL zu tun .... Vorhin habe ich testweise eine Instanz eines anderen Formulars der Hauptanwendung mit CreateParented auf dem "DLL-Form"-Panel erzeugt. Da bestelt das Problem genauso. Keinen Schimmer, was ich da falsch mache ... :gruebel: Schöne Grüße, Jens :hi: |
Gelöst: eingebettete DLL-Form, Scrollbar Problem
Liste der Anhänge anzeigen (Anzahl: 1)
Gewonnen ! :dancer:
Ich habe ein Lösung für das Scrollbar-Problem gefunden. Forms aus DLL's müssen in der Tat anders behandelt werden als Forms aus Packages (bzw. eingebettete Forms). Für alle, die mal vor dem selben Problem stehen habe ich mein kleines Spielprojekt mit angehängt. Die Source-Kommentierung musste ich aus Zeitgründen weglassen. Das Code ist aber relativ simpel gestrickt. Schöne Grüße, Jens |
Re: eingebettete DLL-Form, Scrollbar Problem
Danke ganz toll von dir !! Sieht auch cool aus aber wo bekomme ich nun die ExceptionLog her ?
|
Re: eingebettete DLL-Form, Scrollbar Problem
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
![]() Ich habe leider bei der Hauptanwendung übersehen, den Exceptionhandler zu deaktivieren. In der Anlage hängt auch noch einmal das bereinigte Projekt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:22 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