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:
SendMessage( AdsPlugins[CurrentPluginIndex].Plugin.PluginFormHandle,
WM_MainAppResize,
PluginTarget.Width,
PluginTarget.Height );
Das
DLL-Formular hat einen entsprechenden Eventhandler für die Message.
Delphi-Quellcode:
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;
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".
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