Delphi-PRAXiS
Seite 2 von 3     12 3      

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 Checkbox (https://www.delphipraxis.net/89770-checkbox.html)

DGL-luke 5. Apr 2007 14:20

Re: Checkbox
 
Und hier n bisschen generischer:

Delphi-Quellcode:
procedure MakeCheckBoxes(Container: TWinControl; Captions: TStrings; CBOnClick: TNotifyEvent = nil);
var i: Integer;
    Size: TSize;
    buf: string;
begin
  for i := 0 to Captions.Count-1 do
  with TCheckBox.Create(Container) do
  begin
    Parent := Container;
    Top := i * 16; //reicht 16?
    Left := 3;
    Height := 16;
    buf := Captions[i];
    GetTextExtentPoint32(Canvas.Handle, @buf[1], Length(buf),Size);
    Width := Size.cx + 16; //16 extra für die Box
    Tag := i;
    Caption := buf;
    OnClick := CBOnClick;
  end;
end;
So kannst du Checkboxes "hinklatschen". Wie viel reinpassen würd ich per Container.Height div 16 berechnen.

EDIT: So, korrekte Size dazu.

stOrM 5. Apr 2007 14:44

Re: Checkbox
 
Zitat:

Zitat von DGL-luke
Und hier n bisschen generischer:

Delphi-Quellcode:
procedure MakeCheckBoxes(Container: TWinControl; Captions: TStrings; CBOnClick: TNotifyEvent = nil);
var i: Integer;
    Size: TSize;
    buf: string;
begin
  for i := 0 to Captions.Count-1 do
  with TCheckBox.Create(Container) do
  begin
    Parent := Container;
    Top := i * 16; //reicht 16?
    Left := 3;
    Height := 16;
    buf := Captions[i];
    GetTextExtentPoint32(Canvas.Handle, @buf[1], Length(buf),Size);
    Width := Size.cx + 16; //16 extra für die Box
    Tag := i;
    Caption := buf;
    OnClick := CBOnClick;
  end;
end;
So kannst du Checkboxes "hinklatschen". Wie viel reinpassen würd ich per Container.Height div 16 berechnen.

EDIT: So, korrekte Size dazu.

Perfekt! SupervielenDank

Nuclear-Ping 5. Apr 2007 15:40

Re: Checkbox
 
Ich würde die Checkboxes in ein Array werfen. Das erleichtert den Zugriff später darauf ungemein. Sonst frickelst du für 40 Checkboxen mit "FindComponent" rum, was im Geschwindigkeitsvergleich zum Array um einiges lahmer ist.

stOrM 5. Apr 2007 16:20

Re: Checkbox
 
Zitat:

Zitat von Nuclear-Ping
Ich würde die Checkboxes in ein Array werfen. Das erleichtert den Zugriff später darauf ungemein. Sonst frickelst du für 40 Checkboxen mit "FindComponent" rum, was im Geschwindigkeitsvergleich zum Array um einiges lahmer ist.

Hmmmmm...
Also doch Version 1 hier nehmen?

Nuclear-Ping 5. Apr 2007 17:39

Re: Checkbox
 
1 + 2 kombinieren. ;)

DGL-luke 5. Apr 2007 17:44

Re: Checkbox
 
Jo. is wohl sinnvoller:

Delphi-Quellcode:
function MakeCheckBoxes(Container: TWinControl; Captions: TStrings; CBOnClick: TNotifyEvent = nil): TObjectList;
var i: Integer;
    Size: TSize;
    buf: string;
begin
  Result := TObjectList.Create;
  for i := 0 to Captions.Count-1 do
  with Result[Result.Add(TCheckBox.Create(Container))] as TCheckBox do //sorry dafür. aber da mach ich jetzt kein extra faß variablen für auf.
  begin
    Parent := Container;
    Top := i * 16; //reicht 16?
    Left := 3;
    Height := 16;
    buf := Captions[i];
    GetTextExtentPoint32(Canvas.Handle, @buf[1], Length(buf),Size);
    Width := Size.cx + 16; //16 extra für die Box
    Tag := i;
    Caption := buf;
    OnClick := CBOnClick;
  end;
end;

Nuclear-Ping 5. Apr 2007 17:47

Re: Checkbox
 
Zitat:

//sorry dafür. aber da mach ich jetzt kein extra faß variablen für auf.
Zwingt dich ja auch keiner. :P Wollte ihn das eigentlich selber lösen lassen, deswegen hab ich keinen Code dazugepackt.

Aber das mit TObjectList ist 'ne gute Idee, hab ich nicht dran gedacht. Noch 'n Tick sauberer als Array. :thumb:

DGL-luke 5. Apr 2007 17:55

Re: Checkbox
 
Hast recht, aber ich glaube, ohne viel Erfahrung kommt man nicht auf eine Lösung, die so sauber und elegant ist wie meine (riecht ihrs auch? - nich dass die nicht auch Probleme aufwerfen würde, neue Instanzen aus einer Funktion zu liefern ist nicht ganz unproblematisch, die muss man nämlich wieder freigeben). :)

Nuclear-Ping 5. Apr 2007 22:39

Re: Checkbox
 
:love: :mrgreen:

Flocke 6. Apr 2007 12:59

Re: Checkbox
 
Zitat:

Zitat von DGL-luke
die muss man nämlich wieder freigeben

Ganz kleiner Dämpfer: nicht, wenn sie von TComponent abgeleitet sind und einen Owner haben - der kümmert sich dann nämlich um alles. Schlimmer noch: wenn du die TObjectList nach dem Owner freigeben würdest, dann hagelte es Exceptions ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:44 Uhr.
Seite 2 von 3     12 3      

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