Autor Beitrag
ffgorcky
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 573

WIN XP/2000 & 7Prof (Familie:Win95,Win98)

BeitragVerfasst: Sa 24.01.09 15:26 
Hallo liebe Entwicklergemeinde,

Ich weiß nicht, wieso ich gerade für so eine - auf den ersten Blick einfach erscheinende - Aufgabe keine Lösung weiß.
Vielleicht, weil ich im Moment in meinem damit verbundenen großen Problem zu verbohrt bin...

Ich möchte einfach nur ein Panel anlegen, das ich je nach Anforderung vermehrfachen kann.
Geht das nicht einfach so? Also muss ich dazu denn unbedingt eine Klasse erschaffen?
Ich dachte, dass ich einfach nur in meinem Fenster einaml das Panel erstelle und bei Druck auf einen (Bit-)Button könnte ich das dann einfach nur durch kopieren und löschen der Einträge (auf dem neuen Panel) vervielfachen.

Aber wie geht das?


PS:In Thema 81920 habe ich jetzt auch auf dieses Thema verwiesen...


Zuletzt bearbeitet von ffgorcky am Do 21.01.10 15:25, insgesamt 1-mal bearbeitet
dummzeuch
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 593
Erhaltene Danke: 5


Delphi 5 ent, Delphi 6 bis Delphi XE8 pro
BeitragVerfasst: Sa 24.01.09 21:52 
user profile iconffgorcky hat folgendes geschrieben Zum zitierten Posting springen:

Ich möchte einfach nur ein Panel anlegen, das ich je nach Anforderung vermehrfachen kann.
Geht das nicht einfach so? Also muss ich dazu denn unbedingt eine Klasse erschaffen?
Ich dachte, dass ich einfach nur in meinem Fenster einaml das Panel erstelle und bei Druck auf einen (Bit-)Button könnte ich das dann einfach nur durch kopieren und löschen der Einträge (auf dem neuen Panel) vervielfachen.


Wenn es Dir dabei nur um ein Panel geht (und nicht um evtl. darauf platzierte Komponenten), dann musst Du lediglich ein neues Panel erzeugen und "irgendwie" die Properties kopieren (wobei der Name nicht mit kopiert werden darf, sonst bekommst Du einen Laufzeitfehler).

Am Einfachsten geht das, wenn Du Dich auf die fuer Dich wichtigen Properties beschraenkst:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
function CopyPanel(_src: TPanel): TPanel;
begin
  Result := TPanel.Create(_src.Owner);
  try
    Result.Parent := _src.Parent;
    Result.Caption := _src.Caption;
    /// .. weitere
  except
    // irgendein Fehler beim Kopieren,
    // Result freigeben, um Speicherleck
    // zu verhindern
    Result.Free;
    raise;
  end;
end;


Das kann man beliebig kompliziert machen, z.B. kann man das Source-Panel in einem Stream speichern und in ein neues laden. Ob das aber einfacher ist?

twm
ffgorcky Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 573

WIN XP/2000 & 7Prof (Familie:Win95,Win98)

BeitragVerfasst: So 25.01.09 17:34 
Nein, ich möchte ja schon gerne die 3 Textboxen und Labels, die darauf sind, mit kopieren.
Die sollen dann immer ein Stückchen weiter eine Liste bilden.
Also, wie kann ich jetzt das erste Panel als Muster nutzen und muss dann nur noch bei der
jeweils durch Kopie erstellten nueuen den Text löschen?

Oder wie kann ich mir selbst solch eine Komponente anlegen?
- Dann würde das ja nach der oben von Ihnen beschriebenen Möglichkeit schon gehen.
Das wäre ja wahrscheinlich sogar noch besser - auch für weitere Probleme in dieser Richtung!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19343
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 25.01.09 17:35 
Schau dir einmal Frames an. ;-)
ffgorcky Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 573

WIN XP/2000 & 7Prof (Familie:Win95,Win98)

BeitragVerfasst: So 25.01.09 19:20 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Schau dir einmal Frames an. ;-)


Dazu wäre mir ein konkreter Link sehr hilfreich.
Danke!
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: So 25.01.09 19:22 
Datei > neu, und dann statt Form oder Unit einfach Frame auswählen.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19343
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 25.01.09 19:28 
Eine kurze Beschreibung findest du auch in der Hilfe:
docs.codegear.com/do...32/Forms_TFrame.html

Kurz gesagt: Du benutzt deinen Frame wie ein Formular, kannst es also auch mehrere parallel erstellen, die genauso aussehen. Nur dass ein TFrame auf einem Formular liegt.
Das ist also genau was du möchtest. Ein Container mit immer den gleichen Komponenten, die du zentral verändern kannst, drauf, den du in deinem Projekt mehrfach erstellen und benutzen kannst.
ffgorcky Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 573

WIN XP/2000 & 7Prof (Familie:Win95,Win98)

BeitragVerfasst: Sa 28.02.09 16:35 
Und wie binde ich dann das Frame in mein Programm ein?
Also wie kann ich dann sagen, dass ich diese Unit PanelEinsFrame bzw. PanelZweiFrame (abstrakte Namen) an einer bestimmten Stelle im Form erstellen/anzeigen möchte?

Das ist für mich noch ein ganz neues Gebiet.
(Bisher habe ich nur eine maximale Anzahl an Panels gebraucht, die ich dann je nach Anfrage un-/sichtbar gemacht habe.)
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Sa 28.02.09 17:33 
Hallo,

Du erstellt den Frame, wie von jaenicke beschrieben.
Änderst die Größe, packst alle Komponenten, die Du möchtest, drauf. Du machst dir das Leben später etwas leichter, wenn Du keine Komponente hast, die den Framehintergrund komplett füllt, ansonsten wird das Verschieben etwas schwerer ;-).
Du kannst genauso auf Events der Kompos reagieren.
Wenn du fertig bist, speicherst du den Frame ganz normal und klickst dann den Frame rechts an und wählst "zur Palette hinzufügen" Danach kannst du den Frame wie eine ganz normale Komponente mehrfach auf der Form platzieren oder auch genauso dynamisch erzeugen.

Du kannst auf der Form die einzelnen Komponenten innerhalb des Frames verschieben, wenn das mal ungewünscht war -> Rechtsklick auf den Frame der Form und dann hast Du "geerbte einstellungen wiederherstellen".

Einfach ausprobieren, ist nicht schwer :-)

Gruß Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)