Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Button dopellt belegen
Public Enemy - Mo 25.08.08 17:54
Titel: Button dopellt belegen
Hallo zusammen,
mein Problem ist folgendes und zwar mache ich ein Programm in dem es ein Button geben soll der 2 Aktionen durchführen soll. Also beim ersten mal drauf klicken soll alles (Buttons, Zeichenfelder) andere drumherum verschwinden und beim wiederholten male alles wieder sichtbar sein.
Zum verstecken der Objekte benutze ich ganz einfach
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.VersteckeGeklickt(Sender: TObject); begin
Knopf_Beenden.verstecke; Knopf_Berechnen.verstecke;
end; |
Wie man sie sichtbar machen würde mit einem zweiten Button wüsste ich. Aber nicht wie es geht wenn man zum wiederholten male auf einen drückt.
Hoffe ihr könnt mir helfen.
Gruß PE
Mike19 - Mo 25.08.08 17:59
Hallo,
teste doch einfach bei click, wie der Zustand der Felder ist (Visible False oder True). Danach kanns Du festlegen, wass geschehen soll.
Micha
Tilman - Mo 25.08.08 18:11
Knopf.verstecken gibt es normal ja nicht - entweder ist es Pseudocode oder du hast den Button abgeleitet. Egal, ich gehe mal davon aus dass der Button trotzdem eine Eigenschaft .visible hat:
Delphi-Quelltext
1:
| knopf.visible := not knopf.visible; |
Damit wird der Knopf abwechseln Sichtbar und unscihtbar gemacht, immer das Gegenteil von dem was er schon ist.
Allgemeiner würde es mit ner Zählvariable für die Zustände gehen, damit könnte man dann auch mehr als 2 Zustände unterscheiden.
Grüße,
tilman
Public Enemy - Mo 25.08.08 19:24
Tilman hat folgendes geschrieben: |
Knopf.verstecken gibt es normal ja nicht - entweder ist es Pseodocode oder du hast den Button abgeleitet. Egal, ich gehe mal davon aus dass der Button trotzdem eine Eigenschaft .visible hat:
Delphi-Quelltext 1:
| knopf.visible := not knopf.visible; |
Damit wird der Knopf abwechseln Sichtbar und unscihtbar gemacht, immer das Gegenteil von dem was er schon ist.
Allgemeiner würde es mit ner Zählvariable für die Zustände gehen, damit könnte man dann auch mehr als 2 Zustände unterscheiden.
Grüße,
tilman |
Danke für eure antworten.
Deine hat mir nun geholfen. Vielen Danke nochmal für eurer schnelle Hilfe. Bin noch ziemlich am Anfang mit Delphi daher kann es auch sein, dass ich mich nicht richtig ausdrücke.
Bin also natürlich offen für alle anderen Möglichkeiten bzw. Verbesserung meiner Fragestellung.
Ach ja und noch ne Frage ist es Möglich wenn mein Button von vornherein Verstecke heißt und ich drauf klick dort steht Anzeige?
Gruß PE
Narses - Mo 25.08.08 19:38
Moin und :welcome: im Forum!
Public Enemy hat folgendes geschrieben: |
| Bin also natürlich offen für alle anderen Möglichkeiten bzw. Verbesserung meiner Fragestellung. |
Wir haben auch einen
FAQ-Eintrag zu diesem Problem (Beispiel B) [
http://www.delphi-library.de/topic_AppState+Teil1_67969.html]. :les: ;)
//EDIT:
Public Enemy hat folgendes geschrieben: |
| Ach ja und noch ne Frage ist es Möglich wenn mein Button von vornherein Verstecke heißt und ich drauf klick dort steht Anzeige? |
Normalerweise gilt hier: Pro Thread nur eine Frage. Aber da du neu bist, machen wir mal eine Ausnahme: ;)
Klar geht das, einfach mit
Delphi-Quelltext
1:
| Button1.Caption := 'Neuer Titel des Buttons'; |
den Titel ändern. :idea:
cu
Narses
//EDIT: Link korrigiert (er mochte die Zahl nicht)
Hidden - Mo 25.08.08 19:44
Hi,
Ich hole mal meine Glaskugel raus. Vermutlich handelt es sich um ein Schulprojekt; ich durfte heute die kaputtgeänderte VCL-Umgebung an unseren Schulrechnern testen. Und dort haben die die Klassen auch abgeleitet und alles ins deutsche übersetzt, und die Komponenten dort haben meine ich diese Methode.
Imho absoluter blödsinn - zumal dann im Zentralabi wieder die englischen Begriffe gefragt sind. Auf den Lehrplänen steht aber erstmal: Kann keiner Englisch -> eindeutschen :(
gut, genug OT: Wenn ich dich richtig verstanden habe, 'tauschst' du im Moment die Buttons, hast also ständig einen visible und einen hidden.
Auch zu deinem Edit: Imho wäre es performanter, wenn du den Button umbenennst und die Methode auswechselst:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.Button1Click1(Sender: TObject); begin Button1.Caption := 'Verstecken'; Button1.OnClick := Button1Click2; end;
procedure TForm1.Button1Click2(Sender: TObject); begin Button1.Caption := 'Ausklappen'; Button1.OnClick := Button1Click1; end; |
Zu deinem Edit: die Eigenschaft 'Caption' enthält die Aufschrift des Buttons ;)
mfG,
Public Enemy - Mo 25.08.08 20:04
Okay Sry wegen den 2 Frage in diesen Thread werde ich mir merken für das nächste mal ;-)
Und ja es handelt sich um ein Schulprojekt.Glaube ist auch erstmal uninteressant was es ist für meine Fragen (glaube ich?? Ja müsste :-))
Das zu den Buttons es geht darum Das der eine Button immer sichtbar ist und dises wird genutzt um alles andere drumherum zu verstecken und wieder sichtbar zu machen. Aber diese Pro ist ja gelöst.
Natürlich verstehe ich nicht wie es hiermit geht
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.Button1Click1(Sender: TObject); begin Button1.Caption := 'Verstecken'; Button1.OnClick := Button1Click2; end;
procedure TForm1.Button1Click2(Sender: TObject); begin Button1.Caption := 'Ausklappen'; Button1.OnClick := Button1Click1; end; |
Ich möchte dir mal meinen ganzen Code zeigen.
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:
| unit mForm_fibfak;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, mEtikett, mTextfeld, mKnopf, mZeilenbereich, mZeichenbereich;
type TForm1 = class(TForm) Knopf_Fibonacci: TKnopf; Knopf_Fakultaet: TKnopf; Knopf_Loeschen: TKnopf; Knopf_Verstecken: TKnopf; Knopf_Beenden: TKnopf; Textfeld_Eingabe: TTextfeld; Etikett_Eingabefeld: TEtikett; Zeichenbereich_Boom: TZeichenbereich; Zeilenbereich_Bam: TZeilenbereich; procedure Knopf_Beendengegklickt(Sender: TObject); procedure Knopf_VersteckenGeklickt(Sender: TObject); private public end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Knopf_Beendengegklickt(Sender: TObject); begin self.close; end;
procedure TForm1.Knopf_VersteckenGeklickt(Sender: TObject); begin
Etikett_Eingabefeld.visible := not Etikett_Eingabefeld.visible; Knopf_Beenden.visible := not Knopf_Beenden.visible; Knopf_Fakultaet.visible := not Knopf_Fakultaet.visible; Knopf_Fibonacci.visible := not Knopf_Fibonacci.visible; Knopf_Loeschen.visible := not Knopf_Loeschen.visible; Textfeld_Eingabe.visible := not Textfeld_Eingabe.visible; Zeilenbereich_Bam.visible := not Zeilenbereich_Bam.visible; Zeichenbereich_Boom.visible := not Zeichenbereich_Boom.visible;
end;
end. |
Wie man sieht kann man das Programm beenden mit einem Knopfdruck und man kann Sachen verstecken und anzeigen lassen.
Das erste was ich machen würde jetzt nach deinem Post wäre es ins Englische zu packen richtig?
Hidden - Mo 25.08.08 20:11
| Narses Link hat folgendes geschrieben: |
Allgemeiner Fehler
Not Found
Die Seite, die Du aufgerufen hast, ist auf unserem Delphi-Library.de Server nicht vorhanden.
Benutze doch einfach die Suchfunktion um eine passende Seite zu finden.
|
Sollte da wieder wer branch verlinkt haben oder so? ;)
@2 Fragen: Imho ist das ein Konzeptänderungsvorschlag, an dem auch anderen, die dieser Thread weiterbruingen sollte, helfen dürfte.
mfG,
Moderiert von
Narses: Link korrigiert
Narses - Mo 25.08.08 20:21
Moin!
Hidden hat folgendes geschrieben: |
| Sollte da wieder wer branch verlinkt haben oder so? ;) |
Nein nein, da hat uns Jemand inzwischen eine "Lösung" gebastelt... ;)
Beim Link-Hint-Text darf keine weitere Zahl alleine stehen. :idea: Habs korrigiert.
cu
Narses
Delete - Mo 25.08.08 22:49
wieso möchtest denn zwei buttons? nenn sie doch einfach nach dem klick um ... :-)
PS: sollt auch in .NET gehen ;-)
Public Enemy - Di 26.08.08 15:22
Grenzgaenger hat folgendes geschrieben: |
wieso möchtest denn zwei buttons? nenn sie doch einfach nach dem klick um ... :-)
PS: sollt auch in .NET gehen ;-) |
so war es auch gedacht wenn ich draufgeklickt habe, das es den Namen ändert also den Angezeigten.
Achso ich erstelle alles unter Delphi 6.
Danke für dei obigen Beiträge mach mich sofort wieder ran ;-)
Delete - Di 26.08.08 21:47
tja, dann gehts doch einfach...
im onClick event einfach schreiben
Delphi-Quelltext
1:
| myButton.caption := 'myNewLabel'; |
und schon hast du es gelöst ... ggf, kannst du das mit dem tag eintrag noch koppeln ... :-)
<HTH> GG
Public Enemy - Di 26.08.08 22:32
Habe das so eingetragen. Gibt auch keinen Fehler aus, aber er macht es einfach nicht wenn ich druff klicke.
Bzw. Keine Ahnung ob ich es an der richtigen Stelle eingetragen habe. Habe noch nie was von onClick event gehört xD
Denke aber dass es das ist wenn ich auf den Button doppel klicke und dann in der Prozedur bin?
Hidden - Mi 27.08.08 13:09
Public Enemy hat folgendes geschrieben: |
| Denke aber dass es das ist wenn ich auf den Button doppel klicke und dann in der Prozedur bin? |
Jap, sollte die OnClick-prozedur sein :gruebel:
Meine Galskugel ist leider in letzter Zeit etwas stumpf geworden, ich polier die dann später mal :roll:
Am besten ist es wohl, du hängst einmal das gesammte Projekt ohne Exe als Archiv an.
mfG,
Public Enemy - Mi 27.08.08 15:07
Hier ist der ganze Ordner ohne meine EXE.
Ich hoffe man kann dadurch schauen.
Sorry habe nicht gesehen wo es war. Es sei mir verziehen.
mfg
PE
Timosch - Mi 27.08.08 15:15
Bitte
anhängen. Dazu gibt es die Option "Dateianhang hinzufügen", wenn du einen Beitrag schreibst.
Hidden - Mi 27.08.08 19:37
Hi,
Als erstes kannst du deinem Lehrer(?) mal gratulieren: Durch die Verwendung eurer übersetzten Komponenten ist der VCL-Teil inkompatibel geworden, das haben sie toll hinbekommen(!)^^. Weiß, dass das leider ziemlich verbreitet ist, denke aber mal du kannst ihn überzeugen, dass ihr englsich könnt ;)
Punkt 1: Du erzeugst im Formcreate eine Instanz einer Klasse 'Fibo'. Diese solltest du von der Theorie her im FormDestroy auch wieder freigeben.
Punkt 2: Die von dir genannten Änderungen(Caption, das dürfte dann bei euch nirgendwie 'Aufschrift' heißen) sind in der angehängten Version nicht implementiert ;).
Müsste dann hier sein:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TForm1.Knopf_VersteckenGeklickt(Sender: TObject); begin Etikett_Eingabefeld.visible := not Etikett_Eingabefeld.visible; Knopf_Beenden.visible := not Knopf_Beenden.visible; Knopf_Fakultaet.visible := not Knopf_Fakultaet.visible; Knopf_Fibonacci.visible := not Knopf_Fibonacci.visible; Knopf_Loeschen.visible := not Knopf_Loeschen.visible; Textfeld_Eingabe.visible := not Textfeld_Eingabe.visible; Zeilenbereich_Bam.visible := not Zeilenbereich_Bam.visible; Zeichenbereich_Boom.visible := not Zeichenbereich_Boom.visible; end; |
mfG,
Public Enemy - Mi 27.08.08 19:48
Hidden hat folgendes geschrieben: |
Hi,
Als erstes kannst du deinem Lehrer(?) mal gratulieren: Durch die Verwendung eurer übersetzten Komponenten ist der VCL-Teil inkompatibel geworden, das haben sie toll hinbekommen(!)^^. Weiß, dass das leider ziemlich verbreitet ist, denke aber mal du kannst ihn überzeugen, dass ihr englsich könnt ;)
Punkt 1: Du erzeugst im Formcreate eine Instanz einer Klasse 'Fibo'. Diese solltest du von der Theorie her im FormDestroy auch wieder freigeben.
Punkt 2: Die von dir genannten Änderungen(Caption, das dürfte dann bei euch nirgendwie 'Aufschrift' heißen) sind in der angehängten Version nicht implementiert ;). Müsste dann hier sein: 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TForm1.Knopf_VersteckenGeklickt(Sender: TObject); begin Etikett_Eingabefeld.visible := not Etikett_Eingabefeld.visible; Knopf_Beenden.visible := not Knopf_Beenden.visible; Knopf_Fakultaet.visible := not Knopf_Fakultaet.visible; Knopf_Fibonacci.visible := not Knopf_Fibonacci.visible; Knopf_Loeschen.visible := not Knopf_Loeschen.visible; Textfeld_Eingabe.visible := not Textfeld_Eingabe.visible; Zeilenbereich_Bam.visible := not Zeilenbereich_Bam.visible; Zeichenbereich_Boom.visible := not Zeichenbereich_Boom.visible; end; |
mfG, |
Hmm also ihn zu überzeugen klappt wohl nicht. Kann man eben nichts dran ändern leider -.-
Also zu Punkt 1. ich verstehe nichts von dem! Ich könnte nur vermuten was gemeint ist aber diese Wörter habe ich noch nie gehört.
Punkt 2. Joar habe ich schon gesucht ob es sowas gibt. Das einzige was funzt ist wenn ich self. mach dann zeigt D mir auch cption an.
Zu dem unteren Kommentar genau es heißt bei uns Wahrheitswert. Was meinst du mit Aufschrift.
Sorry für die ganzen Umstände, aber ich komme mir gerade echt bescheuert und nichts wissend vor. :roll:
Hidden - Mi 27.08.08 20:15
Public Enemy hat folgendes geschrieben: |
| Sorry für die ganzen Umstände, aber ich komme mir gerade echt bescheuert und nichts wissend vor. :roll: |
Sry, das war nicht meine Absicht :(
Wenn ich das richtig sehe(Stand Delphi 4, NRW(EG Lippstadt)) habt ihr mehrere Reiter und arbeitet im Unterricht mit einem, der 'Schule' heißt. Auf anderen Reitern befinden sich die 'normalen', englischsprachigen Komponenten. Das nur so als Randinformation, will dich hier keinesfalls animieren, dich mit deinem Lehrer über D/E-Unterricht zu streiten^^ :zwinker:
Zu Punkt 1: Eine Klasse ist eine Datenstruktur, von der sogenannte Instanzen erzeugt werden müssen(ursprünglich eine fehlübersetzung des englischen 'instance', hat sich inzwischen eingebürgert). Für andere Datentypen wie Integer(Zahl? :autsch:) oder Boolean wird automatisch speicher angefordert. Instanzen von Klassen musst du selbst erzeugen und freigeben(Speicher anfordern und wieder freigeben). Vergisst du die Freigabe, entstehen sogenannte 'Speicherlöcher'. Das ist Speicher, der zwar nichtmehr verwendet, aber auch nicht wieder freigeben wurde. Der Speicherverbrauch deines Programms wird dann immer größer und das ist nun wirklich unpraktisch ;).
Zu Punkt 2: 'self' bezieht sich auf das ausführende Objekt(Instanz einer Klasse). In deinem Fall ist das Form1(Instanz der Klasse TForm1. Also stets die Klasse vor dem Prozedurnamen - "procedure
TForm1.Knopf_VersteckenGeklickt").
mfG,
Public Enemy - Mi 27.08.08 21:22
Ach für dieses Gefühl könnt ihr ja nichts. Ist ja eben so ;-)
Also wir arbeiten mit Delphi 6 und das mit dem Reiter stimmt. Dieser heisst bei uns SuM. Ach wegen Streit braucht ihr keine Sorgen machen wir haben uns immer in den Haare ;-)
Randinformationen finde ich ganz nützlich. Denn ich weiss ja garnicht wie ein reines Delphi aussieht xD
Okay habe es nun verstanden. Ich werde mich auf jeden Fall noch mit Delphi auseinander setzen. Diese Aufgabe gab mir einen kleinen Ruck. Also ich habe morgen Info und lasse mich dann mal überraschen was mein Lehrer sagt zu dem was ich bis jetzt auf die Bein gestellt habe mit eurer Hilfe. Vorallem wie er das löscht :?:
Ich werde mich dann bezüglich diesem Themas melden und die Lösung (falls es eine geben wird) Posten.
Nochmla Danke für die ganzen Hilfe hier.
Public Enemy - Sa 30.08.08 19:44
Sorry für Doppel Post, aber ich habe nun eine andere Delphi Version und einen Code den ich geschickt bekommen habe welcher auch halb funktioniert.
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.Button2Click(Sender: TObject); begin if Button2.Caption ='Verschwinden' then begin Edit1.Visible:=False; Edit2.Visible:=False; Button1.Visible:=False; Button2.Caption:='Zeigen'; exit; end; if Button2.Caption = 'Zeigen' then begin Edit1.Visible:=True; Edit2.Visible:=True; Button1.Visible:=True; Button2.Caption:='Verschwinden'; exit; end; end;
end. |
So wollte nun an dieser Stelle etwas anderes stehen haben und habe es ausgetauscht.
Button2.Caption:='Verschwinden';
Aber danach funktioniert es nicht mehr. Ich habe keine Ahnung wieso. Vielleicht könnt ihr nochmla gucken.
Gruß PE
Hidden - Sa 30.08.08 20:05
Hi,
Ich hab das mal etwas übersichtlicher geschrieben und berichtigt:
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:
| procedure TForm1.SetzeSichtbarkeit(aVis: Wahrheitswert); begin Edit1.Visible := aVis; Edit2.Visible := aVis; Button1.Visible := aVis; end;
procedure TForm1.Button2Click(Sender: TObject); var KomposSichtbar: WAHRHEITSWERT; begin if Button2.Caption ='Verschwinden' then begin SetzeSichtbarkeit(FALSCH); Button2.Caption := 'Zeigen'; end else begin if Button2.Caption = 'Zeigen' then begin SetzeSichtbarkeit(WAHR); Button2.Caption := 'Verschwinden'; end; end; KomposSichtbar := Button2.Caption = 'Zeigen'; SetzeSichtbarkeit(KomposSichtbar); if KomposSichtbar then Button2.Caption = 'Verstecken' else Button2.Caption = 'Zeigen'; end; |
So, ich hab jetzt mal eurem Lehrer zu liebe sein Konzept nicht zerstört. 'WAHR' ist true, 'FALSCH' entsprechend false..
Zu deinem Problem: Meine Glaskugel hat leider einen Sprung. etwas verschwommen kann ich trotzdem erkennen, dass du immernoch auf die alte Caption prüfst, aber nun eine andere Schreibst ;) Auch könntest du auf Groß- und Kleinschreibung nicht geachtet haben.
mfG,
Public Enemy - Sa 30.08.08 23:05
Vielen Dank es geht jetzt Juhuu. Und nur wegen eurer Unterstützung.
Falls ihr es sehen wollt hier mein Ergebnis. Kann nun geclosed werden.
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!