Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - SaveDialog
tilli19222 - Fr 17.12.10 21:10
Titel: SaveDialog
Hallo liebe Forumgemeinde,
hat jemand eine Idee warum der SaveDialog gleich nach dem Starten des Programms ausgeführt wird und nicht nur wenn ich auf den entsprechenden Button klicke?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| procedure TForm1.Button1Click(Sender: TObject); var zeile1, zeile2, zeile3, zeile4, zeile5, zeile6: string; pu: Tstringlist;
begin zeile1 := editk1.text; zeile2 := editkt2.text; zeile3 := editk3.text; zeile4 := editj1.text; zeile5 := editj2.text; zeile6 := editj3.text; pu := Tstringlist.Create; try pu.Add(Zeile1); pu.Add(Zeile2); pu.Add(Zeile3); with savedialog1 do if execute then pu.SaveToFile(filename); finally pu.free End; end; |
Moderiert von
Martok: Delphi-Tags gesetztModeriert von
Gausi: Topic aus Sonstiges (Delphi) verschoben am Fr 17.12.2010 um 20:44
jaenicke - Fr 17.12.10 21:23
Dann hast du Button1Click auch als Ereignishandler in OnCreate oder OnShow oder so stehen. Schau mal beim Formular im Objektinspektor. ;-)
tilli19222 - Fr 17.12.10 21:36
leider nein :(
und wenn ich bei der procedure noch ein close; einfüge schließt es sich auch nicht
jaenicke - Fr 17.12.10 23:03
Häng am besten einmal das Projekt komplett an, sonst raten wir hier nur herum...
Tranx - Sa 18.12.10 09:37
Die einfachste Methode, ist einen Haltepunkt in der Button1Click-Prozedur zu setzen und dann nachzusehen, von welcher Prozedur das Programm kommt. (Debugfenster Aufrufstack) Vielleicht bekommst Du da schon heraus, wer der "Verursacher" ist. Bei Onchange-Prozedurenm ist das häufig so. Bei einer OnClick-Prozedur für einen Button hatte ich das noch nie.
Ein Möglichkeit, es einfach abzustellen ist, Du schreibst folgende Zeilen an den Anfang der Prozedur:
Delphi-Quelltext
1: 2:
| if not(Button1.focused) then exit; |
Dann wird der Rest nur ausgeführt, wenn Button1 den Focus hat.
jaenicke - Sa 18.12.10 10:10
Tranx hat folgendes geschrieben : |
| Dann wird der Rest nur ausgeführt, wenn Button1 den Focus hat. |
Das kann beim Programmstart aber auch der Fall sein. ;-)
Zudem ist die Bekämpfung von Symptomen bei Programmierfehlern...
tilli19222 - Sa 18.12.10 12:08
Hier der ganze Code:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101:
| procedure TForm1.Button1Click(Sender: TObject); var zeile1, zeile2, zeile3: string; pu: Tstringlist;
begin zeile1 := editk1.text; zeile2 := editk2.text; zeile3 := editk3.text; pu := Tstringlist.Create; try pu.Add(Zeile1); pu.Add(Zeile2); pu.Add(Zeile3); with savedialog1 do if execute then pu.SaveToFile(filename); finally pu.free End; end;
procedure TForm1.Button2Click(Sender: TObject); begin Monataktuell := StrToInt(EditMaktuell.text); Jahraktuell := StrToInt(EditJaktuell.text);
if (Monataktuell=01) and (Jahraktuell=2011) then Monataktuell:=1; if (Monataktuell=02) and (Jahraktuell=2011) then Monataktuell:=2; if (Monataktuell=03) and (Jahraktuell=2011) then Monataktuell:=3; if (Monataktuell=04) and (Jahraktuell=2011) then Monataktuell:=4; if (Monataktuell=05) and (Jahraktuell=2011) then Monataktuell:=5; if (Monataktuell=06) and (Jahraktuell=2011) then Monataktuell:=6; if (Monataktuell=07) and (Jahraktuell=2011) then Monataktuell:=7; if (Monataktuell=09) and (Jahraktuell=2011) then Monataktuell:=9; if (Monataktuell=10) and (Jahraktuell=2011) then Monataktuell:=11; if (Monataktuell=11) and (Jahraktuell=2011) then Monataktuell:=11; if (Monataktuell=12) and (Jahraktuell=2011) then Monataktuell:=12; if (Monataktuell=01) and (Jahraktuell=2012) then Monataktuell:=13; if (Monataktuell=02) and (Jahraktuell=2012) then Monataktuell:=14; if (Monataktuell=03) and (Jahraktuell=2012) then Monataktuell:=15; if (Monataktuell=04) and (Jahraktuell=2012) then Monataktuell:=16; if (Monataktuell=05) and (Jahraktuell=2012) then Monataktuell:=17; if (Monataktuell=06) and (Jahraktuell=2012) then Monataktuell:=18; if (Monataktuell=07) and (Jahraktuell=2012) then Monataktuell:=19; if (Monataktuell=09) and (Jahraktuell=2012) then Monataktuell:=21; if (Monataktuell=10) and (Jahraktuell=2012) then Monataktuell:=22; if (Monataktuell=11) and (Jahraktuell=2012) then Monataktuell:=23; if (Monataktuell=12) and (Jahraktuell=2012) then Monataktuell:=24; if (Monataktuell=01) and (Jahraktuell=2013) then Monataktuell:=25; if (Monataktuell=02) and (Jahraktuell=2013) then Monataktuell:=26; if (Monataktuell=03) and (Jahraktuell=2013) then Monataktuell:=27; if (Monataktuell=04) and (Jahraktuell=2013) then Monataktuell:=28; if (Monataktuell=05) and (Jahraktuell=2013) then Monataktuell:=29; if (Monataktuell=06) and (Jahraktuell=2013) then Monataktuell:=30; if (Monataktuell=07) and (Jahraktuell=2013) then Monataktuell:=31; if (Monataktuell=09) and (Jahraktuell=2013) then Monataktuell:=33; if (Monataktuell=10) and (Jahraktuell=2013) then Monataktuell:=34; if (Monataktuell=11) and (Jahraktuell=2013) then Monataktuell:=35; if (Monataktuell=12) and (Jahraktuell=2013) then Monataktuell:=36; if (Monataktuell=01) and (Jahraktuell=2014) then Monataktuell:=37; if (Monataktuell=02) and (Jahraktuell=2014) then Monataktuell:=38; if (Monataktuell=03) and (Jahraktuell=2014) then Monataktuell:=39; if (Monataktuell=04) and (Jahraktuell=2014) then Monataktuell:=40; if (Monataktuell=05) and (Jahraktuell=2014) then Monataktuell:=41; if (Monataktuell=06) and (Jahraktuell=2014) then Monataktuell:=42; if (Monataktuell=07) and (Jahraktuell=2014) then Monataktuell:=43; if (Monataktuell=09) and (Jahraktuell=2014) then Monataktuell:=45; if (Monataktuell=10) and (Jahraktuell=2014) then Monataktuell:=46; if (Monataktuell=11) and (Jahraktuell=2014) then Monataktuell:=47; if (Monataktuell=12) and (Jahraktuell=2014) then Monataktuell:=48; if (Monataktuell=01) and (Jahraktuell=2015) then Monataktuell:=49; if (Monataktuell=02) and (Jahraktuell=2015) then Monataktuell:=50; if (Monataktuell=03) and (Jahraktuell=2015) then Monataktuell:=51; if (Monataktuell=04) and (Jahraktuell=2015) then Monataktuell:=52; if (Monataktuell=05) and (Jahraktuell=2015) then Monataktuell:=53; if (Monataktuell=06) and (Jahraktuell=2015) then Monataktuell:=54; if (Monataktuell=07) and (Jahraktuell=2015) then Monataktuell:=55; if (Monataktuell=09) and (Jahraktuell=2015) then Monataktuell:=57; if (Monataktuell=10) and (Jahraktuell=2015) then Monataktuell:=58; if (Monataktuell=11) and (Jahraktuell=2015) then Monataktuell:=59; if (Monataktuell=12) and (Jahraktuell=2015) then Monataktuell:=60; if (Monataktuell=01) and (Jahraktuell=2016) then Monataktuell:=61; if (Monataktuell=02) and (Jahraktuell=2016) then Monataktuell:=62; if (Monataktuell=03) and (Jahraktuell=2016) then Monataktuell:=63; if (Monataktuell=04) and (Jahraktuell=2016) then Monataktuell:=64; if (Monataktuell=05) and (Jahraktuell=2016) then Monataktuell:=65; if (Monataktuell=06) and (Jahraktuell=2016) then Monataktuell:=66; if (Monataktuell=07) and (Jahraktuell=2016) then Monataktuell:=67; if (Monataktuell=09) and (Jahraktuell=2016) then Monataktuell:=69; if (Monataktuell=10) and (Jahraktuell=2016) then Monataktuell:=70; if (Monataktuell=11) and (Jahraktuell=2016) then Monataktuell:=71; if (Monataktuell=12) and (Jahraktuell=2016) then Monataktuell:=72; if (Monataktuell=01) and (Jahraktuell=2017) then Monataktuell:=73; if (Monataktuell=02) and (Jahraktuell=2017) then Monataktuell:=74; if (Monataktuell=03) and (Jahraktuell=2017) then Monataktuell:=75; if (Monataktuell=04) and (Jahraktuell=2017) then Monataktuell:=76; if (Monataktuell=05) and (Jahraktuell=2017) then Monataktuell:=77; if (Monataktuell=06) and (Jahraktuell=2017) then Monataktuell:=78; if (Monataktuell=07) and (Jahraktuell=2017) then Monataktuell:=79; if (Monataktuell=09) and (Jahraktuell=2017) then Monataktuell:=81; if (Monataktuell=10) and (Jahraktuell=2017) then Monataktuell:=82; if (Monataktuell=11) and (Jahraktuell=2017) then Monataktuell:=83; if (Monataktuell=12) and (Jahraktuell=2017) then Monataktuell:=84; |
(diese Umwandlung der Zahlenwerte kommt regelmäßig auch mit anderen Variablen vor,
8er Monate rausgenommen --- wurden zu Smilies)
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| if KM1 - Monataktuell = 6 then GroupBox1.color := clyellow;
if Monataktuell <= KM1-7 then begin Label2.Color := clgreen; GroupBox1.Color := clgreen; end;
if KM1 - Monataktuell < 6 then begin Label2.Color := clred; GroupBox1.color := clred; end; |
jaenicke - Sa 18.12.10 13:43
tilli19222 hat folgendes geschrieben : |
| Hier der ganze Code: |
Der ist ja nicht das Problem. Was in der Formulardefinition, sprich in der .dfm, steht, ist hier relevant...
Deshalb meinte ich ja, dass es sinnvoll ist, das Projekt anzuhängen.
Mit Debuggen und im Objektinspektor kannst du es auch selbst suchen.
tilli19222 - Sa 18.12.10 13:53
mit
Delphi-Quelltext
1: 2:
| if not(Button1.focused) then exit; |
funktioniert es
jaenicke - Sa 18.12.10 14:01
:autsch: Klar funktioniert es, aber es wäre wohl sinnvoller die Ursache zu beheben, nämlich den Fehler... :roll:
Tranx - Sa 18.12.10 17:57
Eins ist schon mal klar, die 100 IF-Abfragen kannst Du extrem vereinfachen. Es scheint so zu sein, dass die Beziehung zwischen Monataktuell und Jahraktuell im Ergebnis wie folgt ist:
Delphi-Quelltext
1:
| Monataktuell := (Jahraktuell-2011)*12+Monataktuell; |
Zumal es eine Integer-Variable mit 0 am Anfang nicht gibt: 01 = 1, da die Variable ja in binärem Format abgespeichert wird.
Aber das ist nicht die Ursache für Den Fehler, vereinfacht nur die Lesbarkeit des Quellcodes.
Also bleibt nur das Debugging übrig. Du setzt einen Haltepunkt an der ersten Zeile der Prozedur Button1Click. Wichtig ist, dass Du im Quelltext der Unit {$D+} setzt (gleich hinter der ersten Zeile mit UNIT), damit der Debugger überhaupt ausgeführt wird. Dann startest Du das Programm aus der Delphi-Umgebung heraus. Und wenn das Programm am Haltepunkt anhält, dann schaust Du um Aufrufstack nach, welche Prozeduren dort aufgelistet sind. Könntest Du das mal tun und uns den Inhalt des Aufrufstacks mitteilen. Vielleicht findet sich schon der Fehler. Ansonsten wäre alles nur Raterei.
tilli19222 - Sa 18.12.10 21:22
Wenn der Haltepunkt bei begin gesetzt ist und dann nur in der Zeile nach beginn
Moderiert von
Narses: Bilder als Anhang hochgeladen.
jaenicke - Sa 18.12.10 21:29
Wie schon gesagt: Am besten häng das Projekt oder zumindest die .dfm Datei an. Im Screenshot sieht es so aus als sei der Button normal geklickt worden.
tilli19222 - Sa 18.12.10 21:57
Hier das Proket als .rar-Archiv.
jaenicke - Sa 18.12.10 22:13
LOL, was habe ich ganz am Anfang geschrieben... :roll:
jaenicke hat folgendes geschrieben : |
| Dann hast du Button1Click auch als Ereignishandler in OnCreate oder OnShow oder so stehen. Schau mal beim Formular im Objektinspektor. ;-) |
Und so ist es auch...
tilli19222 - Sa 18.12.10 22:40
jaenicke hat folgendes geschrieben : |
LOL, was habe ich ganz am Anfang geschrieben... :roll: jaenicke hat folgendes geschrieben : | | Dann hast du Button1Click auch als Ereignishandler in OnCreate oder OnShow oder so stehen. Schau mal beim Formular im Objektinspektor. ;-) |
Und so ist es auch...
[Bild: CreateWithButtonClick] |
:-D ok danke
habe ereignishandler von button1 geguckt
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!