Announcement

Collapse
No announcement yet.

Wie kann ich aus der DLL aufgerufene Form "Aktiv" setzten

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Wie kann ich aus der DLL aufgerufene Form "Aktiv" setzten

    Hallo Leute,<BR>
    <BR>
    ich habe eine DLL geschrieben, die eine Form beinhaltet, die DLL wird von einen externen Anwendung aufgerufen. Das aufrufen und anzeigen meines Programms funktioniert wunder bar, bis auf ein kleines Manko. <BR>
    <BR>
    Vorgaben: <BR>
    Eigenschaften FormStyle = fsStayOnTop;
    Die Form wird mit „Show“ aufgerufen.<BR>
    <BR>
    Mein Problem ist:<BR>
    Wenn ich in der externen Anwendung mein Programm aufrufe legt sich mein Programm(Form) auf die externe Anwendung darauf, leider ist mein Programm nicht „Aktiv“. Wenn ich auf mein Programm darauf klicke, wird sie in einer Bruchteil von Sekunde Aktiv aber danach geht die Aktivität wieder zurück auf die ext. Anwendung über. <BR>
    <BR>
    Was ich versucht habe:<BR>
    Ich habe die Form in der DLL mit „ShowModal“ aufgerufen, leider kann ich danach die externe Anwendung nicht mehr benutzten, ich muss mein Programm erst schließen damit ich die ext. Anwendung weiter verwenden kann.<BR>
    Danach habe ich versucht die ext. Anwendung mitzuteilen das sie nicht „Aktiv“ sein soll. Die Befehle die ich da anwende sagen mir überhaupt nichts (ShowWindow(FindWindow(Class Name',nil), SW_SHOWNOACTIVATE)) und die Funktionieren nicht, kurz gesagt es passiert nichts. Ich habe auch gesehen das noch andere Funktionen wie „SendMessage“ und co. gibt aber wie soll ich die anwenden was muss ich tun, ich sehe lauter Fragezeichen.<BR>
    <BR>
    Meine Bitte:<bR>
    - Kann mir jemand bitte sagen, wie ich das umsetze, so dass ich zwischen mein Programm und dem externen Anwendung hin und her wechseln kann. <BR>
    - Oder kann ich der externen Anwendung sagen deaktiviere dich solange bis ich mit mein Programm arbeite…<BR>
    <BR>
    <BR>
    Gruß + Danke,
    Muammer Oda

  • #2
    In deinem Form überschreibst du .CreateParams() und rufts darin inherited CreateParams() auf. Danach setzt du das .Style Field um, so daß es ws_Popup enthält.<br>

    In meinen Projekten mit ähnlichen Problemen hat das geholfen.<br>

    Normalerweise müsstest du dem Application Object in deiner DLL ein neues Handle verpassen, das auf das Hauptformular der externen Anwendung zeigt. Da ich aber vermute das die keine mit Delphi gecodete App ist, sind damit garantiert Seiteneffekte zu erwarten.<br>

    Gruß hage

    Comment


    • #3
      Hallo Hagen,<Br>
      danke für deine schnelle Antwort. Leider bin ich grade nicht ein Delphi experte, ich bemühe mich. Was ich sagen will ist kannst du mir eine Beispiel code schreiben?<BR>
      <BR>
      Gruß + DANKE!<BR>
      Muammer Oda<BR&gt

      Comment


      • #4
        Achja, für den Anfang mal mit dem hier probieren.

        <pre>

        <code><font size=2 face="Courier New"><b>type
        </b>TForm1 = <b>class</b>(TForm)
        <b>protected
        procedure </b>CreateParams(<b>var </b>Params: TCreateParams); <b>override</b>;
        <b>end</b>;
        <br>
        <b>procedure </b>TForm1.CreateParams(<b>var </b>Params: TCreateParams);
        <b>begin
        inherited </b>CreateParams(Params);
        Params.Style := Params.Style <b>or </b>ws_PopupWindow;
        <b>end</b>;
        </font>
        </code></pre>

        Gruß Hage

        Comment

        Working...
        X