![]() |
String ausgeben
Hallo Leute,
ich bin noch ein "Anfänger" in Delphi und komme gerade nicht wirklich weiter, weil ich den Fehler in einer Procedure nicht findet. Ich versuche ein einfachen Vokabeltrainer zu erstellen. Man kann jeweils 12 Wörter eintragen (pro Sprache) und diese sollen dann auf einem extra Panel in 2 Edit Felder abgefragt werden. Nun ist mein erstes Problem, dass nach dem man auf den Button "Start" klickt, keine Wörter auf den Editorfelder ausgeben werden. Die gesamte Procedure lautet:
Delphi-Quellcode:
Kann mir jemand helfen?
var d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,e1,e2,e3,e4,e5,e6,e7,e8,e9,e10,e11,e12:string;
zufalldeutsch,zufallenglisch:integer; procedure TForm1.ButtonstartClick(Sender: TObject); begin if deutsch1.text='' then begin showmessage('Bitte alle Felder ausfüllen'); exit; end; if deutsch2.text='' then begin showmessage('Fehler'+'Bitte alle Felder ausfüllen'); exit; end; if deutsch3.text='' then begin showmessage('Fehler'+'Bitte alle Felder ausfüllen'); exit; end; if deutsch4.text='' then begin showmessage('Fehler'+'Bitte alle Felder ausfüllen'); exit; end; if deutsch5.text='' then begin showmessage('Fehler'+'Bitte alle Felder ausfüllen'); exit; end; if deutsch6.text='' then begin showmessage('Fehler'+'Bitte alle Felder ausfüllen') ; exit; end; if deutsch7.text='' then begin showmessage('Fehler'+'Bitte alle Felder ausfüllen') ; exit; end; if deutsch8.text='' then begin showmessage('Fehler'+'Bitte alle Felder ausfüllen') ; exit; end; if deutsch9.text='' then begin showmessage('Fehler'+'Bitte alle Felder ausfüllen') ; exit; end; if deutsch10.text='' then begin showmessage('Fehler'+'Bitte alle Felder ausfüllen') ; exit; end; if deutsch11.text='' then begin showmessage('Fehler'+'Bitte alle Felder ausfüllen') ; exit; end; if deutsch12.text='' then begin showmessage('Fehler'+'Bitte alle Felder ausfüllen') ; exit; end; if englisch1.text='' then begin showmessage('Fehler'+'Bitte alle Felder ausfüllen') ; exit; end; if englisch2.text='' then begin showmessage('Fehler'+'Bitte alle Felder ausfüllen') ; exit; end; if englisch3.text='' then begin showmessage('Fehler'+'Bitte alle Felder ausfüllen') ; exit; end; if englisch4.text='' then begin showmessage('Fehler'+'Bitte alle Felder ausfüllen') ; exit; end; if englisch5.text='' then begin showmessage('Fehler'+'Bitte alle Felder ausfüllen') ; exit; end; if englisch6.text='' then begin showmessage('Fehler'+'Bitte alle Felder ausfüllen') ; exit; end; if englisch7.text='' then begin showmessage('Fehler'+'Bitte alle Felder ausfüllen') ; exit; end; if englisch8.text='' then begin showmessage('Fehler'+'Bitte alle Felder ausfüllen') ; exit; end; if englisch9.text='' then begin showmessage('Fehler'+'Bitte alle Felder ausfüllen') ; exit; end; if englisch10.text='' then begin showmessage('Fehler'+'Bitte alle Felder ausfüllen') ; exit; end; if englisch11.text='' then begin showmessage('Fehler'+'Bitte alle Felder ausfüllen') ; exit; end; if englisch12.text='' then begin showmessage('Fehler'+'Bitte alle Felder ausfüllen') ; exit; end; panel1.visible:=true; d1:=deutsch1.text; d2:=deutsch2.text; d3:=deutsch3.text; d4:=deutsch4.text; d5:=deutsch5.text; d6:=deutsch6.text; d7:=deutsch7.text; d8:=deutsch8.text; d9:=deutsch9.text; d10:=deutsch10.text; d11:=deutsch11.text; d12:=deutsch12.text; e1:=englisch1.text; e2:=englisch2.text; e3:=englisch3.text; e4:=englisch4.text; e5:=englisch5.text; e6:=englisch6.text; e7:=englisch7.text; e8:=englisch8.text; e9:=englisch9.text; e10:=englisch10.text; e11:=englisch11.text; e12:=englisch12.text; zufalldeutsch:=random(1-12); If zufalldeutsch=1 then begin editdeutsch.text:=d1; editenglisch.text:=e1; end else If zufalldeutsch=2 then begin editdeutsch.text:=d2; editenglisch.text:=e2; end else If zufalldeutsch=3 then begin editdeutsch.text:=d3; editenglisch.text:=e3; end else If zufalldeutsch=4 then begin editdeutsch.text:=d4; editenglisch.text:=e4; end else If zufalldeutsch=5 then begin editdeutsch.text:=d5; editenglisch.text:=e5; end else If zufalldeutsch=6 then begin editdeutsch.text:=d6; editenglisch.text:=e6; end else If zufalldeutsch=7 then begin editdeutsch.text:=d7; editenglisch.text:=e7; end else If zufalldeutsch=8 then begin editdeutsch.text:=d8; editenglisch.text:=e8; end else If zufalldeutsch=9 then begin editdeutsch.text:=d9; editenglisch.text:=e9; end else If zufalldeutsch=10 then begin editdeutsch.text:=d10; editenglisch.text:=e10; end else If zufalldeutsch=11 then begin editdeutsch.text:=d11; editenglisch.text:=e11; end else If zufalldeutsch=12 then begin editdeutsch.text:=d12; editenglisch.text:=e12; end; Danke! |
AW: String ausgeben
überleg dir bitte, was dabei rauskommen soll:
Delphi-Quellcode:
wohl eher
zufalldeutsch:=random(1-12);
Delphi-Quellcode:
(wenn ich mich nicht täusche)
zufalldeutsch:=random(12);
|
AW: String ausgeben
Aber wenn ich die Variablen sehe, schreit das gerade zu nach einem Array oder Liste.
|
AW: String ausgeben
Zitat:
erst mal soll sein vorhandenes funktionieren - danach kann man optimieren (lernen) |
AW: String ausgeben
Gegenfrage: wird
Delphi-Quellcode:
ausgeführt?
showmessage
und sieh Dir mal
Delphi-Quellcode:
an.
case
Gruß K-H |
AW: String ausgeben
Und warum liegen alle Variablen global rum und sind nicht lokal in der Methode deklariert?
Den Sinn der d- und e-Variablen kann ich auch nicht erkennen.
Delphi-Quellcode:
Das mit den Arrays wurde schon gesagt
If zufalldeutsch=1 then
begin editdeutsch.text:=deutsch1; editenglisch.text:=englisch1; end else If zufalldeutsch=2 then und für die Edits gibt es FindComponent. (was auch das vorgeschlagene CASE überflüssig machen würde) Und die (fehlende) Codevormatierung ist eher als grausam zu bezeichnen. |
AW: String ausgeben
Zitat:
Delphi-Quellcode:
// Random(n) gibt eine Zahl zwischen 0 und n-1 zurück
zufalldeutsch:=random(12) + 1; @DelphiDan: Das Textfeld bleibt leer, weil keiner deiner Bedingungen in deinem if-then-else "Monster" zutrifft. |
AW: String ausgeben
Ich glaub da war was:
Zitat:
DelphiDan, versuch erstmal den ersten Teil mit einer oder-Verknüpfung zu minimieren (Du musst es noch nicht mit FindComponent machen):
Delphi-Quellcode:
Und dann kannst du weitermachen mit der
if (deutsch1.text = '') or (deutsch2.text = '') or ... or (englisch11.text = '') or (englisch12.text = '') then
ShowMessgae('...') else begin // Hier kommt der Teil ab dem "panel1.visible := false" rein panel1.visible := false; {...} end;
Delphi-Quellcode:
-Anweisung
case
Delphi-Quellcode:
Das wird übersichtlicher und einfacher für dich.
case zufallszahl of
1: begin // Hier kommt die Zuweisung dann rein editdeutsch.text:=d1; editenglisch.text:=e1; end; 2: begin // Hier kommt die Zuweisung dann rein end; {...} end; Beste Grüße Puke |
AW: String ausgeben
Zitat:
Delphi-Quellcode:
wäre zwar eine schönere Krücke, aber erst mit Schleifen bekommt man ein Großteil der Wiederholungen erschlagen.
case
Es ist halt wirklich "Anfängercode", aber das ist OK für einen Anfänger ... nur möchte man sich eben auch weiterentwickeln und die Kritik in der DP ist dafür aus meiner Erfahrung ein günstiges Mittel. Im Prinzip schreibt jeder mal "gruseligen" Code; die entscheidende Fähigkeit ist es zu erkennen, dass und warum er "gruselig" ist. Es hilft, wenn man es oft genug gesagt bekommt. Reviewed (~kritisiert) wird der Code, nicht der Programmierer. In dem Sinne: nicht abschrecken lassen von den Alt-Eingesessenen, wir wollen nur dein Bestes :wink: |
AW: String ausgeben
Es hat aber auch keinen Sinn, einen Anfänger, der mit einer konkreten Frage ankommt, mit einer Flut an Informationen zu erschlagen, die mit seinem Problem nicht direkt etwas zu tun haben. Eins nach dem anderen... Erst mal den eigenen Ansatz zum Laufen bringen, danach kann man ggf. schauen, ob/wie es besser geht. Genau wie es in Mathe oder anderen Fächern ja auch am effektivsten ist, erst mal eine Aufgabe selbstständig zu bearbeiten und anschließend mit der Musterlösung zu vergleichen, statt gleich in die Musterlösung zu schauen.
Ist doch normal, dass man so anfängt. Meine ersten Programme sahen genau so aus. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz