Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Komponenten in eigens Form auslagern während es läuft? (https://www.delphipraxis.net/79522-komponenten-eigens-form-auslagern-waehrend-es-laeuft.html)

moelski 24. Okt 2006 09:07


Komponenten in eigens Form auslagern während es läuft?
 
Moin !

Ist es mit vertretbarem Aufwand folgendes machbar...

Wir haben sagen wir mal 3 Panles die übereinanderliegen und verschiedene komponenten beinhalten. Das ganze wäre auch bei einem PagelControl denkbar .. Über das Menü kann man die Seite ansehen die man haben will und das wars.

Nun wäre es aber cool wenn man die Komponenten eines Panels bzw. die auf einer Seite eines PageControl sind in ein eigenes Formular "verschiebt" und dieses anstatt des Panels anzeigt.
Hintergrund: Wir haben in unserer Soft z.B. eine Grafik und eine Tabelle die man aber im Normalfall nicht zusammen darstellen kann. Ab und an wäre aber eben dies mal ganz interessant. Wir möchten allerdings keine MDI Anwendung. Das würde zu viel Umstellung bedeuten.
Drum diese Idee und die Frage der Machbarkeit ...

Any hints?

mkinzler 24. Okt 2006 09:14

Re: Komponenten in eigens Form auslagern während es läuft?
 
Du könntest gleichartige Komponenten dynamisch neu erzeugen und die Eigenschaften klonen.

moelski 24. Okt 2006 09:22

Re: Komponenten in eigens Form auslagern während es läuft?
 
Moin !

Zitat:

Du könntest gleichartige Komponenten dynamisch neu erzeugen und die Eigenschaften klonen.
Kann man sicher so machen, hat aber aus meiner Sicht Nachteile ..

- höhere Speicherauslastung
- ich habe dann auch neue Komponentennamen (und wir nutzen ab und an die Komponentennamen der vorhandenen Komponenten)
- ich muss die Tabs bzw. Panel extra ausblenden
- ich muss im Code die neuen Komponentennamen mitführen und überwachen

Ich glaube die Lösung wäre suboptimal ;)

hsg 24. Okt 2006 09:25

Re: Komponenten in eigens Form auslagern während es läuft?
 
Es geht auch einfacher: Eine Leeres Formular erzeugen und den Panels dieses Formular zur Laufzeit als Parent zuweisen
Delphi-Quellcode:
pnTab.Parent := Form1;
Gruß Jörg

moelski 24. Okt 2006 09:27

Re: Komponenten in eigens Form auslagern während es läuft?
 
Moin !

ui, das geht echt so easy? Das wäre ja cool!

Das sollte auch mit Panels und Tabs gehen oder? Bzw. zur Not auf das Tab ein Panel legen ...

Sidorion 24. Okt 2006 09:32

Re: Komponenten in eigens Form auslagern während es läuft?
 
Dabei muss man alerdings beachten, dass der Owner beim alten Form liegen bleibt und die Variablen für die Komponenten auch. D.h. dass Du wenn das neue Form geschlossen wird, die Komponenten zumindest wieder zurückschieben musst.
Das Problem dabei ist nämlöich, dass sowohl die neue, als auch die alte Form die Komponenten mitzerstört (einmal über Owner, einmal über Parent) und wenn dann die jeweils andere Form zerstört wird, hagelts Exceptions.

moelski 24. Okt 2006 09:36

Re: Komponenten in eigens Form auslagern während es läuft?
 
Moin !

Ok ..

Würde es dann reichen wenn ich im OnClose einfach den Parent wieder retour setze?

samson 24. Okt 2006 09:38

Re: Komponenten in eigens Form auslagern während es läuft?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Moin,

habe mal ein kleines Testprogramm gebaut.

Darauf kannst du aufbauen.

Gruß


Frank

moelski 24. Okt 2006 09:48

Re: Komponenten in eigens Form auslagern während es läuft?
 
Moin !

Danke für die Demo!
In dem Pas fehlt allerdings der Code für den Button ;)
Und beim schliessen von Form2 sollte ja dann alles wieder moven ...

Aber ich denke ich habe einen Ansatz den ich mal verfolgen kann.

samson 24. Okt 2006 09:52

Re: Komponenten in eigens Form auslagern während es läuft?
 
Moin,

in Unit1 steht doch für den Button der Code. Wenn der Button ins Form2 verschoben wird, wird trotzdem der Code aus Unit1 ausgeführt.

Die Event-Procedure ändert sich ja nicht.

Wie gesagt. Ist nur eine kleine Testapp. Wer, Was draus macht ist jedem selbst überlassen. Hauptsache der Ansatz ist da.

Gruß


Frank

moelski 24. Okt 2006 09:56

Re: Komponenten in eigens Form auslagern während es läuft?
 
Moin !

Maybe I´m blinded ...

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormShow(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormShow(Sender: TObject);
begin
  form2.show;
end;

end.

samson 24. Okt 2006 10:01

Re: Komponenten in eigens Form auslagern während es läuft?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Bin ich doof?

Ja ich bin doof!!!

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormShow(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.FormShow(Sender: TObject);
begin
  form2.show;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if self.Button1.Parent = Form1
    then self.Button1.Parent := Form2
    else self.Button1.Parent := Form1;
end;

end.
Sorry.

Gruß


Frank

moelski 24. Okt 2006 10:03

Re: Komponenten in eigens Form auslagern während es läuft?
 
:thumb:

hsg 24. Okt 2006 10:04

Re: Komponenten in eigens Form auslagern während es läuft?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich mache das in meiner Applikation mit sämtlichen Formularen so.

Meine Vorgehensweise hier: Im Designer designe ich die Fenster ganz normal als Fenster, zur Laufzeit wird bei OnSchow das gesamte Fenster umgeswitched und liegt anschliessend auf einem Panel meines Hauptfensters (Borders werden dabei abgeschaltet, Größe anpasst usw.) Für die Navigation durch die einzelnen Fenster dient ein Virtual TreeView, im Anhang mal ein Screenshot davon, wie das ganze in der Praxis aussieht. Da ich die Fenster selber umhänge, habe ich nicht die Probleme beim Zerstören der Fenster. Wenn natürlich das ganze bei Panels gemacht wird, sollten auch die Owner-Verhältnisse umgebogen werden ....

Gruß Jörg

moelski 24. Okt 2006 10:06

Re: Komponenten in eigens Form auslagern während es läuft?
 
@Jörg:

Kannst du evtl. auch mal ein einfach Beispiel hier reinstellen?
So als Grundlage für Experiemente .. ?

hsg 24. Okt 2006 10:17

Re: Komponenten in eigens Form auslagern während es läuft?
 
Zitat:

Zitat von moelski
@Jörg:

Kannst du evtl. auch mal ein einfach Beispiel hier reinstellen?
So als Grundlage für Experiemente .. ?

Hmm, das würde ein wenig dauern, da ich sehr intensiv von eigenen Komponenten mache (es gibt fast nichts, was ich nicht vorher abgeleitet hätte), aber ich kann ja mal heute abend versuchen was zurecht zu zaubern.

Die Formularklasse hat inzwischen knapp 2000 Zeilen Source-Code :) wieviel Abhängigkeiten zu anderen Sachen darin sind, weiss ich gar nicht mehr...

moelski 24. Okt 2006 10:20

Re: Komponenten in eigens Form auslagern während es läuft?
 
Ui das ich nich ohne ...
Naja falls es klappt ... Schon mal Danke!

hsg999 24. Okt 2006 17:48

Re: Komponenten in eigens Form auslagern während es läuft?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

ich habe nun mal versucht, das ganze etwas zu kürzen und habe dazu ein kleines Beispiel geschrieben.
Die interessante Unit ist die uFormChild.pas.
Einzige Voraussetzung ist die VirtualTreeView-Komponente von Mike Lischke. Sie wird für die Navigation benötigt.

Zweck dieser Klasse war es, ein neue Art von MDI-Fenstern einzuführen, mit denen auch Leute klar kommen (müssen :lol:) die bisher nur DOS-Programme bedient haben.

Bei dem Projekt, wo diese Klasse eingesetzt wird, handelt es sich um eine Software, die mehrere alte DOS-Programme in unserer Firma ersetzen soll.

Da diese Geschichte so gefordert wurde, ist eine Diskussion über das Aussehen an dieser Stelle überflüssig :-D

Sollten Fragen dazu sein, dann bitte per PM an die im Projekt hinterlegte email-Adresse

Gruß Jörg


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:34 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