Autor Beitrag
galagher
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2556
Erhaltene Danke: 45

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Fr 27.02.04 20:37 
Hallo!

Ich habe eine Prozedur (stammt nicht von mir), die andere Programme startet und auf deren Beendigung wartet. Leider zeichnet sich das Fenster des aufrufenden, also meines, Programms nicht neu: das andere Fenster "schmiert". Wie kann ich der Prozedur bekanntgeben, dass sie mein Fenster neu zeichnen soll, während sie auf das Programmende wartet, ohne dass ich in die Unit, die die Prozedur enthält,
ausblenden Delphi-Quelltext
1:
uses Unit1;					

aufnehme?

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 27.02.04 20:39 
Pack das Starten in einen Thread, dann kann sich dein Fenster auch aktualisieren.
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2556
Erhaltene Danke: 45

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Fr 27.02.04 21:11 
Luckie hat folgendes geschrieben:
Pack das Starten in einen Thread, dann kann sich dein Fenster auch aktualisieren.


Dann funktioniert's zwar, aber mein Programm wartet nicht mehr, bis das andere beendet wurde.
Habe folgenden Code:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure _Exec.Execute;
begin
  { Thread-Code hier einfügen }
  dwExecAndWait('calc.exe','', SW_SHOWNORMAL);
end;


dwExecAndWait startet zwar das Programm calc, aber wartet nicht.

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2556
Erhaltene Danke: 45

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Sa 28.02.04 12:26 
Titel: Einer Unit die aufrufende Unit bekanntgeben [gelöst]
Man kann einer Prozedur oder Funktion einer anderen Unit Form1 (oder was man halt will) "bekanntgeben", ohne Unit1 in die uses-Klausel der anderen Unit aufzunehmen, indem man einfach die entsprechende Prozedur der fremden Unit abändert:

Original:
ausblenden Delphi-Quelltext
1:
procedure MachtIrgendwas(const {...});					


Änderung:
ausblenden Delphi-Quelltext
1:
procedure MachtIrgendwas(Form: TForm; const {...});					


Aufgerufen wird das dann also so:
ausblenden Delphi-Quelltext
1:
MachtIrgendwas(Form1, {...});					


Die Prozedur MachtIrgendwas der fremden Unit kann nun mit Form1 etwas anfangen, zB. neu zeichnen oder was auch immer.

Danke jedenfalls!

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
Brueggendiek
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 304

Win 98, Win98SE, Win XP Home
D5 Std
BeitragVerfasst: So 29.02.04 02:58 
Titel: Re: Einer Unit die aufrufende Unit bekanntgeben [gelöst]
Hallo!

galagher hat folgendes geschrieben:
ausblenden Delphi-Quelltext
1:
procedure MachtIrgendwas(Form: TForm; const {...});					


Das Ganze funktioniert aber wirklich nur mit den Methoden von TForm! Eigene Methoden des Formulars kann man so nicht aufrufen.

Warum soll die Formular-Unit nicht in die USES-Anweisung aufgenommen werden? Falls sich eine zirkuläre Referenz ergibt, muß man eben die USES-Anweisung im Implementation-Abschnitt nehmen - dafür gibt es sie ja!

Bei meinen Programmen werden alle Units im Implementations-Abschnitt eingebunden - es sei denn, ich benötige sie im Deklarationsteil. Wenn man das konsequent durchhält (immer unten rein und nur bei Bedarf nach oben schieben), vermeidet man viel Ärger!

Im Übrigen erinnere ich nochmal an die 3 Grundlagen der Programmierung:
1. Planung
2. Planung
3. noch mehr Planung!

Konkret: Bei guter Planung treten zirkuläre Referenzen gar nicht erst auf!

Gruß

Dietmar Brüggendiek
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2556
Erhaltene Danke: 45

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: So 29.02.04 19:47 
Titel: Re: Einer Unit die aufrufende Unit bekanntgeben [gelöst]
Hallo!

Zitat:
Das Ganze funktioniert aber wirklich nur mit den Methoden von TForm!


Ich wollte einfach eine Möglichkeit finden, wie ich das Problem des Neuzeichnens während des Wartens beheben kann, und zwar sollte die aufgerufene Prozedur selbst dafür sorgen, ohne abhängig von irgendeiner Form1 oder Form2 oder was auch immer zu sein. Also habe ich einfach die modifizierte Prozedur in meiner eigenen format.pas abgespeichert!

Klar, mit uses geht's auch! Zumindest für meinen aktuellen Zweck genügt es aber, Form: TForm anzugeben.
Übrigens: Mit einem Thread und Synchronize hat's nicht geklappt. Wenn das Programm nach dem Thread eine Datei kopieren oder das Environment anzeigen sollte - egal, was -, kam's zum grossen Hängen!
Danke jedenfalls für die Hilfe!

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!