AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Forms in DLLs und Packages

Ein Thema von Igotcha · begonnen am 11. Feb 2005 · letzter Beitrag vom 11. Feb 2005
Antwort Antwort
Igotcha

Registriert seit: 22. Dez 2003
544 Beiträge
 
Delphi 2006 Professional
 
#1

Problem mit Forms in DLLs und Packages

  Alt 11. Feb 2005, 09:29
Hallo zusammen,

ich stehe immmer noch vor meinem ungelösten Problem mit der Einbettung von Forms in meine Hauptanwendung.

Nachdem ich mich durch die Variante mit DLLs gekämpft habe und technisch soweit alles funktionierte, musste ich aufgeben, da ich bemerkte, dass es leider ein Problem mit dem Ansprechen von Komponenten auf der DLL-Form über die TAB-Taste gab - das Wechseln von z.B. Eingabefeld zu Eingabefeld per TAB-Taste funktionierte nicht.

Also wurden mir Packages empfohlen.

Habe mich etwas in die Thematik eingearbeitet, meine Forms erscheinen in der Hauptanwendung und schwupps, erneut das Problem mit der TAB-Taste.

So langsam bin ich mit meinem Latein an Ende...

Vielleicht geht das auch gar nicht, was ich möchte, deshalb nochmal hier die Anforderung:

Ich habe eine Mainform mit einem TreeView links als Menübaum, dann einen Splitter und rechts eine freie Fläche (z.B. ein Panel). In genau dieser freien Fläche möchte ich abhängig von der Auswahl im TreeView-Menü ein "Modul" anzeigen lassen - also eine in meine Hauptanwendung eingebettete Form. Ich möchte mich auf dieser eingebetteten Form "ganz normal" mit der TAB-Taste bewegen können.

Ich habe mir die Tutorials über "Plugins" etc. alle durchgelesen und wie gesagt, ist die Technik nicht das Problem, sondern einzig die "Anzeige", denn alle Beispiele gehen von einer separaten Form aus, die dargestellt wird (das bekomme ich hin, ist aber leider nicht meine Anforderung).

Danke und Gruß
Igotcha
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#2

Re: Problem mit Forms in DLLs und Packages

  Alt 11. Feb 2005, 09:35
Hallo igotcha,

ob du ein Form normal anzeigst oder in einem Panel ist egal, es ändert sich ja nur der Parent.
Zu den Tabs: hast du versucht, den Fokus mit Mausklick auf ein Element des Forms im Panel zu setzen, und anschließend mit Tab zu wechseln? Was ist dort passiert?
Du könntest auch probieren, im Programm ein Editfeld auf das Panel zu setzen, und das Form ein Stückchen tiefer auf dem Panel anzeigen. Dann kannst du sehen ob das Editfeld den Fokus bekommt. Falls nicht, dann heißt das, dass beim Panel wahrscheinlich TabStop=False ist.
Ich hoffe ich hab dir ein kleines bisschen weiterhelfen können...

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Igotcha

Registriert seit: 22. Dez 2003
544 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Problem mit Forms in DLLs und Packages

  Alt 11. Feb 2005, 09:59
Zitat von alcaeus:
ob du ein Form normal anzeigst oder in einem Panel ist egal, es ändert sich ja nur der Parent.
Und genau das ist eine Aussage, die ich langsam stark anzweifle, denn dies scheint auf aus externen Quellen (DLLs, Packages) generierten Forms eben genau nicht zuzutreffen!

Selbstverständlich geht es um die "parent"-Eigenschaft. Wenn ich eine Testanwendung mache mit 2 Forms und die zweite dynamisch erstelle (mit "parent" auf z.B. "Panel1"), dann geht das nämlich auch wunderbar.

Zitat:
Zu den Tabs: hast du versucht, den Fokus mit Mausklick auf ein Element des Forms im Panel zu setzen, und anschließend mit Tab zu wechseln? Was ist dort passiert?
Der Focus landet prompt im Hauptfenster und kommt auch nicht mehr auf die eingebettete Form per TAB zurück. Übrigens funktionieren auch die Cursortasten (links, rechts) nicht.

Zitat:
Falls nicht, dann heißt das, dass beim Panel wahrscheinlich TabStop=False ist.
Mit "TabStop" habe ich ebenfalls erfolglos rumgespielt.

Ich habe auch schon das "Application"-Objekt an die DLL bzw. das Package übergeben, aber bisher ohne Erfolg.

Gruß Igotcha
  Mit Zitat antworten Zitat
Igotcha

Registriert seit: 22. Dez 2003
544 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Problem mit Forms in DLLs und Packages

  Alt 11. Feb 2005, 11:39
Ich füge mal meinen BPL-Versuch bei.

Vielleicht hat ja jemand einen Ansatz.

Gruß Igotcha
Angehängte Dateien
Dateityp: rar bpl-test_690.rar (219,6 KB, 10x aufgerufen)
  Mit Zitat antworten Zitat
KrasserChecker

Registriert seit: 21. Jul 2004
120 Beiträge
 
#5

Re: Problem mit Forms in DLLs und Packages

  Alt 11. Feb 2005, 12:06
Versuchs mal hiermit:

in der Unit controls.pas folgende Methode ergänzen:

Delphi-Quellcode:
function GetControlAtom : Pointer;

function GetControlAtom : Pointer;
begin
  Result := @ControlAtom;
end;
Jetzt brauchst Du noch 2 Methoden in der DLL, eine um den Wert zu setzen und eine um den alten Wert wiederherzustellen:

Delphi-Quellcode:
locOldAtom: Integer = -1;

function Init(iRealControlAtom : Integer): Boolean; stdcall;
var P: PWord;
begin
  Result := False;

  // TApplication ermittelt für das Verarbeiten einiger Messages die richtige Komponente
  // über einen globalen "Atom". Der ist aber leider prozesspezifisch. D.h., dass er in
  // einer Anwendung bestens funktioniert. Sobald aber (wie hier) eine DLL dazukommt
  // wird innerhalb der DLL ein neuer eigener "Atom" initialisiert. Um trotzdem richtig
  // arbeiten zu können teilen wir daher unserer DLL den "Atom" der Anwendung mit.
  // Dazu haben wir uns in "controls.pas" gehackt und die Datei um eine neue Methode
  // erweitert:
  // function GetControlAtom : Pointer;
  // begin
  // Result := @ControlAtom;
  // end;
  P := GetControlAtom;
  locOldAtom := P^;
  P^ := iRealControlAtom;

  Result := True;
end;

procedure Uninit;
var P: PWord;
begin
  if locOldAtom<>-1 then
  begin
    P := GetControlAtom;
    P^ := locOldAtom;
  end;
end;
Was da eigentlich passiert (und warum) steht ja oben im Quelltext als Kommentar.
  Mit Zitat antworten Zitat
Benutzerbild von Binärbaum
Binärbaum

Registriert seit: 19. Jan 2005
Ort: Elstra
764 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Problem mit Forms in DLLs und Packages

  Alt 11. Feb 2005, 22:41
Zitat von Igotcha:
Mit "TabStop" habe ich ebenfalls erfolglos rumgespielt.
Es gibt ja auch noch TabOrder, wenn ich mich recht erinnere. Dort muss ein Wert >0 eingetragen sein, damit man das Panel (oder was auch immer) mit Tab erreicht.

MfG
Binärbaum
There are exactly 10 kinds of people: those who understand binary, and those who don't.
---
"Software reift beim Kunden. Bei Hardware ist es anders: Hardware fault beim Kunden." - Rainer G. Spallek
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz