Hoi,
Weet iemand hoe ik een button kan maken terwijl m'n prog draait?
Het gaat dus om delphi..
thnx
Weet iemand hoe ik een button kan maken terwijl m'n prog draait?
Het gaat dus om delphi..
thnx
Verwijderd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| procedure maakwatzooi;
var dummy: TButton
begin
dummy:=TButton.create(form1);
dummy.parent:=form1;
dummy.caption:='Knopje 1';
dummy.show;
dummy.onclick:=onklickding;
dummy:=TButton.create(form1);
dummy.parent:=form1;
dummy.caption:='Knopje 2';
dummy.show;
dummy.onclick=onklickding;
end;
procedure onklickding(sender: TObject);
begin
showmessage('je klikte '+(sender as tbutton).caption+' aan');
end; |
"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney
1
2
3
4
5
6
7
8
9
10
11
12
13
| procedure makebutton(naam: String; hwnd: hwnd; pos: integer);
var dummy: TButton;
teller : integer;
begin
dummy := TButton.create(form1);
dummy.parent := form1;
dummy.Left := 100;
dummy.caption := WindowText(hwnd);
dummy.show;
dummy.Width := 100;
dummy.Top := 5;
//dummy.onclick := onklickding;
end; |
Ze gaan zo te zien niet weg.. maar je zet ze over elkaar heenOp dinsdag 18 september 2001 17:40 schreef hdd het volgende:
Ik heb er nu dit van gemaakt:
code:
1 2 3 4 5 6 7 8 9 10 11 12 13procedure makebutton(naam: String; hwnd: hwnd; pos: integer); var dummy: TButton; teller : integer; begin dummy := TButton.create(form1); dummy.parent := form1; dummy.Left := 100; dummy.caption := WindowText(hwnd); dummy.show; dummy.Width := 100; dummy.Top := 5; //dummy.onclick := onklickding; end;
Dat word met een loop aangeroepen, maar steeds als er 1 button bijkomt gaat de ander weg
Wat kan ik hieraan doen?
"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney
Verwijderd
VCL kent geen memoryleaks in controls doordat alle TComponent-derivants een Owner moeten hebben die verantwoordelijk is voor het vrijgeven. De uiteindelijke root-component is Application, die bij het beeindigen van je programma automatisch wordt weggeknikkerd (en dan recursief al z'n owned components meeneemt).Op dinsdag 18 september 2001 18:00 schreef Jelmer Barhorst het volgende:
Waarom zou je in hemelsnaam je referenties weg willen gooien? Denk dat het wel zo fijn is als je ook straks je zooi weer kan opruimen zodat je niet al het geheugen op gaat vreten.. zet je buttons dus in een array oid.
Verwijderd
Verwijderd
Beter bepaal je het gewoon, doormiddel van een ControlCount*ButtontWidth..Op dinsdag 18 september 2001 19:25 schreef The_Navigator het volgende:
Het enige wat je daar mee bereikt is dat "left" bij iedere aanroep 200 is! Wat je moet doen is in een globale variabele maken waarin je bijhoudt wat "left" is!
Verwijderd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| procedure AddButton(h: hwnd);
var
AButton: TButton;
begin
AButton := TButton.Create(Form1);
with AButton do begin
Width := 100;
Left := (ButtonList.Count + 1) * (Width + 5) - 5;
Top := 5;
Caption := WindowText(h);
Parent := Owner;
// OnClick := OnButtonClickHandler;
end;
ButtonList.Add(AButton);
end; |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
| { interface }
type
TButtonList = class(TList)
private
function GetItem(Index: integer): TButton;
public
property Items[Index: integer]: TButton read GetItem; default;
function ItemByCaption(ACaption: string): TButton;
procedure Clear; override; // wordt ook aangeroepen door de destructor
end;
{ implementation }
function TButtonList.GetItem(Index: integer): TButton;
begin
Result := nil;
if (Index >= 0) and (Index < Count) then
// geef als result een TButton terug i.p.v. een TObject,
// zodat je niet steeds hoeft te typecasten
Result := TButton(inherited Items[Index]);
end;
function TButtonList.ItemByCaption(ACaption: string): TButton;
var
i: integer;
begin
Result := nil;
for i := 0 to Count-1 do
if Items[i].Caption = ACaption then begin
Result := Items[i];
Break;
end;
end;
procedure TButtonList.Clear;
var
i: integer;
begin
// ruim de buttons in de lijst op
for i := Count-1 downto 0 do
Items[i].Free;
// laat de Clear van TList voor de rest zorgen
inherited;
end; |
Verwijderd
En als je het nu op een panel zet heb je een balk met knoppies (ook wel TToolbar genoemd..Op dinsdag 18 september 2001 21:22 schreef Afterlife het volgende:
Als je je buttons in een lijstje bijhoudt, is 't misschien wat simpeler...
code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15procedure AddButton(h: hwnd); var AButton: TButton; begin AButton := TButton.Create(Form1); with AButton do begin Width := 100; Left := (ButtonList.Count + 1) * (Width + 5) - 5; Top := 5; Caption := WindowText(h); Parent := Owner; // OnClick := OnButtonClickHandler; end; ButtonList.Add(AButton); end;
ButtonList is een globale variabele, en kan gewoon een simpele TList zijn. Of als je 't netjes wilt doen een afgeleide van TList, met wat extra slimmigheidjes:
code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45{ interface } type TButtonList = class(TList) private function GetItem(Index: integer): TButton; public property Items[Index: integer]: TButton read GetItem; default; function ItemByCaption(ACaption: string): TButton; procedure Clear; override; // wordt ook aangeroepen door de destructor end; { implementation } function TButtonList.GetItem(Index: integer): TButton; begin Result := nil; if (Index >= 0) and (Index < Count) then // geef als result een TButton terug i.p.v. een TObject, // zodat je niet steeds hoeft te typecasten Result := TButton(inherited Items[Index]); end; function TButtonList.ItemByCaption(ACaption: string): TButton; var i: integer; begin Result := nil; for i := 0 to Count-1 do if Items[i].Caption = ACaption then begin Result := Items[i]; Break; end; end; procedure TButtonList.Clear; var i: integer; begin // ruim de buttons in de lijst op for i := Count-1 downto 0 do Items[i].Free; // laat de Clear van TList voor de rest zorgen inherited; end;
Dit kun je zo mooi maken als jezelf wilt, bv. door de Add te overriden zodat 'ie alleen maar TButtons accepteert, etc., maar dat is aan je eigen fantasie en ideeen.
Erg handig als je tussendoor ook wilt checken (via een timer o.i.d.) of er misschien buttons zijn zonder bijbehorende window handle. Die kun je dan uit 't lijstje verwijderen (wel eerst de button free-en, kan mooi door de Delete te overriden), en de overgebleven buttons weer netjes te laten aansluiten. Kan ook goed in die Delete override, trouwens...
Verwijderd
Op dinsdag 18 september 2001 21:26 schreef cartman3380 het volgende:
En als je het nu op een panel zet heb je een balk met knoppies (ook wel TToolbar genoemd..)