Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Nicht alle Controls vorhanden (https://www.delphipraxis.net/161469-nicht-alle-controls-vorhanden.html)

EWeiss 5. Jul 2011 09:32

Nicht alle Controls vorhanden
 
Warum wird mir bei der Übergabe von
Delphi-Quellcode:
ComboHook.SetComboParentObj(self);


nicht alle Controls an meiner DLL weitergeleitet?

Kann es sein weil das Object als TWinControl definiert ist?
Und demnach auch nur TWinControls dann sichtbar sind.

Was sonst nehmen ? Bei TObject habe ich kein Handle..

Zur besseren verständigung.
Ich möchte alle Controls/Komponente oder wie auch immer die sich auf der Form1
befinden an meine DLL weiterleiten (Liste) so das ich dann auswerten kann ob hier ComboBoxen verwendet werden.

Es kommt aber nur TComponent und TControl an.
Es fehlt TWinControl, TCustomForm, Memo1, ComboBox1, ComboBox2
obwohl sie sich ja eigentlich in Self(Form1) befinden.



gruss

EWeiss 5. Jul 2011 18:39

AW: Nicht alle Controls vorhanden
 
Hat wirklich niemand eine Idee wie ich meiner DLL mitteilen kann welche
komponente sich auf meiner Form befinden so das ich sie dort weiterverarbeiten (parsen) kann?.

Oder ist meine Frage einfach nicht verständlich genug ;)
Kann ja sein!

gruss

bernerbaer 5. Jul 2011 18:51

AW: Nicht alle Controls vorhanden
 
Sorry, ich habe keine fertige Lösung parat, aber vielleicht hilft ja FindWindowEx, d.h. du übergibst das Fensterhandle an die dll und durchsuchst in der dll selbst alle Childs und prüfst deren Klassenname. (msdn findwindowex)

EWeiss 5. Jul 2011 18:59

AW: Nicht alle Controls vorhanden
 
Zitat:

Zitat von bernerbaer (Beitrag 1110147)
Sorry, ich habe keine fertige Lösung parat, aber vielleicht hilft ja FindWindowEx, d.h. du übergibst das Fensterhandle an die dll und durchsuchst in der dll selbst alle Childs und prüfst deren Klassenname. (msdn findwindowex)

Brauche keine fertige Lösung ;)
Das kann ich selbst.. Nur ich habe ein problem mit der von mir gestellten Frage.


Ich habe doch alle Daten in der Variable "SELF" Warum kann ich diese nicht so wie sie sind
wenn man den Mauszeiger über "SELF" hält und als ToolTip angezeigt bekommt in meine DLL übergeben?
Da kommen nur bruchstücke der komponenten an die auf der Form plaziert sind..

Ist mir zu hoch :)

gruss

Luckie 5. Jul 2011 19:03

AW: Nicht alle Controls vorhanden
 
Moment. Deine DLL kennt doch das Form-Objekt gar nicht, weil sie einen anderen Speichermanager hat. Das heißt du kannst kein Objekt an einer DLL übergeben. Es sei denn du nutz die Sharemem.dll von Borland als Speichermanager.

bernerbaer 5. Jul 2011 19:10

AW: Nicht alle Controls vorhanden
 
Zitat:

Zitat von Luckie (Beitrag 1110152)
Moment. Deine DLL kennt doch das Form-Objekt gar nicht, weil sie einen anderen Speichermanager hat. Das heißt du kannst kein Objekt an einer DLL übergeben. Es sei denn du nutz die Sharemem.dll von Borland als Speichermanager.

--> deshalb mein Vorschlag die Auflistung in der dll selbst vorzunehmen.

EWeiss 5. Jul 2011 19:25

AW: Nicht alle Controls vorhanden
 
Zitat:

Zitat von Luckie (Beitrag 1110152)
Moment. Deine DLL kennt doch das Form-Objekt gar nicht, weil sie einen anderen Speichermanager hat. Das heißt du kannst kein Objekt an einer DLL übergeben. Es sei denn du nutz die Sharemem.dll von Borland als Speichermanager.

Habe mir eine kleine TestAnwendung für das problem in VB geschrieben.
um mal in erfahrung zu bringen woran das in Delphi liegen könnte.

Wenn ich hier meine Form(ME, SELF in Delphi) als Objekt übergebe bekomme ich einen pointer auf das Object. ObjPtr(ME)
Anschließend kann ich mit CopyMemory auf jede XBeliebige Komponente meiner MAIN Form zugreifen.
Und diese über den ClassenNamen und FindWindowEx analysieren welche oder ob überhaupt ComboBoxen auf der Form vorhanden sind.

Anschließend definiere ein Variable (ctrl as Control) und prüfe mit "for each ctrl in ParentObj" ob sich komponente auf der Form befinden.
Warum ist das in Delphi so kompliziert?
Wo beleibt da der Fortschritt ?..

Zitat:

deshalb mein Vorschlag die Auflistung in der dll selbst vorzunehmen.
Hallo ich tue nichts anderes :)
Aber dafür muss ich erstmal Kontrols(in einer Liste) zur verfügung haben die ich parsen bzw.. auswerten kann.
Das wollte ich halt mit der Liste von Self erledigen da steht doch alles schon drin also Combo1, Combo2 usw..

UNd das geht nicht wegen dem Speichermanagement?


EDIT:
@bernerbaer

Und du meinst SELF außer acht lassen.
Davon nur das Handle nehmen und anschließend über dieses alle Komponente enumerieren.?
Hmm.. wäre dann wohl die einzigste möglichkeit.
Sharemem will ich nicht einsetzen.

Ok. Danke! Werd es mal so testen.


gruss

bernerbaer 5. Jul 2011 19:54

AW: Nicht alle Controls vorhanden
 
Zitat:

Zitat von EWeiss (Beitrag 1110156)
.....
@bernerbaer

Und du meinst SELF außer acht lassen.
Davon nur das Handle nehmen und anschließend über dieses alle Komponente enumerieren.?
...

ja, das war mein Grundgedanke.

Luckie 5. Jul 2011 19:55

AW: Nicht alle Controls vorhanden
 
Probleme hast du dann aber bei nicht von TWinControl abgeleiteten Komponenten. Also zum Beispiel Labels und ähnliches. Diese Steuerelemente haben kein Handle. man kann sie also nicht mit FindWindwoEx finden.

EWeiss 5. Jul 2011 19:56

AW: Nicht alle Controls vorhanden
 
Zitat:

Zitat von bernerbaer (Beitrag 1110165)
Zitat:

Zitat von EWeiss (Beitrag 1110156)
.....
@bernerbaer

Und du meinst SELF außer acht lassen.
Davon nur das Handle nehmen und anschließend über dieses alle Komponente enumerieren.?
...

ja, das war mein Grundgedanke.

Danke schön denke so wird das gehn ;)

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:44 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz