Dockmanager

Rund um die LCL und andere Komponenten
schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Dockmanager

Beitrag von schnullerbacke »

@Christian

Du bist ja hier der große Crack für die LCL. Ich hab da einen erweiterten Dockmanager für Delphi gefunden. Weil ja im Moment leider TFrame nicht verwendbar ist könnte der helfen.

Guck dir den mal an, ob wir den in die LCL kriegen. Damit kann man Formulare an andere Objekte binden soweit sie von TWinControl abstammen.
Dateianhänge
csdockman.zip
Dockmanager
(13.68 KiB) 61-mal heruntergeladen
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Ich verwende ja etwas ähnliches wie Docking schon ne ganze weile. Bei mir sind Formulare an Panels gebunden also ähnlich Frames. Allerdings geht das z.Z. nur mit mehreren workarounds für lcl messaging bugs zumindest im Windows und Freitag hab ich den nächsten gefunden der Drag&Drop auf Formularen die ein Parent haben fast unmöglich macht. Dieser teil der LCL ist z.Z einfach zu verbuggt
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

Ist eben das Problem, ich krieg mein Programm nur dann umgestellt wenn ich das in den Griff kriege. Dabei gehts weniger um Drag and Drop, einfach Formular an Panel binden langt schon. Darf halt nur nicht per Modal passieren, damit das MainForm aktiv bleibt.

Sonst muß ich massig ändern und den Teil im MainForm als Thread bauen. Das wäre allerdings nicht sehr geschickt, weil die Anbindung an die jeweils vorhandenen Formulare dann ziemlich problematisch wird.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

was hast du denn für ein problem ?
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

Im MainForm läuft ein TCP-Client, der Teile der Anwendung steuert. Die Formulare können für sich wieder einen TCP-Client haben, der aber nur eine beschränkte Funktionlität aufweist.

MainForm kann demnach das Formular schließen wenn das vom Server gefordert wird, MainForm könnte dann auch ein anderes Formular öffnen.

Also für interaktive Klassenraum-Anwendungen oder Gruppen-Schulungen geeignet.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Ich hatte gefragt wo das problem ist nicht was die Anwendung ist :)
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

Das Problem ist FPC/Lazarus. Mit nem Frame ist das einfach zu lösen, ohne wird das schon schwieriger. Damit man antworten kann, sollte man auch wissen wohin die Reise gehen soll. Nun haste den Hintergrund und kannst nen Tipp ablassen... :lol:
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Form2.Parent := Form1;
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

Siehste, das meinte ich. Das muß auch mit ner Scrollbox oder Panel also mit den Controls klappen, die von TWinControl oder dem Aquivalent von Lazarus abgeleitet sind. Geht ja auch ein bißchen darum, das jeweilige Formular in der IDE erstellen zu können.

Das sollte also nicht auf ein Formular beschränkt sein, davon müssen sich im Zweifel auch eine ganze Latte in einer Scrollbox einbetten lassen. Denk mal an eine Lagerverwaltung oder ähnlich. Dann wird auch klar, wozu der Formular-Manager gute Dienste tut. Neben den zusätzlichen Infos läßt der sich auch leicht zu einer Userverwaltung für die Anwendung erweitern. Also genau ein Programm auf einer Maschine kann ohne große Probleme von mehreren Usern verwendet werden. Der jeweils aktive User bekommt nur genau seine Formulare angezeigt.

Das hatte ich nur wieder rausgenommen, weil die das Ding damals so dermaßen verhurt hatten, das fast nix mehr richtig lief. Zudem sollte man den auch nicht frontend (also als MainForm) betreiben. Der muß backend laufen, damit die Verwaltung der Formulare möglichst einfach möglich ist.

Sollte das mit dem Einbetten nicht auch mit CreateParented laufen?
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Form2.Parent := Scrollbox1; //????
Form2.Parent := Panel1; //????
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

Delphi-Test:

Prima, nur nicht bedienbar. Verkleinern und Schließen geht. Eingabe geht nix.

Lazarus-Test:

ScrollBox (ListBox) wird nicht als Parent akzeptiert (Formular wird nicht angezeigt). Anwendung läßt sich nicht direkt beenden, erst muß das eingebettete Formular geschlossen werden obwohl MainForm als Eigentümer angegeben ist.

Wenig befriedigend das Ganze...
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Code: Alles auswählen

interface 
 
...
 
 
  TfMain = class(TForm)
    {$IFDEF MSWINDOWS}
    procedure WndProc(var TheMessage : TLMessage);override;
    {$ENDIF}
  private
    { private declarations }
  public
    { public declarations }
  end;
 
implementation
 
{$IFDEF MSWINDOWS}
procedure TFMain.WndProc(var TheMessage : TLMessage);
begin
  if TheMessage.Msg = $6 then
    begin
      Activate;
      {Mein_control_das_bei_aktivierung_der_main_form_den_fokus_haben_soll}.SetFocus;
    end;
  inherited WndProc(TheMessage);
end;
{$ENDIF}
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

Auch nicht so berauschend. Das TFrame ist für sowas irgendwie unverzichtbar, dadurch läßt sich alles als TControl einbetten und hat trotzdem die volle Funktionalität.

Bräuchte man also irgendwie eine Art Dummy-Formular auf dem man das GUI-Control zussammensetzen kann und dann als TControl (TCustomControl) einfach einbauen wo man will.

Hab nur keine Lust, die Dinger von Hand zu basteln, also Create und dann alles im Quell-Code friemeln. Das ist ja nun auch nicht Sinn einer IDE. Das wäre ja geradezu altertümlich, a la TurboPascal 5.5. Von der Zeit, die das braucht mal ganz zu schweigen.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Auch nicht so berauschend.

Wiso ? Funktioniert doch oder ?
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

Das geht auch weiter nicht für TScrollBox, TListBox oder ähnlich. Da kriegste nur etwas das von TControl abgeleitet ist eingebaut. Im Übrigen gibt das ne heftige Steuerei wenn mehrere Formulare da eingebaut werden. Das läßt sich dann kaum brauchbar automatisieren.

XML hilft da auch nix, weil die internen Methoden dann fehlen würden. Also für die Entwicklung von Oberflächen ist TFrame oder zumindest etwas in der Art (gabs bei Delphi1 mal als TWindow) einfach die Wahl.

Was mich etwas wundert, ist daß TFrame zwar scheinbar vorhanden und weitgehend vollständig deklariert ist, sich aber auch nicht verwenden läßt (bricht beim Create mit Fehler ab).

Da ist guter Rat teuer, an so spezielle Wünsche haben die Entwickler wohl etwas wenig Gehirnschmalz verschwendet... :(

Was ich dazu im inet gefunden hab hilft auch nicht wirklich weiter, weil es ebenfalls auf TFrame aufsetzt. Im Grunde müßte das nach dem Muster laufen, als Formular zusammenbauen und dann beim Create die Owner-Klasse prüfen. Ist das von TControl abgeleitet muß die eigene Klasse ebenfalls auf TControl gesetzt werden und dann aus der *.lfm aufgebaut werden. Auf einem ähnlichen Umweg hab ich für Delphi aus Frames Controls für die Palette abgeleitet.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

Antworten