Autor Beitrag
galagher
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2562
Erhaltene Danke: 46

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Fr 21.01.05 17:51 
Hallo!
Ich habe eine MDI-Anwendung, wie und wo kann ich feststellen, wann ein MDI-Formular aktiv oder inaktiv wird? Die Prozedur FormActivate kann ich nicht benutzen, da dort der Code, den ich einsetze, zu einem Stacküberlauf führt.

Ich muss also irgendwie auf Application-Ebene feststellen, ob und welches MDI soeben aktiviert wurde und dort den Code ausführen - und erstmal hoffen, dass es so geht.
Danke erstmal!

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

warmes flüssiges Blut
D7 Prof, D8 Prof
BeitragVerfasst: Fr 21.01.05 22:12 
Eventuell hilf das Ereignis OnEnter eines Panels das auf der MDIFrom liegt weiter.

_________________
FREIHEIT
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Sa 22.01.05 08:37 
Wenn dein Code zu einem Stcküberlauf führt, solltest du den mal prüfen. Wo er ausgeführt dürfte doch relativ egal sein. Ob im FormActivate oder irgendeinem anderen Ereignis.
Ich kann mir nicht vorstellen, dass sich das Problem so erledigen lässt.
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2562
Erhaltene Danke: 46

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Sa 22.01.05 11:08 
jasocul hat folgendes geschrieben:
Wenn dein Code zu einem Stcküberlauf führt, solltest du den mal prüfen. Wo er ausgeführt dürfte doch relativ egal sein. Ob im FormActivate oder irgendeinem anderen Ereignis.

Danke für die Antworten!
Im Prinzip stellt der Code einen HighLighter für das SynEdit des aktiven MDI-Formulars ein, abhängig von der Dateinamenerweiterung der geladenen Datei. Das MDI wird also aktiv, und wenn man nun zB. (nur zum Testen) mit der Maus klickt, kann der Code in SynEdit1Click problemlos ausgeführt werden. In FormActivate gibt's den besagten Fehler, FormPaint ist nicht ideal, da es nicht immer aufgerufen wird, Prozedur SynEdit1Enter wird nur 1x aufgerufen - also geht das auch nicht.
Es mag daran liegen, das die HighLighter im Main-Formular liegen.

Ich habe das nun so gelöst:
In FormActivate wird
ausblenden Delphi-Quelltext
1:
2:
3:
 IsActiv := True;
 SynEdit1GutterClick(Sender,-1,-1,-1,nil);
 SynEdit1GutterClick(Sender,-1,-1,-1,nil);

ausgeführt, die Lesemarke wird dadurch nicht gesetzt (ist auch erwünscht so), aber es wird die Prozedur SynEdit1GutterPaint ausgeführt, und dort steht der Code, der ausgeführt wird, wenn IsActive True, das wird dort sofort auf False gesetzt. Ich weiss, das ist ziemlich "um die Ecke" programmiert, aber es erfüllt fehlerfrei seinen Zweck!

Das erklärt zwar nicht, warum es zu einem Stack-Overflow kommt, aber - egal.
Danke nochmal!

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