Delphi-PRAXiS
Seite 3 von 3     123   

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)

Hawkeye219 6. Apr 2007 13:18

Re: Checkbox
 
Zitat:

Zitat von Flocke
Ganz kleiner Dämpfer: nicht, wenn sie von TComponent abgeleitet sind und einen Owner haben

Auch wenn sie keinen Owner besitzen, kann es Probleme geben. Die CheckBoxen liegen ja normalerweise auf einem TWinControl, und diese Controls entsorgen bei ihrer Freigabe alle enthaltenen Controls. Abhilfe schafft die Verwendung einer Delphi-Referenz durchsuchenTComponentList. Diese Liste wird über die Freigabe von Controls informiert und entfernt dann die betroffenen Referenzen.

Gruß Hawkeye

CodeX 21. Apr 2007 08:46

Re: Checkbox
 
Zitat:

Zitat von DGL-luke
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;

Kannst Du bitte ein Anwendungsbeispiel dafür geben? Ich bekomme das nämlich nicht zum Laufen.
Konkret möchte ich in die dritte und vierte Spalte eine Checkbox ohne Beschriftung setzen.

Woran es hapert:
1. Canvas wird als undeklariert angezeigt. Ich habe deshalb "Canvas : TCanvas;" bei var von MakeCheckBoxes aufgenommen. Ist das so korrekt oder soll das wo anders herkommen?
2. Ich komme mit den Parametern nicht ganz zurecht. Als Container muss ich ja die entsprechende ListView angeben, oder? Ich welcher Weise werden aber die Captions benötigt/verwendet?

Bei meinen Versuchen wurde bestenfalls eine External Exception ausgegeben und dann eine Checkbox im ersten Column Header angezeigt ... :?

Ich wäre für Hilfe sehr dankbar. :)

DGL-luke 21. Apr 2007 10:44

Re: Checkbox
 
Hallo,

sorry, das sollte natürlich Container.Canvas heißen.

Und wenn du eh mit einer Listview arbeitest... die hat doch Checkboxes schon eingebaut?! Einfach die Eigenschaft CheckBoxes aktivieren...

CodeX 21. Apr 2007 11:23

Re: Checkbox
 
Zitat:

Zitat von DGL-luke
sorry, das sollte natürlich Container.Canvas heißen.

das hatte ich probiert und gerade wider. das hilft nicht.

Zitat:

Zitat von DGL-luke
Und wenn du eh mit einer Listview arbeitest... die hat doch Checkboxes schon eingebaut?! Einfach die Eigenschaft CheckBoxes aktivieren...

dann hab ich die aber genau in der ersten spalte und nur da. ich brauche die aber wie gesagt in zwei anderen spalten.

DGL-luke 21. Apr 2007 12:09

Re: Checkbox
 
ok. bei mir hat die listview einen Canvas. aber wenn du eh keinen text brauchst, kann man viel einfach weglassen:

Delphi-Quellcode:
function MakeBlankCheckBoxes(Container: TWinControl; Number: Cardinal; CBOnClick: TNotifyEvent = nil): TObjectList;
var i: Integer;
begin
  Result := TObjectList.Create;
  for i := 0 to number-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; //das anpassen
    Height := 16;  
    Width := 16; //16 extra für die Box
    Tag := i;
    Caption := '';
    OnClick := CBOnClick;
  end;
end;
Du wirst aber vermutlich das Problem haben, dass die CheckBoxes nicht von alleine mitscrollen.

CodeX 21. Apr 2007 12:41

Re: Checkbox
 
Zitat:

Zitat von DGL-luke
Du wirst aber vermutlich das Problem haben, dass die CheckBoxes nicht von alleine mitscrollen.

richtig :(
kann man diese nicht statt an listview an ein listviewitem anhängen? die position des listview ändert sich beim scrollen nicht, aber ja vielleicht die des listview items.

tut mir leid fürs nachfragen. ich kann das problem leider nicht alleine lösen, weil mir hierfür das spezialwissen fehlt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:09 Uhr.
Seite 3 von 3     123   

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