Hi unwissender,
Ich möchte es weitgehenst vermeiden, dass weitere Komponenten in meinem Control enthalten sind. Ich überarbeite gerade meine aktuelle Programmversion. Die elemente werden alle zur Laufzeit hinzugefügt. Das sin dann zum Schluss mehrere hundert (ist wirklich so, und ich war auch überrascht). In den einzelnen Controls weitere Kompos einzubinden hat in der Vergangenheit beim Zeichnen arge Performance Probleme verursacht. Deshalb gehe über den Weg "Zeichnen auf Canvas" ran. Da es viele verschiedene eigene Controls geben wird, die ich in einen solchen Container legen werde (zur Laufzeit) währe es mir lieber, wenn der Container das händelt. Wie bei einem Fenster. da kann man auch nichts in den Titel reinschieben.
Ich habs jetzt schon mal über ClientHeight und ClientWidth versucht. aber da wird das komplette Control verkleinert wenn ich diese Werte kleiner als Width und Height setze.
die Hilfe sagt hierzu eigentlich, dass das die richtige Stelle ist. aber entweder ich habe das falsch verstanden, oder was falsch gemacht.
Zitat:
Beschreibung
Mit ClientHeight können Sie die Höhe des Client-Bereichs des Steuerelements abrufen oder ändern.
Bei TControl ist ClientHeight mit der Eigenschaft Height identisch. In abgeleiteten Klassen kann aber eine ClientHeight-Eigenschaft implementiert werden, die sich von Height unterscheidet. So entspricht beispielsweise der Wert der Eigenschaft ClientHeight eines Formulars dem Wert von Height abzüglich der Höhe der Titelleiste, des Rahmens und der Bildlaufleiste.
Mein Code:
Delphi-Quellcode:
procedure TBaseRTControl.SetClientRect;
begin
if FShowTitle then begin
// minus Titelhöhe und ein Pixel Rahmen
self.ClientHeight := Height - Abs(self.Canvas.Font.Height) - 7;
self.ClientWidth := Width - 2;
end else begin
self.ClientHeight := Height - 2;
self.ClientWidth := Width - 2;
end;
end;
Gruß oki