Sehe ich das richtig, das die Custom-Version auf das ganzen published-Block verzichtet, und somit besser geeignet ist, wen man selbst eine abgeleitet Komponente programmieren will ?
Die betrifft auch andere Komponenten und nicht nur das Panel.
TPanel vs. TCustomPanel
-
- Beiträge: 6194
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
TPanel vs. TCustomPanel
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: TPanel vs. TCustomPanel
Genau, sonst würden alle Properties, die du selbst gar nicht vom Programmierer bearbeitbar machen willst, ebenfalls im Objectinspektor erscheinen.
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
-
- Beiträge: 6194
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: TPanel vs. TCustomPanel
Dann sollte man sich angewöhnen, immer die Custom-Variante zu verwenden, wen man eine eigene Komponente machen will.
Wie sieht es aus, wen man Komponenten dynamisch erzeugt ?
Was ist hier besser Button 1 oder 2 ?
Wie sieht es aus, wen man Komponenten dynamisch erzeugt ?
Was ist hier besser Button 1 oder 2 ?
Code: Alles auswählen
procedure TForm1.FormCreate(Sender: TObject);
var
Button1: TCustomButton;
Button2: TButton;
begin
Button1 := TCustomButton.Create(Self);
Button1.Parent := Self;
Button2 := TButton.Create(Self);
Button2.Parent := Self;
Button2.Top := 30;
end;
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: TPanel vs. TCustomPanel
Button1 ist falsch, die wesentlichen Eigenschaften sind in der Regel als protected realisiert, so dass nur Nachfahren von TCustomButton auf sie zugreifen können. Da TForm1 kein Nachfahre von TCustomButton ist, hast du keine Möglichkeit z.b. die Caption zu setzen oder einen OnClick-Handler einzuhängen. Und manchmal haben die TCustomXXX-Klassen auch noch abstrakte Methoden - wenn diese aufgerufen werden, sagt dein Programm leise Tschüss.
Warum ist das so umständlich? Das liegt daran, dass innerhalb einer Klassenhierarchie die Sichtbarkeit von Eigenschaften nicht mehr zurückgestellt werden kann. Wenn also der "Ur-Button" die Eigenschaft "caption" veröffentlichen würde (published), wäre sie bei allen Nachfahren im Objekt Inspektor sichtbar. Wenn du jetzt z.B. einen neuen Button entwickelst, der Caption gar nicht braucht, weil er nur ein Icon anzeigen soll, dann würde der User immer durch die unnötige Eigenschaft Caption im ObjekctInspector verwirrt werden. Aus diesem Grund implementiert man das Verhalten aller Komponenten immer in Form von TCustomXXXX-Vorfahren, bei denen alle Properties "protected" sind (also für das Formular und den Object Inspector nicht sichtbar) und schiebt dann eine TXXXXX Komponente hinterher, in der man die benötigten Eigenschaften published macht.
Warum ist das so umständlich? Das liegt daran, dass innerhalb einer Klassenhierarchie die Sichtbarkeit von Eigenschaften nicht mehr zurückgestellt werden kann. Wenn also der "Ur-Button" die Eigenschaft "caption" veröffentlichen würde (published), wäre sie bei allen Nachfahren im Objekt Inspektor sichtbar. Wenn du jetzt z.B. einen neuen Button entwickelst, der Caption gar nicht braucht, weil er nur ein Icon anzeigen soll, dann würde der User immer durch die unnötige Eigenschaft Caption im ObjekctInspector verwirrt werden. Aus diesem Grund implementiert man das Verhalten aller Komponenten immer in Form von TCustomXXXX-Vorfahren, bei denen alle Properties "protected" sind (also für das Formular und den Object Inspector nicht sichtbar) und schiebt dann eine TXXXXX Komponente hinterher, in der man die benötigten Eigenschaften published macht.
-
- Beiträge: 6194
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: TPanel vs. TCustomPanel
Aha.
Mit der Zeit versteht man immer mehr.
Ist an der Zeit, das ich mich mehr mit der LCL beschäftige.
Mit der Zeit versteht man immer mehr.
Ist an der Zeit, das ich mich mehr mit der LCL beschäftige.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot