AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Checkbox

Offene Frage von "CodeX"
Ein Thema von stOrM · begonnen am 5. Apr 2007 · letzter Beitrag vom 21. Apr 2007
Antwort Antwort
Seite 2 von 3     12 3   
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#11

Re: Checkbox

  Alt 5. Apr 2007, 15:20
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.
Lukas Erlacher
  Mit Zitat antworten Zitat
Benutzerbild von stOrM
stOrM

Registriert seit: 7. Jun 2003
Ort: Mülheim an der Ruhr
434 Beiträge
 
Delphi 10.3 Rio
 
#12

Re: Checkbox

  Alt 5. Apr 2007, 15:44
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
  Mit Zitat antworten Zitat
Nuclear-Ping
(Gast)

n/a Beiträge
 
#13

Re: Checkbox

  Alt 5. Apr 2007, 16:40
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.
  Mit Zitat antworten Zitat
Benutzerbild von stOrM
stOrM

Registriert seit: 7. Jun 2003
Ort: Mülheim an der Ruhr
434 Beiträge
 
Delphi 10.3 Rio
 
#14

Re: Checkbox

  Alt 5. Apr 2007, 17:20
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?
  Mit Zitat antworten Zitat
Nuclear-Ping
(Gast)

n/a Beiträge
 
#15

Re: Checkbox

  Alt 5. Apr 2007, 18:39
1 + 2 kombinieren.
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#16

Re: Checkbox

  Alt 5. Apr 2007, 18:44
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;
Lukas Erlacher
  Mit Zitat antworten Zitat
Nuclear-Ping
(Gast)

n/a Beiträge
 
#17

Re: Checkbox

  Alt 5. Apr 2007, 18:47
Zitat:
//sorry dafür. aber da mach ich jetzt kein extra faß variablen für auf.
Zwingt dich ja auch keiner. 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.
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#18

Re: Checkbox

  Alt 5. Apr 2007, 18:55
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).
Lukas Erlacher
  Mit Zitat antworten Zitat
Nuclear-Ping
(Gast)

n/a Beiträge
 
#19

Re: Checkbox

  Alt 5. Apr 2007, 23:39
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#20

Re: Checkbox

  Alt 6. Apr 2007, 13:59
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
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:23 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