Announcement

Collapse
No announcement yet.

Aktive Form ermitteln

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

  • Aktive Form ermitteln

    Gibt es irgendeine Möglichkeit im C++ Builder 4 oder überhaupt in C++ die gerade aktive Form zu ermitteln um sie dann zuweisen zu können?

    So ungefähr:

    <p><font face="Courier New" size="2">AktiveForm = ????</font></p>

    Wäre schön wenn mir einer von euch helfen könnte. Danke im Voraus.
    Gruß Roman

  • #2
    Bin schon etwas weiter gekommen. Jedoch funktioniert das ganze noch nicht. Vielleicht kann mir jemand helfen. Danke. Gruß Roman

    <p><font face="Courier New" size="2"><b>void __fastcall</b> TForm1::Button1Click(TObject *Sender)<br>
    {<br>
    &nbsp;&nbsp;&nbsp; HWND AktForm;<br>
    &nbsp;&nbsp;&nbsp; AktForm&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = GetActiveWindow();<br>
    &nbsp;&nbsp;&nbsp; <b>int</b> left&nbsp;&nbsp;&nbsp;&nbsp; = 100;<br>
    &nbsp;&nbsp;&nbsp; <b>int</b> top&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 100;<br>
    &nbsp;&nbsp;&nbsp; <b>int</b> width&nbsp;&nbsp;&nbsp; = 100;<br>
    &nbsp;&nbsp;&nbsp; <b>int</b> height&nbsp;&nbsp; = 100;<br>
    &nbsp;&nbsp;&nbsp; AktForm-&gt;SetBounds(left, top, width, height);<br>
    }</font></p>
    &#10

    Comment


    • #3
      Hi,<br>
      möchtest Du aus Deiner eigenen Anwendung mit mehreren Fenstern das aktive herausfinden, oder das aktive Fenster aus dem gesamten Windowssystem?

      Gruß Thorste

      Comment


      • #4
        Entschuldige, daß ich mich so lange nicht gemeldet habe. Wir hatten Probleme mit dem Netz.

        Zu deiner Frage. Während eines FormCreate Ereignisses soll eine DLL die erforderlichen Daten zu dieser TForm aus der Registry auslesen. Das Problem dabei ist, daß die DLL nicht weiß wie die Form heißt und kann somit nicht die Richtigen Funktionen ausführen. So will ich z. B. die Funktion SetBounds(...) einsetzen und dafür brauche ich ja ein Objekt. Und dieses Objekt soll die gerade gestartete Form sein. Verstehst du was ich meine? Ich wäre Dir sehr dankbar, wenn Du mir helfen könntest. Gruß Roma

        Comment


        • #5
          Hi,<br>
          wenn ich Dich richtig verstanden habe, rufst Du die DLL doch aus Deinem Programm in z.B. FormCreate auf. Dann kannst Du doch beim Aufruf der Dll den Zeiger des Forms (this) übergeben . Nun kannst Du aus Deinem Form alle nötigen Daten für die Registry auslesen (denn ich denke das jedes Form einen eigenen Registryeintrag hat) und entsprechend die Daten dem Form zuweisen, indem Du auf TForm castest oder ServiceRoutinen in deinem Form implementierst.

          Gruß Thorste

          Comment


          • #6
            Hallo Thorsten,

            ja das stimmt was Du sagst. Nur weiß ich nicht genau, wie ich "this" richtig einsetzten kann um der DLL einen Verweis auf die Form zu geben. Vielleicht kannst Du mir sagen, wie das geht? Danke im Voraus.

            Gruß Roma

            Comment


            • #7
              Hallo Roman,<br>
              ich hatte mir das in etwa so gedacht:<br>

              DLL:

              <pre>
              void MyDll::SetForm(void *Pointer)
              {
              TMyForm *Form;

              Form = dynamic_cast<TMyForm*>(Pointer);
              if(Form){
              //bearbeite Formular
              }
              else{
              //hier Möglichkeit andere Anwendungen oder Formulare zu bearbeiten die nicht von TMyForm abgeleitet sind oder weitere //Funktionen besitzen
              }
              }
              </pre>
              Aufgerufen wird die Funktion dann aus dem Formular

              <pre>
              void TMyForm::Fkt()
              {
              ...
              Dll->SetForm(this);

              ...
              }
              </pre>
              Das ist das was mir so spontan einfällt. Ich denke in manchen Fällen wird das nicht ganz so praktikabel sein, aber es gibt bestimmt noch andere Lösungsansätze.

              Gruß Thorste

              Comment

              Working...
              X