![]() |
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:
Eher sollte es so aussehen:
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; ...
Delphi-Quellcode:
Mein Ziel ist es, diese Liste von Kalib, Hals_li, Hals_re, Stamm... beliebig erweiterbar zu machen.
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; ... Wie geht das richtig ? Ich glaube, meine Formulierung ist verständlich. Vielen Dank und ein gesundes neues Jahr E. B. |
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
|
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. |
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. |
Re: Zusammenges. Komponente von TPanel mit 1 TImage und 3 TE
Zitat:
Zitat:
Wobei Frames natürlich auch eine Möglichkeit wären. |
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:
Vielen Dank
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. E. B. |
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:
2.
E_Edit.Parent := Self
Delphi-Quellcode:
Du meinst denke ich eher:
begin
try [...] finally E_Edit.Free; end; end;
Delphi-Quellcode:
Denn sonst würde das Edit ja immer freigegeben.
begin
try [...] except E_Edit.Free; end; end; EDIT: Und ich bin mir nicht mehr ganz sicher aber ich meine, dass Edit.show kannst du dir dann sparen. |
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 04:11 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 by Thomas Breitkreuz