Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Per Befehl Checkbox erstellen (https://www.delphipraxis.net/108660-per-befehl-checkbox-erstellen.html)

STS301 17. Feb 2008 12:50


Per Befehl Checkbox erstellen
 
hi

wie kann ich per Befehl zb. eine Checkbox erstellen.

dominikkv 17. Feb 2008 12:54

Re: Per Befehl Checkbox erstellen
 
Delphi-Quellcode:
with TCheckBox.Create(self) do
  begin
    Parent := self;
    Top := 10;
    Left := 10;
    Height := 10;
    Width := 10;
  end;

STS301 17. Feb 2008 13:04

Re: Per Befehl Checkbox erstellen
 
danke

und wie kann ich dann etwas in die neue Checkbox eingeben, ohne eine editbox?

Noobinator 17. Feb 2008 13:05

Re: Per Befehl Checkbox erstellen
 
Dabei würde ich aber mindestens noch einen Namen setzen, damit man auf diese zugreifen kann.

Delphi-Quellcode:
with TCheckBox.Create(self) do
  begin
    Parent := self;
    Top := 10;
    Left := 10;
    Height := 10;
    Width := 10;
    name := 'mybox';
  end;

//Beispielzugriff per findcomponent.
...
Tcheckbox(findcomponent('mybox')).checked := not Tcheckbox(findcomponent('mybox')).checked;
...
wenn nicht sogar:

Delphi-Quellcode:
var mybox:Tcheckbox;

mybox := Tcheckbox.create(self);
with mybox do
  begin
    Parent := self;
    Top := 10;
    Left := 10;
    Height := 10;
    Width := 10;
    name := 'mybox';
  end;

STS301 17. Feb 2008 13:17

Re: Per Befehl Checkbox erstellen
 
ja schon, aber wie kann ich extern, nicht im Source die Caption ändern.

und wie kann ich wie schon eine Checkbox erstellt habe und danach noch eine erstellen will
kann das dann so funktionieren?
Delphi-Quellcode:
var mybox of Tcheckbox

mybox := Tcheckbox.create(self);
with mybox do
  begin
    Parent := self;
    Top := 10;
    Left := 10;
    Height := 10;
    Width := 10;
    name := 'mybox';
  end;

if mybox.exists then
 ...//checkbox erstellen?

busybyte 17. Feb 2008 13:33

Re: Per Befehl Checkbox erstellen
 
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;



  Type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
  mycb:Array of TCheckbox;
  procedure mycbClick(Sender: TObject);
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

Procedure freeall;
Var L1,cnt1:integer;
begin
L1:=Length(Form1.mycb);
for cnt1 := 0 to L1 - 1 do
freeandnil(Form1.mycb[cnt1]);
end;

Procedure TForm1.mycbclick(Sender: TObject);
begin
 with TCheckbox(Sender) do
  begin
  showmessage(Name+' Clicked!');
   if checked then caption:='checked'
   else caption:='unchecked';
  end;
end;


procedure TForm1.Button1Click(Sender: TObject);
Var L1:integer;
begin
L1:=Length(mycb);
Setlength(mycb,L1+1);

mycb[L1]:=TCheckbox.create(Form1);
try
 with mycb[L1] do
  begin
  Parent:=Form1;
  Caption:='MyCheckbox';
  Left:=10;
  Top:=L1*30+10;
  Name:='MyCb'+inttostr(L1+1);
  OnClick:=mycbClick;
  end;
except freeall; end;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
freeall;
end;

end.

Noobinator 17. Feb 2008 13:38

Re: Per Befehl Checkbox erstellen
 
Du kannst den Namen im Objektinspektor ganricht ändern, denn die Checkbox existiert noch garnicht vor Programmstart.

wie du mehrere Erstellen kannst?

ganz einfach:

entweder du legst dir ein Array an, mit allen Checkboxen.
Oder du gehst über den Namen und lässt einen Integer mitlaufen.

1.weg:

Delphi-Quellcode:
var Mycheckboxes: array of Tcheckbox;

//im Formcreate dann ganz am Anfang Arraylänge auf 0 setzen
Setlength(mycheckboxes,0);
...
//Checkbox erstellen /z.B. per Buttonklick:

setlength(mycheckboxes,length(mycheckboxes ) + 1); //neues Element hinten an unser Array
mycheckboxes[high(mycheckboxes)]:= Tcheckbox.create(self); //in das neue Element eine Checkbox setzen

//checkbox initialisieren
with mycheckboxes[high(mycheckboxes)] do
begin
    Parent := self;
    Top := 10* length(mycheckboxes); // damit nicht alle übereinanderliegen
    Left := 10;
    Height := 10;
    Width := 100; // hier 100 oder mehr angeben, damit dein Text auch angezeigt wird
    Caption := 'Checkbox' + intttostr(length(mycheckboxes));
end;
// Zugriff ist hier ein ganz normaler Arrayzugriff:
mycheckboxes[0].checked := false; //1. Box auf false setzen zum Beispiel
2. Weg:

Delphi-Quellcode:
var boxcount:integer;
// IM Formcreate:
Boxcount := 0;

// Erstellen z.B. per Buttonklick
inc(Boxcount,1); // 1 Hochzählen

with mTcheckbox.create(self) do
begin
    Parent := self;
    Top := 10 * boxcount;
    Left := 10;
    Height := 10;
    Width := 100;
    Caption := 'Checkbox' + intttostr(boxcount);
    Name := 'Checkbox' + intttostr(boxcount);
end;

//Zugriff hier per findcomponent
Tcheckbox(findcomponent('Checkbox1')).checked := not Tcheckbox(findcomponent('checkbox1')).checked;

dominikkv 17. Feb 2008 13:41

Re: Per Befehl Checkbox erstellen
 
"extern", also "nicht im Source" wird das wohl kaum gehen... wie denn auch? Du erstellst die Checkbox erst zur Laufzeit, sie ist also erst zur Laufzeit verfügbar (also nix mit OI). Da eine Checkbox keine Methoden zur änderung der Caption mitbringt (wie zB ein Edit/Memo) kannst du die Caption also auch nur über den Quellcode ändern.

Dafür bieten sich verschiedene Möglichkeiten an:
:arrow: Du hast einen Zeiger auf das erstellte Objekt:
Delphi-Quellcode:
var MeineCheckBox: TCheckBox;
{...}
MeineCheckBox := TCheckBox.Create(self);
with MeineCheckBox do
  begin
    Parent := self;
    Top := 10;
    Left := 10;
    Height := 10;
    Width := 10;
  end;
// Jetzt zeigt MeineCheckBox auf die eben erstellte Checkbox
MeineCheckBox := TCheckBox.Create(self);
with MeineCheckBox do
  begin
    Parent := self;
    Top := 10;
    Left := 10;
    Height := 10;
    Width := 10;
  end;
// Und jetzt zeigt MeineCheckBox auf die 2. erstellte CheckBox
Ob MeineCheckBox auf eine CheckBox zeigt kannst du mit Assigned(MeineCheckbox) überprüfen. Aber achtung: damit das klappt mit FreeAndNil freigeben!
Wenn du mehrere Checkboxen dynamisch erstellen willst bietet sich hier ein Array oder eine ObjectList an.

:arrow: Du gibst der CheckBox einen Namen und wenn du darauf zugreifen willst suchst du nach diesem namen:
Delphi-Quellcode:
with TCheckBox.Create(self) do
  begin
    Parent := self;
    Top := 10;
    Left := 10;
    Height := 10;
    Width := 10;
    name := 'MeineCheckBox';
  end;
with (FindComponent('MeineCheckBox') as TCheckBox).Caption := 'bla';
:arrow: Du verwendest Nachrichten... SendMessage und so... Dazu brauchst du aber das Handle von der CheckBox... hab ich auch noch nie gemacht^^

STS301 17. Feb 2008 15:22

Re: Per Befehl Checkbox erstellen
 
Liste der Anhänge anzeigen (Anzahl: 1)
danke für die Antworten

ich wollte es eigentlich so machen, wie bei der GoogleDesktopToolbar die Aufgaben

bitsetter 17. Feb 2008 17:38

Re: Per Befehl Checkbox erstellen
 
Hi,

bei einem TListView kannst du die Eigenschaft CheckBoxes aktivieren, sowie den Eintrag ohne Code editieren.
Wäre eventuell besser geeignet als mehrere Checkboxen.

STS301 18. Feb 2008 08:54

Re: Per Befehl Checkbox erstellen
 
Danke für die Antworten, und wie füge ich dann eine Checkbox in der Listview hinzu?

bitsetter 18. Feb 2008 10:32

Re: Per Befehl Checkbox erstellen
 
Zitat:

Zitat von bitsetter
Hi,

bei einem TListView kannst du die Eigenschaft CheckBoxes aktivieren...

Kannst du im OI einstellen, außerdem musst du noch die Eigenschaft ViewStyle auf vsReprort setzen und noch einen TListColumn hinzufügen. Gegebenenfalls kannst du noch ShowColumnHeaders deaktivieren.

busybyte 18. Feb 2008 18:30

Re: Per Befehl Checkbox erstellen
 
Delphi-Quellcode:
Listview1.Items[0].Checked:= true;//false;
oder

Delphi-Quellcode:
.
.
.
mycb[L1]:=TCheckbox.create(Form1);
try
 with mycb[L1] do
  begin
  Parent:=Listview1;//Scrollbox1;//Form1;
.
.
.

STS301 18. Feb 2008 19:24

Re: Per Befehl Checkbox erstellen
 
habe es jetzt so gemacht
Delphi-Quellcode:
type
  TForm6 = class(TForm)
    Label1: TLabel;
    Button1: TButton;
    ListView1: TListView;
    procedure Label1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    mycb:Array of TCheckbox;
    procedure mycbClick(Sender: TObject);
    { Public-Deklarationen }
  end;

var
  Form6: TForm6;

implementation

{$R *.dfm}

Procedure freeall;
Var L1,cnt1:integer;
begin
L1:=Length(Form6.mycb);
for cnt1 := 0 to L1 - 1 do
freeandnil(Form6.mycb[cnt1]);
end;


procedure TForm6.Label1Click(Sender: TObject);
var
  L1: integer;
begin
  L1:=Length(mycb);
  Setlength(mycb,L1+1);

mycb[L1]:= TCheckbox.Create(Form6);
try
with mycb[L1] do
  begin
    Parent := ListView1;
    Top := 27;
    Left := 16;
    Height := 17;
    Width := 97;
    Caption:= 'Klicken zum Eintragen';
    Name:= 'mybox';
    end;
except freeall
end;
  end;
end.
er zeigt mir aber an:

[DCC Fehler] Aufgabenzettel.pas(15): E2065 Ungenügende Forward- oder External-Deklaration: 'TForm6.mycbClick'

busybyte 18. Feb 2008 20:07

Re: Per Befehl Checkbox erstellen
 
Delphi-Quellcode:
type
  TForm6 = class(TForm)
    Label1: TLabel;
    Button1: TButton;
    ListView1: TListView;
    procedure Label1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    mycb:Array of TCheckbox;
    procedure mycbClick(Sender: TObject);
    { Public-Deklarationen }
  end;

var
  Form6: TForm6;

implementation

{$R *.dfm}

Procedure freeall;
Var L1,cnt1:integer;
begin
L1:=Length(Form6.mycb);
for cnt1 := 0 to L1 - 1 do
freeandnil(Form6.mycb[cnt1]);
end;


procedure TForm6.mycbClick(Sender: TObject);
begin
Shomessage('ich wurde angeklickt');
mycb[0].Caption:='ich bin checkbox 0';
end;



procedure TForm6.Label1Click(Sender: TObject);
var
  L1: integer;
begin
  L1:=Length(mycb);
  Setlength(mycb,L1+1);

mycb[L1]:= TCheckbox.Create(Form6);
try
with mycb[L1] do
  begin
    Parent := ListView1;
    Top := 27;
    Left := 16;
    Height := 17;
    Width := 97;
    Caption:= 'Klicken zum Eintragen';
    Name:= 'mybox';
    OnClick:=mycbClick; //<--- 
    end;
except freeall
end;
  end;
end.

end.
der Fehler bedeutet übrigens das eine procedure oder function die im Type oder Class angegeben wurde
weiter unten im Quelltext nicht als procedure oder function (mit begin end;) exisitert.

Die Listview wäre für Deine Zwecke auch geeignet,besitz aber keinen Editmode, (denkbar ist auch ein Stringgrid,das wiederum ohne
es selbst zu zeichnen, keine Checkbox zur Verfügung stellt),es sei denn, der selbstgebastelte Editmode
würde auf ein externes TEdit-Objekt verweisen,welches wiederum nach der Eingabe des Textes, das item.caption,bzw.subitem.text
der Listview ändert.

rawsoul 18. Feb 2008 20:21

Re: Per Befehl Checkbox erstellen
 
Vielleicht solltest du dir, bevor du größere Projekte angehst, die Delphi Grundlagen aneignen.

bitsetter 18. Feb 2008 20:44

Re: Per Befehl Checkbox erstellen
 
Zitat:

Zitat von busybyte
Die Listview wäre für Deine Zwecke auch geeignet,besitz aber keinen Editmode

Wenn du zweimal hintereinander (kein Doppelklick) auf ein Item im TListview klickst, dann erscheint ein Feld.
Ansonsten geht es auch mit Delphi-Referenz durchsuchenEditCaption manuell.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:59 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz