Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - newbie frage, variablen ?
bossi - So 07.09.03 16:44
Titel: newbie frage, variablen ?
hi zusammen,
bin das erste mal mit delphi zu gange und pascall hatte ich auch noch nicht. also ich habe mal ein kleines fenter mit 1 button und 1 panel. klick ich nun auf den button, soll das panel verstekct oder angezeigt werden. aber das haut nicht hin, muss an meiner variable liegen :lol:
hier mal ein teil von der procedure buttonclick :
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TForm1.Button1Click(Sender: TObject); var i : Integer; begin i := 0; if i = 0 then Panel1.Visible := false; i := 1;
if i = 1 then Panel1.Visible := true; i := 0;
end; |
also (i) ist nun (0) ? somt soll bei der if-abfrage das panel versteckt werden.
bye
bossi
Moderiert von
Tino: Code- durch Delphi-Tags ersetzt.
matze - So 07.09.03 16:53
mach es so:
Delphi-Quelltext
1: 2: 3: 4:
| if panel1.visible then panel1.visible := false else panel1.visible := true; |
zu deinem code:
du hast hinter deinem then kein begin. also wird nur die nächste zeile nach dem then ausgeführt, wenn die if anweisung gecheckt wird.
Christian S. - So 07.09.03 16:54
Hallo und herzlich Willkommen im Forum!
Zuerst einmal, weshalb es so nicht klappt:
(1) i ist lokal deklariert. Sobald die Prozedur beendet ist, gehen alle Informationen über i verloren. Wird also der Button das nächste mal betätigt, gibt es keinerlei Information darüber, welchen Wert i beim letzen Klick hatte
(2) Selbst wenn diese Information vorhanden wäre, würdest Du sie ja mit i:=0 (ganz am Anfang) überschreiben.
So, und wie macht man es nun? So:
Delphi-Quelltext
1: 2: 3: 4:
| procedure TForm1.Button1Click(Sender: TObject); begin Panel1.Visible := not Panel1.Visible; end; |
Panel1.Visible ist ein Boolean und mit "not" kann ich den Wert eines Boolean (also Wahrheitswertes) umkehren. Sozusagen das "-1 mal" der Wahrheitswerte. ;-) Und genau das ist es ja. Wenn sichtbar, soll es
nicht sichtbar sein; wenn nicht sichtbar, soll es sichtbar (=
nicht nicht sichtbar) sein.
Wenn Du es jedoch mit Deinen Variablen machen willst, dann solltest Du Dich mal mit dem Unterschied zwischen
globalen und
lokalen Variablen beschäftigen.
Hoffe, geholfen zu haben!
MfG
Peter
P.S.: Könntest Du demnächst statt den Code- die Delphi-Tags verwenden? Danke!
//edit: Matze war zwar schneller, aber dafür ist mein Code kürzer und mein Text länger! :mrgreen:
bossi - So 07.09.03 17:28
hallo euch beiden,
schönen dank für eure vorschläge :D
das geht ja richtig schnell hier :shock: , das mit dem delphi-tags habe ich nicht so gesehen.
das mit dein tip @peter lustig haut ja supi hin, allerdings funzt das wohl nicht mehr wen ich 3 button und 3 panel habe.
klick ich auf button 1 versteck panel 2+3
klick ich auf button 2 versteck panel 1+3
klick ich auf button 3 versteck panel 1+2
dann muss ich wohl mit vareablen arbeiten oder ?
mfg
bossi
Christian S. - So 07.09.03 18:03
Hallo!
Hm, das sind ja noch nicht so viele Panels. Da kann man das dann ganz einfach so lösen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure TForm1.setPanel(index : Integer); begin panel1.Visible := (index = 1); panel2.Visible := (index = 2); panel3.Visible := (index = 3); end;
procedure TForm1.Button1Click(Sender : Tobject); begin setPanel(1); end;
procedure TForm1.Button2Click(Sender : Tobject); begin setPanel(2); end;
procedure TForm1.Button3Click(Sender : Tobject); begin setPanel(3); end; |
Die Prozedur "setPanel" musst Du dann noch im Public-Bereich der Form-Deklaration eintragen. Die sollte dann hinterher so aussehen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| type TForm1 = class(TForm) Button1: TButton; Panel1: TPanel; Panel2: TPanel; Panel3: TPanel; Button2: TButton; Button3: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); private public procedure setPanel(index : INteger); end; |
MfG
Peter
bossi - So 07.09.03 18:39
hi peter,
habe es so gemacht und es kamm nur :
click button1 = panel 2+3 wech (ist OK)
click button2 = passiert nix :?:
click button3 = passiert nix :?:
dann sigst du es sind ja nur 3, es könnten aber ein paar mehr werden.
das ist jetzt nur so ein beispiel gewesen, was währe dann die andere möglichkeit :!:
Christian S. - So 07.09.03 18:42
Hm, das wundert mich. :nixweiss: Bitte poste doch mal Deinen Code!
bossi - So 07.09.03 18:44
Delphi-Quelltext
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: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls;
type TForm1 = class(TForm) Button1: TButton; Panel1: TPanel; Panel2: TPanel; Panel3: TPanel; Button2: TButton; Button3: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); private public procedure setPanel(index : INteger); end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.setPanel(index : Integer); begin panel1.Visible := (index = 1); panel2.Visible := (index = 2); panel3.Visible := (index = 3); end;
procedure TForm1.Button1Click(Sender : Tobject); begin setPanel(1); end;
procedure TForm1.Button2Click(Sender : Tobject); begin setPanel(2); end;
procedure TForm1.Button3Click(Sender : Tobject); begin setPanel(3); end;
end. |
matze - So 07.09.03 20:03
@peter: an die negation hab ich gar nicht gedacht !!! peinlich peinlich
Christian S. - So 07.09.03 23:20
@matze: macht ja nichts.
@bossi: sind die OnClick-Ereignisse der Button2 und Button3 auch Button2Click und Button3Click zugeordnet? Oder hast Du den Code nur aus dem Forum in Dein Projekt kopiert?
MfG
Peter
bossi - Mo 08.09.03 07:34
moin moin,
ja habe ich nur rein kopiert :lol:
habe nun bei onclick die sache angegeben und siehe da, es fuzt wunderbar :D
danke für deine geduld :)
gruß
bossi
Christian S. - Mo 08.09.03 09:42
| bossi hat folgendes geschrieben: |
| danke für deine geduld |
Gern geschehen. Dazu sind wir doch hier!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!