Autor |
Beitrag |
Sephiroth
      
Beiträge: 102
|
Verfasst: Mo 12.08.02 16:51
So noch ein zweites Problem.
Meine Exe ruft ein Formular auf. Nun kann man aber wieder zurück zu der Exe schalten. Man kann zwar nichts mehr klicken, aber das fenster kann man noch aktivieren. Kann man dies irgendwie verhindern, also so das man wirklich nur das Formular der DLL benutzen kann? Es soll im prinzip so gehandhabt werden das die DLL nicht wie ein neues Programm gestartet wird sondern so wie wenn es ein neue Formular der Exe wäre.
Ich habs mit StayOnTop probiert. War auch genau das was ich wollte nur das wenn ich dann z.B. ein Showmessage hatte, war dieses hinter der Form und man konnte es nicht hervorholen.
Danke im voraus
|
|
cbs
      
Beiträge: 207
Erhaltene Danke: 1
|
Verfasst: Mo 12.08.02 17:10
Tag auch
ich kann dir zwar nicht helfen aber ich glaube dieses problem hatte ich auch mal
du rufst dein Dll formular bestimmt mit showmodal auf oder? so das alle anderen forms deaktiviert sind (oder man sie halt nicht benutzen kann)
das problem bei mir war das, wenn ich zb. das hauptformular angeklickt habe, mein dll formular hinter das hauptformular verschwunden ist
normalerweise müsste das hauptformular nicht anklickbar/aktivierbar sein, man kann die steuerelemente zwar nicht benutzen, trotzdem "versteckt" sich das dll formular
ich hatte mir nämlich eigene dialoge geschrieben die ich in dll's auslagern wollte (wie windows es tut), ich habs aber aufgrund dieses problems dann sein gelassen
ist es auch dein problem? wenn ja dann bin ich auch auf eine antwort gespannt
|
|
Sephiroth 
      
Beiträge: 102
|
Verfasst: Mo 12.08.02 17:30
genau das ist mein Problem 
|
|
cbs
      
Beiträge: 207
Erhaltene Danke: 1
|
Verfasst: Fr 16.08.02 18:51
ist zwar nicht mein thread aber wie gesagt es interessiert mich auch sehr das problem zu lösen, also...
...hat keiner ne anhung was da los ist?
|
|
ao
      
Beiträge: 145
Win XP Prof.
D7 Ent.
|
Verfasst: Fr 16.08.02 19:03
Hallo,
was da genau los ist kann ich euch leider auch nicht sagen. Also ich würde versuchen, sobald das Ereignis OnDeactivate des Formulars (das aus der DLL) ausgelöst wird, es sofort wieder zu fokusieren. Vielleicht sieht es dann so aus als wäre es modal angezeigt. Ist zwar nur ein "work arround", aber wie gesagt ich weiß auch nicht woran es liegt.
Gruß
Andreas
|
|
cbs
      
Beiträge: 207
Erhaltene Danke: 1
|
Verfasst: Fr 16.08.02 19:14
na ok, danke erstmal
aber wie du schon sagst es ist nur eine notlösung, die zwar funktionieren würde (habs jetzt nicht ausprobiert), aber es ist eben nicht sehr "elegant"
mich würde vorallem das warum interessieren. kennt man das warum dann kann man eventuell auch das problem lösen. oder machen wir generell was falsch? wie macht man es richtig? oder wie macht ihr es?
|
|
ao
      
Beiträge: 145
Win XP Prof.
D7 Ent.
|
Verfasst: Fr 16.08.02 19:23
Hallo,
mich würde natürlich auch die "One And Only" Lösung interessieren. Damit wären wir dann schon zu dritt.
Andreas
|
|
chewie
Hält's aus hier
Beiträge: 14
|
Verfasst: Sa 17.08.02 21:37
Hallo zusammen,
Das Problem ist mir auch schon begegnet. In den Borland-Newsgroups habe ich schlussendlich folgende Lösung gefunden:
Man muss Application.Handle der DLL auf Application.Handle der DLL setzen bevor das Formular in der DLL kreiert wird.
Danach verhält sich das Formular wie jedes Formular, welches innerhalb der EXE programmiert wird. Jetzt funktioniert auch FormStyle 'fsStayOnTop' wie gewünscht: StayOnTop gilt nur noch für das eigene Programm, nicht mehr global in Windows - Fehlermeldungen des Programms werden nicht mehr verdeckt.
Ganz Wichtig: Bevor das Programm beendet wird, muss Application.Handle innerhalb der DLL wieder auf 0 gesetzt werden, sonst gibst Abstürze.
Gruss - Jörg
|
|
cbs
      
Beiträge: 207
Erhaltene Danke: 1
|
Verfasst: Sa 17.08.02 23:18
hab ich jetzt net ganz geschnallt, eine DLL hat ein eigenes Application.Handle ??? was muss ich wo hinsetzen?
|
|
chewie
Hält's aus hier
Beiträge: 14
|
Verfasst: So 18.08.02 16:44
Kleines Beispiel:
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:
| library DllFormExample;
uses Forms, DllForm in 'DllForm.pas' {DllFormular};
{$R *.res}
function FormShowModal(hApplicationHandle : THandle) : Integer; var obDllForm : TDllFormular; begin Application.Handle := hApplicationHandle;
obDllForm := TDllFormular.Create(nil); Result := obDllForm.ShowModal; obDllForm.Free;
Application.Handle := 0; end;
exports FormShowModal;
end. |
Aufruf aus EXE:
Quelltext 1: 2: 3: 4: 5: 6:
| ... procedure TExeProgramm.ShowDllFormular; begin FormShowModal(Application.handle); end; ... |
Die DLL hat eine eigene 'Application', auch wenn Application.ExeName den Namen der aufrufenden EXE zurückgibt. Das Handle ist allerdings standardmässig auf 0.
Ich hoffe, das hilft weiter.
Gruss - Jörg
|
|
cbs
      
Beiträge: 207
Erhaltene Danke: 1
|
Verfasst: Mi 21.08.02 17:24
ja danke, habs jetzt kapiert
ich werd gleich am we ausprobieren
|
|