Autor |
Beitrag |
Trialtom
      
Beiträge: 38
|
Verfasst: So 02.02.03 18:21
hallo!
ich bin da grad an einem programm beschäftigt, nutze viele verschiedene edit-felder, wie auch listbox-en und labels die verändert werden....ja nachdem das programm benutz wurde sollte man nun per button klick es noch einmal benutzen können und nicht erst schließen und wieder starten.
ich könnte nun alle listbox wieder auf clear setzen und alle edit-felder wieder text:='' setzen, aber da finde ich den aufwand zu groß und den quellcode entschieden zu lang.
gibt es da ein befehl der das programm zu gut wie neu starten lässt?
danke schonmal
Tom
|
|
matze
      
Beiträge: 4613
Erhaltene Danke: 24
XP home, prof
Delphi 2009 Prof,
|
Verfasst: Mo 03.02.03 17:53
das programm schliessen: application.terminate;
das programm dann starten: such nach shellexecute hier im forum !!!
deb pfad zu deinem proggi bekommst du mit paramstr(0)
_________________ In the beginning was the word.
And the word was content-type: text/plain.
|
|
Aya
      
Beiträge: 1964
Erhaltene Danke: 15
MacOSX 10.6.7
Xcode / C++
|
Verfasst: Mo 03.02.03 18:07
@Matze: Is das nich nen logikfehler...?? Wie willst du denn nachdem du dein Programm mit Application.Terminate beendet hast, aus deinem Programm heraus etwas starten? *g* Dürfte nich gehen...
Ich denke mal es führt kein weg dran vorbei jedes Edit etc leer zu machen, also nen paar .Clear machen.
Wenn du deine EditFelder etc durchnummeriert hast (z.B. Edit1, Edit2, Edit3 etc) dann kannst du's auch einfach mit ner Schleife machen:
Quelltext 1: 2:
| for i:=1 to 3 do TEdit(FindComponent('Edit'+IntToStr(i))).Clear; |
Au'revoir,
Aya~
_________________ Aya
I aim for my endless dreams and I know they will come true!
|
|
Trialtom 
      
Beiträge: 38
|
Verfasst: Mo 03.02.03 20:23
schade, aber naja, einige dieser schleifen (editfelder+listboxen) sind dann nat. sehr nützlich.
danke
|
|
overmoon
      
Beiträge: 16
|
Verfasst: Mo 03.02.03 23:57
@Aya
Ich denke schon, dass matze recht hat.
Folgende Prozedur sollte eigentlich einen Neustart bewirken:
Quelltext 1: 2: 3: 4: 5:
| procedure TFormMain.Neustarten; begin WinExec(pChar(ParamStr(0)),SW_SHOW); Close; end; |

|
|
Aya
      
Beiträge: 1964
Erhaltene Danke: 15
MacOSX 10.6.7
Xcode / C++
|
Verfasst: Di 04.02.03 00:34
ok, in der reihenfolge funktioniert es sicherlich...
Aber für wirklich optimal halte ich die Lösung keineswegs... im idealfall wenn man alles berücksichtigt, verschwindet das Fenster trotzdem für einen kurzen augenblick..
Und wenn man die FensterKoordinaten etc nicht speichert, rutscht es sogar ein stück zur seite
Au'revoir,
Aya~
_________________ Aya
I aim for my endless dreams and I know they will come true!
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 04.02.03 09:40
Wenn ich etwas zurücksetzen muss, schreibe ich grundsätzlich eine Prozedur/Funktion, in der eben dies alles getan wird. Diese Prozedur lässt sich jederzeit erweitern und von überall im Programm aufrufen. Auf die Weise muss man das Programm nicht beenden und neu starten und kann trotzdem immer -wenn gewünscht!- die Originaleinstellungen wiederherstellen.
Das Beenden und Neustarten halte ich also Lösung für ... sorry: unsinnig.[/code]
|
|
matze
      
Beiträge: 4613
Erhaltene Danke: 24
XP home, prof
Delphi 2009 Prof,
|
Verfasst: Di 04.02.03 20:20
ich meine natürluich in der reihenfolge: erst starten dann das alte zumachen !
_________________ In the beginning was the word.
And the word was content-type: text/plain.
|
|
MasterHiggins
      
Beiträge: 64
|
Verfasst: Do 13.02.03 13:57
Titel: peinliche Frage (?)
und schon wider muß ich ich auf einen Beitrag von Matthias beziehen
Du hast geschrieben, daß man von überall eine Prozedur erneut aufrufen kann. Mein Problem ist aber wie geht das?
Wenn ich also z.B. auf Button1.click sage
TForm1.FormCreate;
gehts nicht weil er immer den Parameter haben will, also was muß ich als "Sender" angeben?
(procedure TForm1.FormCreate(Sender: TObject)
Danke
MasterH
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 13.02.03 14:06
Nee, anders. Sagen wir, du erstellst eine Form-interne, private Prozedur, in der alle Einstellungen zurückgesetzt werden. Beispiel:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| type TForm1 = class(TForm) { ... } private ResetAll; end;
{ ... }
procedure TForm1.ResetAll; begin Edit1.Text := ''; Edit2.Text := '';
Button1.Enabled := false;
// usw. { ... } end; |
Das ist im ersten Moment natürlich aufwändig, weil du -so!- alles manuell zurückstellen musst. Aber; wenn du´s einmal gemacht hast, kannst du diese Prozedur überall in deiner Form aufrufen.
Beim Starten, im "OnCreate".
Beim Klicken auf einen Button wie "Neu",
usw. So habe ich das gemeint. Wie gesagt: meine persönliche Meinung ist die, dass es -auf gut Deutsch!- *mist*e aussieht, wenn man das Programm beendet und neustart, nur um die Einstellungen zurückzusetzen.
Hat jemand von euch schon mal gesehen, dass sich z.B. Word beendet und neu startet, nur weil man den Standard der Toolbar wiederhergestellt hat. 
|
|
MasterHiggins
      
Beiträge: 64
|
Verfasst: Do 13.02.03 14:28
Titel: supa
ja so gehts dann.
Erstmal dickes Dankeschön.
Aber:
Kann ich keine "normalen" Prozeduren aufrufen???
z.B. Button1.click oder so??
Dann müßte ich ja alles umstricken!
und 2tes aber:
Ich erstelle alle Buttons und deren Funktion erst zur Laufzeit (lese ich aus einer ini-Datei ein). und ich habe es leider bisher noch nicht geschafft diese an einer anderen Stelle zu createn als bei Form1.create
müßte das aber theoretisch in einer eigenen Prozedur genauso funktionieren, d.h. wenn ich in form1.create lediglich meine private Prozedur form1.erzeugen oder so aufrufe?
|
|
MasterHiggins
      
Beiträge: 64
|
Verfasst: Do 13.02.03 14:49
Titel: Noch ne Frage
Habe das Programm jetzt so umgebaut, daß es das einlesen der ini-Datei und das Eerzeugen der Buttons in einer eigenen prozedur TForm1.erzeugen macht. Funktioniert auch super,
aber ich will diese procedure jetzt auf Button1.Click in FORM2 aufrufen. Das geht aber nicht. Ich kann auf alle buttons etc in form1 zugreifen, aber nicht diese procedure. Muß ich da noch irgendwie was eintragen?
In der Implementation habe ich schon dlgmain eingetragen. Woran liegt das?
Zur info:
in Form2 kann man die ini-Datei bearbeiten, deswegen will ich natürlich das man die Änderungen gleich auf Knopfdruck bewundern kann und nciht erst nach einem Neustart des Programms
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 13.02.03 15:16
|
|
MasterHiggins
      
Beiträge: 64
|
Verfasst: Do 13.02.03 15:39
In den public-Bereich zu verschieben war dann die Lösung.
Danke danke danke
Aber um noch mal auf die vorherige Frage zurückzukommen:
Kann ich nicht z.B. auf button2.click button3.click aufrufen ??
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 13.02.03 21:31
Ja. Einfach aufrufen:
Quelltext 1:
| self.Button3Click(nil); |
Oder du nimmst den "Sender" vom Button2Click. Bevor du fragst: "self." ist das selbe wie "Form1." 
|
|
MasterHiggins
      
Beiträge: 64
|
Verfasst: Fr 14.02.03 09:32
Titel: Guten Morgen
TATSACHE und es funktioniert wirklich!
Den Sender des anderen Buttons zu nehmen habe ich leider nicht hingekriegt, aber egal.
Aber mal allgemeiner: Was ist denn dieser Sender und was soll der bringen?
Danke für Deine Geduld!
MasterH
|
|
Popov
Gast
Erhaltene Danke: 1
|
Verfasst: Fr 14.02.03 10:34
|
|
MasterHiggins
      
Beiträge: 64
|
Verfasst: Fr 14.02.03 11:27
|
|
Popov
Gast
Erhaltene Danke: 1
|
Verfasst: Fr 14.02.03 20:53
Wenn du den Button1 als Sender weitergeben willst, dann kann man das so machen:
Quelltext 1: 2: 3: 4:
| procedure TForm2.Button1Click(Sender: TObject); begin Form2.Button3Click(Sender); end; |
Wenn du jetzt in der Button3Click Prozedur abfragst welcher Button geklickt wurde, dann bekommst du Button1 als Antwort. Und das obwohl es die Button3 Prozedur ist.
Du kannst auch follgendes machen:
Quelltext 1: 2: 3: 4:
| procedure TForm2.Button1Click(Sender: TObject); begin Form2.Button3Click(Button4); end; |
Wenn du jetzt in der Button3Click Prozedur abfragst welcher Button geklickt wurde, dann bekommst du Button4 als Antwort.
Wenn du den Button eines anderen Formulars nimmst, dann mußt du auch das Formular mitschicken:
Quelltext 1: 2: 3: 4:
| procedure TForm2.Button1Click(Sender: TObject); begin Form2.Button3Click(Form1.Button2); end; |
Wenn die Information egal ist, dann gibst du ein Nil an:
Quelltext 1: 2: 3: 4:
| procedure TForm2.Button1Click(Sender: TObject); begin Form2.Button3Click(nil); end; |
|
|
MasterHiggins
      
Beiträge: 64
|
Verfasst: Mo 17.02.03 14:52
Korrekt!
jetzt bin ich wieder ein stückchen schlauer.
Danke an alle
MasterH
|
|