![]() |
IF-Problem
sry wird gerade überarbeitet.
|
Re: IF-Problem
Lass doch mal bitte bei den if-Abfragen das "=true" und "=false" weg und schreib nur
Delphi-Quellcode:
oder eben
if RadioButton1.Checked
Delphi-Quellcode:
Dann formatiere das bitte etwas, vor allem bei den begin/ends mit der EInrückung. Sehr übersichtlich ist es z.B. so:
if not RadioButton1.Checked
Delphi-Quellcode:
Denn so habe ich persönlich keine Lust, das auseinander zu friemeln und mich da einzulesen. :)
begin
code code begin code end; end; Edit: Huch, irgendwie überarbeitest du es ja schon. Evtl. kannst du meinen Beitrag dann ignorieren. ;) |
Re: IF-Problem - >Timerabhängigkeit
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab jetzt die If-klauseln noch mal alle überarbeitet.
folgendes problem kommt zum vorschein: ich habe 2 timer für die zwei. radiogroups: Timer1 (timerzeit)
Delphi-Quellcode:
Timer2 (Timerfest)
...
//////// ZEITDAUER IN MIN timerfest.Enabled :=false; //der timer von der 2.rg if edzeit.Text='00' then begin edzeit.text:='01' end; Button1.Caption:='Abbrechen'; if cbsignal.Checked=false then begin // opendialog1.Execute; cbsignal.checked:=true; end; rgzwei.Enabled:=false; dtAlarm2 := StrToTime(edende.Text + ':' + edende2.Text + ':' + edende3.Text) + StrToDate(cbdatum.Text); if Now < dtAlarm2 then ShowRemainingTime2(dtAlarm2) else begin //datei abspielen CoolTrayIcon1.ShowMainForm; with MediaPlayer1 do begin if cbsignal.checked then begin Filename := OpenDialog1.Filename; Open; Play; timerzeit.Enabled:=false; end; end; ..
Delphi-Quellcode:
Um die Timer zu starten betätigt man den START-Button:
//////// Feste Uhrzeit
timerzeit.Enabled :=false; //timer1 dtAlarm := StrToTime(edhours.Text + ':' + edmin.Text + ':' + edseconds.Text) + StrToDate(cbdatum.Text); if rgzwei.Checked then begin rgeins.Enabled:=false; cbdatum.Enabled:=false; cbsignal.Enabled:=false; end; Button1.Caption:='Abbrechen'; if (dtAlarm) < (now) //einen tag höher setzen then begin cbdatum.ItemIndex:= 1; end; if cbsignal.Checked=false then begin // opendialog1.Execute; cbsignal.checked:=true; end; if Now < dtAlarm then ShowRemainingTime(dtAlarm) else begin //datei abspielen CoolTrayIcon1.ShowMainForm; with MediaPlayer1 do begin if cbsignal.checked then begin Filename := OpenDialog1.Filename; Open; Play; speedbutton2.Visible:=true; timer3.Enabled:=true; end; end; ...
Delphi-Quellcode:
Sobald bspw. die 1.radiogroup geklickt wurde und der START-Button,
if rgeins.checked=true
then if button1.Caption='Starten' then begin timerzeit.Enabled:=true; end; if rgzwei.checked=true then if button1.Caption='Starten' then begin timerfest.Enabled:=true; end; if (button1.Caption='Abbrechen') then if (rgeins.checked) and (timerzeit.Enabled=true) then if MessageDlg('Timer ändern?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then begin timerzeit.Enabled:=false; // timerfest.Enabled:=true; rgzwei.Enabled:=true; mehours.text:='00'; memin.Text:='00'; meseconds.text:='00'; mediaplayer1.Close; cbsignal.Enabled:=true; button1.Caption:='Starten'; mediaplayer1.Close; end; if (button1.Caption='Abbrechen') then if (rgzwei.checked) and (timerfest.Enabled=true) then if MessageDlg('Timer ändern?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then begin timerfest.Enabled:=false; // timerzeit.Enabled :=true; rgeins.Enabled:=true; mehours.text:='00'; memin.Text:='00'; meseconds.text:='00'; mediaplayer1.Close; cbsignal.Enabled:=true; button1.Caption:='Starten'; mediaplayer1.Close; end; wird der zähler in den 3 unteren memofeldern um 1 verringert. (wie countdown) das geschieht solange bis '00'; dann wird eine datei abgespielt. durch betätigen des START-Buttons wird automatisch die caption in Abbrechen umbenannt. wenn der zähler vorzeitig abgebrochen (Abbrechen -> Caption wieder STARTEN umbenannt) wird, soll anhand der 2.radiogroups der timer2 geladen werden und time1 zurückgesetzt werden. das funzt ja auch alles einwandfrei nur ist das problem, sobald man die 1.radiogroup abbricht, und dann in der 2.radiogroup klickt und da STARTEN klickt wird der timer von der 1.radiogroup aktiviert. warum? andersherum ist es genauo... |
Re: IF-Problem
1. then if meiden .. da blickt niemand durch, vor allem wenn Du else-Zweige nutzt. Allerdings kannst Du bei End Else If durchaus in der aktuellen Einrückungsebene bleiben, ist aber nach Gusto.
2. end immer auf Höhe vom begin .. dann siehst Du besser, ob alle Ebenen auch wirklich ein end haben 3. then und begin entweder immer hinten oder immer auf neuer Zeile, wobei du sie auch getrennt schreiben kannst: then hinten und begin auf neuer Zeile. Auch hier gilt auf gleicher Höhe mit if. Eingerückt wird erst der Block zwischen Begin und End. 4. das gleiche gilt für With .. do, repeat .. until, while/For ... do 5. nie unvermittelt einrücken, nur innerhalb Begin .. End. Wenn Du gedanklich einen neuen Abschnitt anfängst, dann lasse eine Zeile aus oder schreibe eine Kommentarzeile. Du kannst auch einfach so einen bagin-end-block ohne ifs schreiben, wenn Du unbedingt zur Hervorhebung weiter einrücken willst. 6. if immer einzeilig oder mit begin..end, vor allem, wenn das Then hinten steht. Man schreibt schnell mal was unter einen If und dann machter was ganz anderes. 7. das sind keine Gesetze, sondern Vorschläge, damit andere auch eine chance haben, deinen Code zu lesen. Du kannst Dir auch eigene Regeln aufstellen, solltest sie dann aber STRIKT befolgen. Hilft auch Dir selber, wenn Du Deinen Code nach 2 Jahren wieder anschaun musst. |
Re: IF-Problem
hm das sind doch aber alles nur "schönheitssachen", zum besseren lesen.
das hat doch aber nicht wirklich mit meinen problem zu tun. :roll: |
Re: IF-Problem
das problem liegt irgendwie bei:
Delphi-Quellcode:
wenn bspw. eine checkbox(2/2) gewählt wurde,
if rgeins.checked
then timerzeit.Enabled:=true else timerfest.Enabled:=true; //auf umständliche weise wie: if rgeins.checked then if button1.Caption='Starten' then begin timerfest.enabled:=true; if rgzwei.checked ... //funzt auch nicht auf den START-Button geklickt wurde, wird der timer von der zugehörigen radiogroup gesetzt. zur laufzeit (d.h. wenn timer geladen wird) ändert sich die caption in ABBRECHEN. problematisch wird es wenn Abbrechen gedrückt wird und anstatt der vorherigen checkbox in die andere checkbox geklickt wird und diesmal auf STARTEN geklickt wird. Denn hier wird immer noch der alte Timer von der 1.checkbox geladen. Warum? :( |
Re: IF-Problem
Zitat:
Warum schreiben wir denn alle nicht so:
Delphi-Quellcode:
Da bruach man erstmal 5 Minuten bis man sieht, wies funzt, aber so:
procedure TForm1.TimerTimer(Sender : TObject) var i : Byte; begin for i := 0 to 4 do begin Showmessage(IntToStr(i) + '. Zahl'); Label1.Text := IntToStr(i) + '. Zahl ist dran'; end; end;
Delphi-Quellcode:
procedure TForm1.TimerTimer(Sender : TObject)
var i : Byte; begin for i := 0 to 4 do begin Showmessage(IntToStr(i) + '. Zahl'); Label1.Text := IntToStr(i) + '. Zahl ist dran'; end; end; |
Re: IF-Problem
hm das mit der überschaubarkeit ist mir schon klar.
so krass wie deins code ich allemal nicht. mein problem ist aber immer noch nicht geklärt. |
Re: IF-Problem
Zitat:
Also sorry, ein wenig Gemeinschaft gehört nun mal zum Forum und damit etwas Mitarbeit von jedem. Die Leute die dir bis jetzt schrieben meinen es nicht böse, sondern wollten dir helfen. Es kostet dich doch nicht viel Zeit deinen Code mal etwas umstrukturiert (lesbar) hinzuschreiben. Das hilft dir mit Sicherheit auch, vielleicht findest du dann deinen Fehler auch schon selbst. Jedenfalls fände ich es fast unverständlich wenn dir jmd. mit dem Code (und der Reaktion auf die anderen Beiträge) hilft. Und wenn du dabei bist, versuch doch bitte gleich dein Problem etwas klarer zu schildern. Unter Laufzeit versteht man dass das Programm gestartet wurde (läuft). Die Alternative dazu ist die Designzeit (wenn dein Programm nicht läuft und du die Fenster designst). Zudem werden die Timer nicht geladen, sie werden ggf. erzeugt (denke du setzt sie jedoch schon zur Designzeit), gestartet und gestoppt. Also tut mir leid, aber ich habe zumindest nicht wirkich das Gefühl dein Problem verstanden zu haben, wäre also schön wenn du es mit dem geänderten Code und einer klaren Erklärung nochmal versuchen könntest, dann hilft dir auch sicher gerne jmd. (und nach der Anzahl deiner Beiträge zu Urteilen solltest du das alles schon längst wissen). Gruß Der Unwissende |
Re: IF-Problem
okay erfolgt morgen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:19 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-2025 by Thomas Breitkreuz