![]() |
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.
|
Re: IF-Problem
So sieht das Layout aus:
![]() Bei anklicken der jeweiligen Radiogroups werden folgende Timer geöffnet: Für die Linke Radiogroup (Timerzeit)
Delphi-Quellcode:
//////// ZEITDAUER IN MIN
dtAlarm2 := StrToTime(edende.Text + ':' + edende2.Text + ':' + edende3.Text) + StrToDate(cbdatum.Text); image1.Visible:=false; speedbutton2.Visible:=false; timer3.Enabled :=false; cbshutdown.Enabled:=false; cbsignal.Enabled:=false; rgzwei.Enabled:=false; timerfest.Enabled :=false; Button1.Caption:='Abbrechen'; if edzeit.Text='00' then begin edzeit.text:='01' end; if cbsignal.Checked=false then begin // opendialog1.Execute; cbsignal.checked:=true; end; 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; speedbutton2.Visible:=true; image1.Visible :=true; timer3.Enabled:=true; timerzeit.Enabled:=true; end; end; Und für die rechte Radiogroup: (Timerfest)
Delphi-Quellcode:
In den unteren 3 memos wird wie in einem countdown heruntergezählt.
//////// Feste Uhrzeit
dtAlarm := StrToTime(edhours.Text + ':' + edmin.Text + ':' + edseconds.Text) + StrToDate(cbdatum.Text); image1.Visible:=false; speedbutton2.Visible:=false; timer3.Enabled :=false; timerzeit.Enabled :=false; rgeins.Enabled:=false; cbdatum.Enabled:=false; cbsignal.Enabled:=false; cbshutdown.Enabled:=false; 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; timerfest.enabled:=false; speedbutton2.Visible:=true; timer3.Enabled:=true; image1.Visible :=true; Abbrechen:=true; //timerfest.Enabled:= true; end; end; end; (in abhängikeit von den eingestellten endzeiten der 2 radiogroups) Damit man die Timer starten kann, muss auf STARTEN-Button gedrückt werden:
Delphi-Quellcode:
sobald eine radiogroup ausgewählt wurde und auf STARTEN-Button gedrückt wurde,
if rgeins.checked
then timerzeit.Enabled:=true else timerfest.Enabled:=true; if (button1.Caption='Abbrechen') and (rgeins.checked) then if MessageDlg('Timer ändern?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then begin timerzeit.Enabled:=false; //timerfest.Enabled:=true; rgeins.Checked:=true; rgzwei.Enabled:=true; //cbsignal.Checked:=false; //cbshutdown.Checked:=false; mehours.text:='00'; memin.Text:='00'; meseconds.text:='00'; mediaplayer1.Close; cbsignal.Enabled:=true; cbshutdown.Enabled:=true; button1.Caption:='Starten'; speedbutton2.Visible:=false; timer3.Enabled:=false; image1.Visible:=false; end; if (button1.Caption='Abbrechen') and (rgzwei.checked) then if MessageDlg('Timer ändern?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then begin timerfest.Enabled :=false; timerzeit.Enabled :=false; rgeins.Enabled:=true; rgzwei.Checked:=true; mehours.text:='00'; memin.Text:='00'; meseconds.text:='00'; mediaplayer1.Close; cbsignal.Enabled:=true; cbshutdown.Enabled:=true; button1.Caption:='Starten'; speedbutton2.Visible:=false; timer3.Enabled:=false; image1.Visible:=false; end; wird wie bereits gesagt der countdown in den memos gesetzt. es wird automatisch sobald auf STARTEN gedrückt wird, der Button in ABBRECHEN umbenannt. Hier ein Bild davon: ![]() Und nun zum eigentlichen Problem: die linke radiogroup wird ausgewählt, der song herausgesucht und auf STARTEN gedrückt. in den memos wird die restzeit angezeigt. nach dieser zeit wird der song abgespielt. wenn man auf Abbrechen drückt, und die 2.radiogroup auswählt und song heraussucht und auf STARTEN drückt, wird der timer von der linken radiogroup geladen. Warum? sobald man die 2. radiogroup und dann die 1. wählt, passiert das gleiche. wer kann mir helfen? bin verzweifelt! |
Re: IF-Problem
kann mir keiner helfen?
|
Re: IF-Problem
Moin
Der Code ist so unstrukturiert, da fällt einem es wirklich schwer, das zu überschauen. Könntest du vielleicht das Projekt anhängen? |
Re: IF-Problem
okay. ich geb zwar ungern den code heraus,
aber hier ist die pas-datei ;) und zur veranschaulichung die exe-datei. das programm hat noch ein paar macken, die ich demnächst noch bereinigen werde. bsp. die 60er minutenanzeige |
Re: IF-Problem
Zitat:
Zitat:
|
Re: IF-Problem
[OT]
@danku: Sorry dass ich es mal so sage (also in diesem Thread), aber es hat nunmal direkt mit all dem was du hier bisher getan hast zu tun. Ich finde (ist damit also nur meine persönliche Meinung), dass du echt alles tust um keine Hilfe zu erhalten. Es ist echt so, dass die DP jedem gerne hilft (bzw. ihre Mitglieder), bei dir hier hätte ich keine Lust mehr (sorry). Es ist ganz einfach so, dass du alle Bitten getrost ignorierst. Ich meine wenn sich Matze (der bestimmt genug anderes zu tun hat) schon dazu bereit erklärt, deinen Code zu strukturieren, dann solltest du das zu schätzen wissen. Zitat:
Zitat:
Zitat:
Helfen werden dir sicherlich nicht Leute wenn du weiterhin solche Beiträge lieferst. Ganz ehrlich, deine Kommentare sind mehr als unhöflich, deine Mitarbeit faktisch nicht vorhanden (du hast es immer noch nicht geschafft deinen Code zu strukturieren) und dann kommt noch das mit der pas Datei... Also ganz ehrlich, ich habe nur einen ISDN Kanal, warum sollte ich also Interesse daran haben ein großes Kompilat runter zu laden. Gebeten wurdest du von jmd. (der deine Arbeit übernehmen wollte) das Projekt anzuhängen. Jeder hätte es so als kleines Paket runterladen und selbst kompilieren können. Ich kann dir wirklich nur den Tipp geben (den kannst du natürlich wie alle anderen ignorieren) dich etwas mehr einem Forum entsprechend zu verhalten. Andernfalls dürfte es für dich echt schwer werden je Hilfe zu finden (alles nur meiner Meinung nach). Gruß Der Unwissende [/OT] |
Re: IF-Problem
Das sind eben nicht 'Schönheitssachen'. Hässlicher Code ist grundsätzlich fehlerhaft. Nur schöner Code kann auch richtig sein. Programmieren hat nämlich durchaus etwas mit Ästhetik zu tun.
Einbuchohneodermitunsinnigerinterpu nktionundformatierungkannauchke.inschweinlesenegal wi esehrmansichanstrengtundwennmansnichtles.enkannkan nmanauchdiefehlernichtfindenunddann istmanaufgeschmissenundmu,ssinderdpnachfrageno,bwo hlmaneigentlichauchselberdrauf gekommenwarewennmandencod.eordentlichformatierthät te. [edit]p.s.: zum Formatieren war ich zu faul ;)[/edit] |
Re: IF-Problem
ist ja wieder gut. :|
hab ja schon genug auweh von euch bekommen. :? problem habe ich selber gelöst. sry wenn ich ein bissel unsauber gecodet habe. habt ja recht das es eine ordnung gibt... |
Re: IF-Problem
Hallo,
Zitat:
Gruß Jörg |
Re: IF-Problem
ich hab in dem timer statt if... end; if...end
einen else zweig dazugefügt. das war alles lol. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13: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-2025 by Thomas Breitkreuz