Nach bestimmer Variable bestimme Aktion ausführen
Servus,
ich knüpfe an der Stelle an. Ich möchte, dass wenn der Zahlenwert im Label Zahl unter bspw. 3 ist, ein Bild sichtbar wird (Was vorher hidden ist). Wenn der Wert unter 6 liegt (Aber noch über 2) ein anderes usw.. Wie mache ich das? Hab schon mit if then probiert aber geht alles nicht :?. |
AW: Nach bestimmer Variable bestimme Aktion ausführen
Delphi-Quellcode:
EinBild.Visible := EineZahl < 3;
EinAnderesBild.Visible := (EineZahl > 2) and (EineZahl < 6); |
AW: Nach bestimmer Variable bestimme Aktion ausführen
Was hast du mit "if then probiert"?
Wenn was nicht geht, dann sollte man auch zeigen was nicht geht. Wobei ich wette, daß es doch geht. Einfach mal bauminas Code anhand deiner gewollten Beschreibung (sichtbar wird ... vorher hidden ist) umgebaut.
Delphi-Quellcode:
if EineZahl < 3 then
EinBild.Visible := True; if (EineZahl > 2) and (EineZahl < 6) then EinAnderesBild.Visible := True; |
AW: Nach bestimmer Variable bestimme Aktion ausführen
Am elegantesten löst du das mit einer Eigenschaft (
Delphi-Quellcode:
).
property
http://docwiki.embarcadero.com/RADSt.../Eigenschaften
Delphi-Quellcode:
Im OnCreate-Event der Form einfach noch
TMyForm = class( TForm )
Wert_Label : TLabel; Image1 : TImage; Image2 : TImage; private FWert : integer; procedure SetWert( const Value : Integer ); procedure PresentWert; public property Wert : Integer read FWert {Getter} write SetWert {Setter}; end; procedure TMyForm.SetWert( const Value : Integer ); begin if Value = FWert then Exit; FWert := Value; PresentWert; end; procedure TMyForm.PresentWert; begin Wert_Label.Caption := IntToStr( FWert ); Image1.Visible := ( FWert <= 2 ); Image2.Visible := ( FWert > 2 ) and ( FWert <= 5 ); end;
Delphi-Quellcode:
aufrufen und die Form ist passend vorbereitet.
PresentWert;
|
AW: Nach bestimmer Variable bestimme Aktion ausführen
Eventuell, wenn man nicht möchte oder sicherstellen kann, daß bereits in der DFM (Formdesigner) die richtigen Werte stehen (Text des Labels und Sichtbarkeit der anderen Dinge),
dann könnte man jetzt noch im OnCreate ebenfalls das PresentWert aufruft, womit die Oberfläche auch schon zu Beginn immer richtig dargestellt wird. (das trifft auch auf die aktiven Seiten von PageControls zu, die man bei der Entwicklung gern mal verstellt ... hier hätte ich mir ein alternatives "StartPage"-Property gewünscht) |
AW: Nach bestimmer Variable bestimme Aktion ausführen
Ok, mein Code schaut jetzt so aus:
Code:
Wenn ich 6/10 richtig hab, zeigt es mir jedoch statt Ok Schlecht an, wenn ich 10/10 richtig hab wird mir das Bild von Gut angezeigt.. ?
procedure TErgebnisse.FormActivate(Sender: TObject);
begin if n < 4 then Schlecht.Visible := True; if (n > 3) and (n < 7) then Ok.Visible := True; if (n > 6) and (n < 10) then Gut.Visible := True; if n = 10 then Perfekt.visible := True; end; |
AW: Nach bestimmer Variable bestimme Aktion ausführen
.. wie schaut es mit case aus?
Delphi-Quellcode:
Grüße
case n of
0..3 : Schlecht.Visible := True; 4..6 : Ok.Visible := True; 7..9 : Gut.Visible := True; 10 : Perfekt.visible := True; end; Klaus |
AW: Nach bestimmer Variable bestimme Aktion ausführen
Liegt das Schlecht zufällig "über" dem Ok drüber und verdeckt es somit?
Der Code von baumina und Sir Rufo stezen das visible nicht nur auf True, sondern auch auf false, wenn es nicht sichtbar ist.
Delphi-Quellcode:
Das würde dann Folgendem entsprechen und jetzt rade mal, was in deinem Code also noch fehlen würde. :angel:
Schlecht.Visible := n < 4;
Delphi-Quellcode:
@Klaus01: Vorher alles erstmal ausblenden.
if n < 4 then
Schlecht.Visible := True else Schlecht.Visible := False; (wenn der code mehrfach aufgerufen werden soll, bzw. wenn die Komponenten vorher noch sichtbar waren) |
AW: Nach bestimmer Variable bestimme Aktion ausführen
Du schaltest die Bilder ja auch nur an, und nicht wieder ab.
Wenn das gleiche Form jetzt mehrfach hintereinander angezeigt wird, dann sind irgendwann alle Bilder sichtbar, und es wird vermutlich das angezeigt, was zuvorderst liegt. Du solltest im Initialisierungs-Code entweder alle Bilder vorher auf visible := false setzen, oder folgendes machen:
Code:
procedure TErgebnisse.FormActivate(Sender: TObject);
begin Schlecht.Visible := n < 4; Ok.Visible := (n > 3) and (n < 7); Gut.Visible := (n > 6) and (n < 10); Perfekt.visible := n = 10; end; |
AW: Nach bestimmer Variable bestimme Aktion ausführen
Und es gibt noch eine weiter Möglichkeit, die man nciht unterschätzen sollte.
Es gibt nur ein Bild (TImage) auf der Form und der Code schaltet nun nicht die Sichtbarkeit, sondern läd das passende Bild dort rein. (aus Dateien oder besser noch aus den Resourcen oder einer ImageList) Macht das GUI-Design auch einfacher, wenn da nicht zigtausend Komponenten übereinander liegen. :stupid: |
AW: Nach bestimmer Variable bestimme Aktion ausführen
Kleiner Tip am Rand:
Pack den Code in eine eigene Methode und nicht direkt in das Event. Meistens stellt man fest, dass man diesen Teil von anderen Stellen auch noch aufrufen muss/möchte und dann ist copy/paste immer ein schlechter Berater.
Delphi-Quellcode:
procedure TErgebnisse.FormActivate(Sender: TObject);
begin PresentRatePictures; end; procedure TErgebnisse.PresentRatePictures; begin Schlecht.Visible := n < 4; Ok.Visible := (n > 3) and (n < 7); Gut.Visible := (n > 6) and (n < 10); Perfekt.visible := n = 10; end; |
AW: Nach bestimmer Variable bestimme Aktion ausführen
Ich hab die Bilder alle schon im voraus unter Visible -> False eingestellt.
Nichtsdestotrotz bekomme ich folgende Fehlermeldung: Fatal: Syntax error, ";" expected but "ELSE" found
Code:
Damit hab ich immer noch das selbe Probleme.
procedure TErgebnisse.FormActivate(Sender: TObject);
begin Schlecht.Visible := n < 4; Ok.Visible := (n > 3) and (n < 7); Gut.Visible := (n > 6) and (n < 10); Perfekt.visible := n = 10; end; Außerdem hab ich Schlecht ganz zurück gestellt, sodass Ok bspw. vorne liegen würde, jedoch krieg ich immer noch Schlecht angezeigt, obwohl 4/10 Ok anzeigen müsste. (9/10 zeigt zB. Ok an) |
AW: Nach bestimmer Variable bestimme Aktion ausführen
In dem Codeteil ist der Fehler nicht.
Zeig doch mal den gesamten Code und bitte, bitte benutze die
Code:
Tags für Delphi-Code
[DELPHI]
[/DELPHI] |
AW: Nach bestimmer Variable bestimme Aktion ausführen
Spätestens jetzt muss ich fragen wann denn die Variable n einen Wert bekommt.
|
AW: Nach bestimmer Variable bestimme Aktion ausführen
Erstmal ist eine (globale) Variable "n" nicht sonderlich aussagefähig, über ihre Funktion.
Zitat:
Zitat:
Und wann wird "n" gesetzt? |
AW: Nach bestimmer Variable bestimme Aktion ausführen
Zitat:
Zitat:
Zitat:
|
AW: Nach bestimmer Variable bestimme Aktion ausführen
Keine Lust auf Schnitzeljagd ... Ich klink mich aus.
|
AW: Nach bestimmer Variable bestimme Aktion ausführen
Zitat:
Delphi-Quellcode:
Ach da, ja da musst du einfach nur 42 in den Projekt-Optionen ankreuzen, dann geht es :roll:
procedure TErgebnisse.FormActivate(Sender: TObject);
begin Schlecht.Visible := n < 4; Ok.Visible := (n > 3) and (n < 7); Gut.Visible := (n > 6) and (n < 10); Perfekt.visible := n = 10; end; |
AW: Nach bestimmer Variable bestimme Aktion ausführen
42 ist wo & was.. ?
|
AW: Nach bestimmer Variable bestimme Aktion ausführen
Zitat:
|
AW: Nach bestimmer Variable bestimme Aktion ausführen
Fractal,
gemeint ist, dass du dich nicht nur deine Fehler hier posten sollst, sondern auch den passenden Code dazu. Zitat:
Delphi-Quellcode:
Zudem würde ich, wie auch bereits erwähnt, von den vier Labels wegkommen.
procedure TErgebnisse.FormActivate(Sender: TObject);
begin PresentRatePictures; end; procedure TErgebnisse.PresentRatePictures; begin Schlecht.Visible := n < 4; // 0, 1, 2, 3 Ok.Visible := (n > 3) and (n < 7); // 4, 5, 6 Gut.Visible := (n > 6) and (n < 10); // 7, 8, 9 Perfekt.visible := n = 10; // 10 end; Entweder ein einziges Label und bei der Ergebnisauswertung das Caption ändern, oder, wie ebenfalls bereits erwähnt, ein TImage nutzen und dann das passende Image (Ergebnis) aus einer TImageList laden. |
AW: Nach bestimmer Variable bestimme Aktion ausführen
Zitat:
Dann schaust Du Dir am besten auch nochmal im Detail an, wann überhaupt Dein FormActivate ausgeführt wird und ob Du den Code nicht vielleicht lieber zu einem anderen Zeitpunkt ausführen lassen würdest (z.B. nachdem die Ergebnisse ausgewertet wurden). |
AW: Nach bestimmer Variable bestimme Aktion ausführen
Der Link funktioniert wohl nicht ganz richtig, darum ein Zitat:
Zitat:
Gruß K-H |
AW: Nach bestimmer Variable bestimme Aktion ausführen
N müsste immer einen Wert erhöht werden, wenn der richtige Button (die richtige Antwort) angeklickt wurde.
Und den Code PresentRatePictures; (oder wie auch immer er bei dir heißt) würde ich ausführen, jedes Mal, wenn du auf einen Button klickst ODER nach dem Button-Klick der letzten Frage. |
AW: Nach bestimmer Variable bestimme Aktion ausführen
Ok, habs mit
Delphi-Quellcode:
gemacht und es kommt folgender Fehler.. :
procedure TErgebnisse.FormActivate(Sender: TObject);
begin PresentRatePictures; end; procedure TErgebnisse.PresentRatePictures; begin Schlecht.Visible := n < 4; // 0, 1, 2, 3 Ok.Visible := (n > 3) and (n < 7); // 4, 5, 6 Gut.Visible := (n > 6) and (n < 10); // 7, 8, 9 Perfekt.visible := n = 10; // 10 end;
Code:
Wenn auf den richtigen Button geklickt wird:
unit33.pas(23,25) Hint: Parameter "Sender" not used
unit33.pas(102,23) Error: Identifier not found "PresentRatePictures" unit33.pas(105,42) Error: method identifier expected unit33.pas(107,12) Error: Identifier not found "Schlecht" unit33.pas(108,6) Error: Identifier not found "Ok" unit33.pas(109,7) Error: Identifier not found "Gut" unit33.pas(110,11) Error: Identifier not found "Perfekt" unit33.pas(115) Fatal: There were 6 errors compiling module, stopping
Delphi-Quellcode:
Ja bin jetzt nur noch bei einem Label.
n := StrToIntDef(Ergebnisse.Zahl.caption, 0);
n := n + 1; Ergebnisse.Zahl.caption := IntToStr(n); |
AW: Nach bestimmer Variable bestimme Aktion ausführen
Wo ist der Fehler mit dem
Delphi-Quellcode:
?
else
Warum zeigst du nur Fragmente und nicht die gesamte Unit bzw. die beiden Units? Wieso muss man dir alles aus der Nase ziehen? Möchtest du, das wir dir helfen, oder ist dir nur langweilig? :wall: |
AW: Nach bestimmer Variable bestimme Aktion ausführen
Zitat:
Ich kenne die Fehlermeldungen von Lazurus (weg damit ...) nicht, aber du hast sicherlich vergessen GANZ OBEN IN DER UNIT IM PRIVATE-ABSCHNITT
Delphi-Quellcode:
zu deklarieren.
procedure PresentRatePictures;
Zitat:
Delphi-Quellcode:
?
Schlecht.Visible := n < 4; // 0, 1, 2, 3
Ok.Visible := (n > 3) and (n < 7); // 4, 5, 6 Gut.Visible := (n > 6) and (n < 10); // 7, 8, 9 Perfekt.visible := n = 10; // 10 |
AW: Nach bestimmer Variable bestimme Aktion ausführen
Grundlagen-Tutorial speziell OOP: http://www.delphi-treff.de/tutorials...rogrammierung/
|
AW: Nach bestimmer Variable bestimme Aktion ausführen
Der Vollständigkritshalber (nur für den Fall, dass es nicht bereits vorgeschlagen wurde):
Delphi-Quellcode:
Schlecht.Visible := n in [0..3];
Ok.Visible := n in [4..6]; Gut.Visible := n in [7..9]; Perfekt.visible := n in [10]; |
AW: Nach bestimmer Variable bestimme Aktion ausführen
Und um es noch komplizierter zu machen, da sich hier in diesem Thread sonst wohl nichts mehr tut:
Delphi-Quellcode:
Schlecht.Visible := (n = 0) or (n = 1) or (n = 2) or (n = 3);
Ok.Visible := (n = 4) or (n = 5) or (n = 6); Gut.Visible := (n = 7) or (n = 8) or (n = 9); Perfekt.visible := n = 10; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:23 Uhr. |
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