Wort erscheint nicht bei (Edit1-Text + "TEXT...") ???
-
FormCreate wird einmal und zwar beim Erzeugen deiner Form aufgerufen. Dabei setzt du den Inhalt von Diagnose1. Zu diesem Zeitpunk steht aber noch nichts in deinem Edit. Ein besserer Event wäre evtl. der OnExit des Editfeldes.
-
Wie könnte ich dann den Code schreiben ? Damit die Diagnosen erst nach der DiagnoseButton-Methode ausgeführt werden z.B. ?
MFG
-
Beschreib doch bitte mal mit Worten, wie Du Dir den Programmablauf vorgestellt hast.
-
Hallo,
ahja, funktioniert! Danke
MFG
Harry
-
Habs jetzt so gemacht:
int Anzahl; const int Max = 10; String Diagnose1[Max]; void __fastcall TForm1::DiagnoseButtonClick(TObject *Sender) { Anzahl = random(Max); if(Edit1->Text == "Hallo" || Edit1->Text == "Guten Tag") Panel1->Caption = Diagnose1[Anzahl]; } //========================================================================== void __fastcall TForm1::Edit1Exit(TObject *Sender) { randomize(); // 1 Diagnose1[0] = Edit1->Text + ",ebenfalls"; Diagnose1[1] = Edit1->Text + ", danke dir auch!"; Diagnose1[2] = "usw"; Diagnose1[3] = "usw"; Diagnose1[4] = "usw"; Diagnose1[5] = "usw"; Diagnose1[6] = "usw"; Diagnose1[7] = "usw"; Diagnose1[8] = "usw"; Diagnose1[9] = "usw"; }
-
Es reicht, wenn du das randomize einmal im Konstruktor deiner Form aufrufst (oder im OnCreate).
-
Nun ja, sei mir nicht böse, aber der Code gefällt mir überhaupt nicht. Wenn Du mal beschreibst, was Du genau erreichen möchtest, können wir Dir bestimmt ein paar nützliche Tipps geben.
-
ich würde das nicht mit einem button machen
und außerdem warum schreibst du nicht alles in die onexit rein?
(oder du fängst ein enter ab mit onkeydown)wäre vielleicht vom bedienen her einfacher anstatt erst noch ne button zu kicken

gruß
Multi

-
Hallo,
Ich will ein Programm erstellen, das wenn jmd. eine Text in die Komponente Edit eingibt und den DiagnoseButton betätigt, die Komponente Panel ein random Text ausgibt.. Wie könnte ich es besser machen ? - Gefällt mir au net so ganz..
MFG
-
Wenn doch nur ein zufälliger Text ausgegeben werden soll, warum dann die Prüfung, was eingegeben wurde? Wird diese Prüfung nur für 'Hallo' und 'Guten Tag' durchgeführt, oder für alles?
-
Hallo,
ja, eben nur für Hallo und Guten Tag - Wie könnte ich besser schreiben ?
MFG
-
Dann war Dein erster Ansatz schon der Bessere, da sich die auszugebenden Texte ja nicht ändern. Allerdings solltest Du besser auf OnCreate() und OnDestroy() verzichten und besser den Konstruktor und Destruktor des Forms verwenden. Auch sollte das Array nicht global sein, sondern ein Member des Forms. Allerdings brauchst Du gar kein Array. Für das, was Du vorhast ist eine TStringList geanau richtig, denn diese ist bereits ein Array aus Strings. Mit vielen nützlichen Funktionen. Solltest Du Dir unbedingt mal näher ansehen.
Die beiden ersten Einträge würde ich aus dem Array herausnehmen, da sie Sonderfälle darstellen und prinzipiell nichts mit dem Programmablauf zu tun haben. Du prüfst also einfach auf 'Hallo' und 'Guten Tag' und wenn das im Edit steht, fügst Du den Ausgabestring einfach von Hand zusammen, ohne das Array zu verwenden.
Wobei ich bei der Prüfung noch die AnsiString Methoden UpperCase() und AnsiPos() verwenden würde.
z.B.if (Edit1->Text.UpperCase().AnsiPos("HALLO")) == 1)Mit dieser Zeile prüfst Du, ob am Anfang des Strings im Edit Hallo steht, unabhängig davon, ob der User nur Großbuchstaben, oder nur Kleinbuchstaben, oder beides gemischt verwendet hat. Wenn das Hallo irgendwo im Edit stehen darf brauchst Du nur == 1 durch > 0 zu ersetzen. (Schau Dir bitte die Hilfe zu UpperCase und AnsiPos an.)
Versuch das mal umzusetzen.
-
Hi,
danke für den Tipp, dass mit dem Groß- und Kleinbuchstaben hätte ich wahrscheinlich auch net umsetzen können!
Das == 1 bedeutet also, dass die Buchstaben ob groß ob klein unterschiedlich in der Edit1-Komponente stehen können ?
MFG
-
Harry schrieb:
Das == 1 bedeutet also, dass die Buchstaben ob groß ob klein unterschiedlich in der Edit1-Komponente stehen können ?
Nö, der Text im Edit wird durch UpperCase() in Großbuchstaben gewandelt. Der Vegleich bezieht auf die Position des Wortes 'HALLO'. Bei == 1 muß er direkt am Anfang des Strings stehen, bei > 1 kann er irgendwo im String stehen. Genaueres findest Du in der Hilfe zu AnsiString::AnsiPos().
Grüße Joe_M.
-
Hallo
Nein der Vergleich auf == 1 hat nichts mit Groß/Kleinbuchstaben an sich zu tun.
Sondern das ist das Ergebnis der Methode AnsiString::AnsiPos.
Um die Operation zu verstehen must du die erstmal zerlegenEdit1->Text // Es wird der Inhalt des Edit-Controls kopiert .UpperCase() // Die Kopie wird so bearbeitet das alle Buchstaben in ihrer Großschriebweise sind .AnsiPos("HALLO") // In der bearbeiteten Kopie wird nach dem String "HALLO" gesucht ) == 1) // Überprüfung ob das Suchergebnis ergibt das der gesuchte String wirklich am Anfang des Edit-Wertes steht./Edit : zu langsam
bis bald
akari