AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

eingebettete DLL-Form, Scrollbar Problem

Ein Thema von jensw_2000 · begonnen am 5. Mai 2006 · letzter Beitrag vom 9. Mai 2006
Antwort Antwort
Seite 1 von 2  1 2   
jensw_2000
(Gast)

n/a Beiträge
 
#1

eingebettete DLL-Form, Scrollbar Problem

  Alt 5. Mai 2006, 08:18
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
  Mit Zitat antworten Zitat
Igotcha

Registriert seit: 22. Dez 2003
544 Beiträge
 
Delphi 2006 Professional
 
#2

Re: eingebettete DLL-Form, Scrollbar Problem

  Alt 5. Mai 2006, 11:41
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: eingebettete DLL-Form, Scrollbar Problem

  Alt 5. Mai 2006, 12:48
Zitat von Igotcha:
... 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.
Da viele mir nur ein, daß man Application in der DLL auf Application in der EXE umleiten muß ... sind ja nur Objekte ... also wenn man beim Initiiren der DLL alles was mit Application(DLL) abhängig ist auf Application(EXE) überträgt und dann den Zeiger von Application(DLL) mit dem von Application(EXE) überschreibt, dann sollte das Problem doch behoben sein
(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 -.-''
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.169 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: eingebettete DLL-Form, Scrollbar Problem

  Alt 5. Mai 2006, 12:54
Zitat von himitsu:
Da viele mir nur ein, daß man Application in der DLL auf Application in der EXE umleiten muß ... sind ja nur Objekte ... also wenn man beim Initiiren der DLL alles was mit Application(DLL) abhängig ist auf Application(EXE) überträgt und dann den Zeiger von Application(DLL) mit dem von Application(EXE) überschreibt, dann sollte das Problem doch behoben sein
Diesen "Trick" darfst Du auch nur machen wenn die DLL und die Exe mit der identischen Delphi-Version und vermutlich auch mit den gleichen Compiler-Optionen kompiliert sind. Ansonsten haben deine Objekte unterschiedliches Speicherlayout und es kracht. Und auch wenn Du das hinbekommen würdest vermute ich das es noch an 1000 anderen Stellen kracht

Also wenn schon "lebende" Objekte austauschen dan Laufzeitpackages verwenden. Ansonsten alles auf WinAPI-Ebene mit Handels usw. erledigen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: eingebettete DLL-Form, Scrollbar Problem

  Alt 5. Mai 2006, 12:59
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
nitschchedu

Registriert seit: 24. Mär 2006
300 Beiträge
 
Delphi 7 Professional
 
#6

Re: eingebettete DLL-Form, Scrollbar Problem

  Alt 5. Mai 2006, 13:12
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
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#7

Re: eingebettete DLL-Form, Scrollbar Problem

  Alt 5. Mai 2006, 17:21
Zitat von nitschchedu:
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
Ich bin heute erst gegen 23:00 Uhr von der Arbeit zurück. Dann sende ich dir ein Beispiel.
Falls du es schneller haben willst, schau einfach mal hier nach. Das ist verwende ich immer als Basis für meine pluginfähigen Anwendungen.


@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 ...




Schöne Grüße,
Jens
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#8

Gelöst: eingebettete DLL-Form, Scrollbar Problem

  Alt 6. Mai 2006, 10:56
Gewonnen !

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
Angehängte Dateien
Dateityp: zip scrollbars_und_createparented_183.zip (791,3 KB, 70x aufgerufen)
  Mit Zitat antworten Zitat
nitschchedu

Registriert seit: 24. Mär 2006
300 Beiträge
 
Delphi 7 Professional
 
#9

Re: eingebettete DLL-Form, Scrollbar Problem

  Alt 7. Mai 2006, 14:02
Danke ganz toll von dir !! Sieht auch cool aus aber wo bekomme ich nun die ExceptionLog her ?
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#10

Re: eingebettete DLL-Form, Scrollbar Problem

  Alt 7. Mai 2006, 23:00
Zitat von nitschchedu:
Danke ganz toll von dir !! Sieht auch cool aus aber wo bekomme ich nun die ExceptionLog her ?
Die ExceptionLog kannst du einfach aus der Uses-Liste werfen. Sie gehört zu Eurekalog.
Ich habe leider bei der Hauptanwendung übersehen, den Exceptionhandler zu deaktivieren.

In der Anlage hängt auch noch einmal das bereinigte Projekt.
Angehängte Dateien
Dateityp: zip scrollbars_und_createparented_300.zip (634,1 KB, 85x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 20:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz