Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Zusammenges. Komponente von TPanel mit 1 TImage und 3 TEdit (https://www.delphipraxis.net/83559-zusammenges-komponente-von-tpanel-mit-1-timage-und-3-tedit.html)

EccoBravo 4. Jan 2007 14:40


Zusammenges. Komponente von TPanel mit 1 TImage und 3 TEdit
 
Hallo,

(BDS2006 Architect)

Ich will eine Komponente TEB_Panel=class(TPanel) entwickeln,
die 3 TEdit und 1 TImage enthält.

Diese (zusammengesetzte) Komponente soll die Eigenschaft besitzen, daß

entweder:
die Position der TEdit in jeder Instanz von TEB_Panel zur Laufzeit (unabh.voneinander) änderbar ist

oder:
die Position der TEdit in den verschiedenen Instanzen von TEB_Panel verschieden ist
(diese Positionen werden zur Entwurfszeit festgelegt)

Ich will nämlich an den Entwurf der Klasse TEB_Panel Algoritmen binden, die für alle ihrer Instanzen gleich sind.

Folgendes will ich nämlich vermeiden:
Delphi-Quellcode:
TF_Mess = class(TForm)
      P_KalibPhantom: TPanel;
          B_Kalib_MessStart: TButton;
          B_Kalib_MesStop: TButton;
          I_Kalib: TImage;
          EB_Kalib01: TEdit;
          EB_Kalib02: TEdit;
          EB_Kalib03: TEdit;
      P_HalsPhantom_re: TPanel;
          B_Hals_re_MessStart: TButton;
          B_Hals_re_MessStop: TButton;
          I_Hals_re: TImage;
          EB_Hals_re01: TEdit;
          EB_Hals_re02: TEdit;
          EB_Hals_re03: TEdit;
      P_HalsPhantom_li: TPanel;
          B_Hals_li_MessStart: TButton;
          B_Hals_li_MessStop: TButton;
          I_Hals_li: TImage;
          EB_Hals_li01: TEdit;
          EB_Hals_li02: TEdit;
          EB_Hals_li03: TEdit;
      P_StammPhantom: TPanel;
          B_Stamm_MessStart: TButton;
          B_Stamm_MessStop: TButton;
          I_Stamm: TImage;
          EB_Stamm01: TEdit;
          EB_Stamm02: TEdit;
          EB_Stamm03: TEdit;
...
Eher sollte es so aussehen:

Delphi-Quellcode:
      TP_EB = Class(TPanel);
          B_MessStart: TButton;
          B_MesStop: TButton;
          I_Bild: TImage;
          EB_01: TEdit;
          EB_02: TEdit;
          EB_03: TEdit;
...
var
    Kalib, Hals_re, Hals_li, Stamm : TP_EB;
...
Mein Ziel ist es, diese Liste von Kalib, Hals_li, Hals_re, Stamm... beliebig erweiterbar zu machen.

Wie geht das richtig ?

Ich glaube, meine Formulierung ist verständlich.


Vielen Dank
und ein gesundes neues Jahr

E. B.

Hador 4. Jan 2007 14:55

Re: Zusammenges. Komponente von TPanel mit 1 TImage und 3 TE
 
Du leitest einfach eine Klasse von TPanel ab und erstellst in dessen Constructor dynamisch die Edits und das TImage

shmia 4. Jan 2007 15:00

Re: Zusammenges. Komponente von TPanel mit 1 TImage und 3 TE
 
So ganz habe ich deine Ausführungen nicht verstanden, aber meine langjährige Erfahrung
sagt folgendes:
1.) Komponenten, die aus mehreren Controls bestehen sind nicht empfehlenswert, da sie meist
nur für eine bestimmte Anwendung sinnvoll sind. Sie sind nicht universell einsetzbar und daher
keine sinnvollen Komponenten.
2.) wenn mehrmals gleiche Anordnungen von Steuerelementen benötigt werden, dann sollte man Frames verwenden. Bei Frames darf/sollte man nicht weitere Ableitungen bilden; man kommt sonst in Schwierigkeiten.

Also ich würde Frames verwenden.

EccoBravo 4. Jan 2007 15:11

Re: Zusammenges. Komponente von TPanel mit 1 TImage und 3 TE
 
Hallo,
zugrundegelegt habe ich meiner Vorstellung irgend ein Entwurfsmuster, in dem ich mir eine Klasse schaffe und erst zur Laufzeit festlege, wie sie aussehen soll.
(Strategiemuster, Fabrikmuster oder so)

ich will mir einfach unnötige Deklarationsromane und Codewiederholungen sparen, und den Code leicht erweiterbar halten.

So auch mein Vorhaben,
ich schaffe eine Klasse, abgeleitet von TPanel, welche weitere Bestandteile wie ein TImage, 2 TEdit, 2 TButton enthält, die ich zur Laufzeit erst gestalten kann (wie z.B. die Lage der TEdits im Panel).
Ich weiß nicht, ob diese Vorhaben so wirr sind, irgendwie muß es doch soetwas geben?

Danke nochmals

E. B.

Hador 4. Jan 2007 15:54

Re: Zusammenges. Komponente von TPanel mit 1 TImage und 3 TE
 
Zitat:

Zitat von EccoBravo
Ich weiß nicht, ob diese Vorhaben so wirr sind, irgendwie muß es doch soetwas geben?

Wie ich schon sagte:
Zitat:

Zitat von Hador
Du leitest einfach eine Klasse von TPanel ab und erstellst in dessen Konstruktor dynamisch die Edits und das TImage


Wobei Frames natürlich auch eine Möglichkeit wären.

EccoBravo 4. Jan 2007 16:36

Re: Zusammenges. Komponente von TPanel mit 1 TImage und 3 TE
 
Hallo,

habe es so gemacht,
Nur, leider ist in dem Panel kein TEdit zu sehen.
Was habe ich am unten stehenden Code falsch gemacht?

Delphi-Quellcode:
unit EB_Panel;

interface

uses
  SysUtils, Classes, Controls, ExtCtrls, StdCtrls;

type
  TEB_Panel = class(TPanel)
      E_Edit:TEdit;
  private
    { Private-Deklarationen }
  protected
    { Protected-Deklarationen }
  public
    { Public-Deklarationen }
    constructor Create(aOwner:TComponent);
   
  published
    { Published-Deklarationen }
  end;

procedure Register;


implementation

constructor TEB_Panel.Create;
begin
    try
        E_Edit:=TEdit.Create(self);
        E_Edit.Left:=5;
        E_Edit.Top :=5;
        E_Edit.Show;
    finally
        E_Edit.Free;
    end;
end;

procedure Register;
begin
  RegisterComponents('EB_Panels', [TEB_Panel]);
end;

end.
Vielen Dank

E. B.

Hador 4. Jan 2007 16:47

Re: Zusammenges. Komponente von TPanel mit 1 TImage und 3 TE
 
Zwei Sachen:
1. Du musst noch das Panel als Parent vom Edit Setzen:
Delphi-Quellcode:
E_Edit.Parent := Self
2.
Delphi-Quellcode:
begin
    try
        [...]
    finally
        E_Edit.Free;
    end;
end;
Du meinst denke ich eher:
Delphi-Quellcode:
begin
    try
        [...]
    except
        E_Edit.Free;
    end;
end;
Denn sonst würde das Edit ja immer freigegeben.

EDIT:
Und ich bin mir nicht mehr ganz sicher aber ich meine, dass Edit.show kannst du dir dann sparen.

EccoBravo 4. Jan 2007 16:58

Re: Zusammenges. Komponente von TPanel mit 1 TImage und 3 TE
 
Danke,

aber wo füge ich

Delphi-Quellcode:
E_Edit.Parent:=self;

ein?

Danke

E. B.


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