Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   TCollection = not TCollection ? (https://www.delphipraxis.net/161506-tcollection-%3D-not-tcollection.html)

himitsu 6. Jul 2011 17:20

AW: TCollection = not TCollection ?
 
Delphi-Quellcode:
  for ICtrl := 0 to FParentObj.ComponentCount - 1 do
    begin
      Ctrl := FParentObj.Components[ICtrl];

      If (Ctrl = TComboBox) or
         (Ctrl = TComboBoxEx) or
         (Ctrl = TDBLookupCombo) or
         (Ctrl = TDriveComboBox) then
      begin
         CtrHwnd := FindWindowEx(FParentObj.Handle, 0, PChar(Ctrl.ClassName), nil);
      end;
Und falls auch die Nachfahren der Kombonenten mit erwischt werden sollten, dann
Delphi-Quellcode:
 is
statt
Delphi-Quellcode:
 =
.


PS:
Zitat:

PWideChar
FindWindowEx + PChar + String
oder
FindWindowExW + PWideChar + WideString/UnicodeString

PSS: Delphi-Referenz durchsuchenFindControl macht aus einem HWND ein TWinControl (aber nur in der eigenen Anwendung!)

Namenloser 6. Jul 2011 17:25

AW: TCollection = not TCollection ?
 
Zitat:

Zitat von himitsu (Beitrag 1110361)
Delphi-Quellcode:
      Ctrl := FParentObj.Components[ICtrl];

      If (Ctrl = TComboBox) or
         (Ctrl = TComboBoxEx) or
         (Ctrl = TDBLookupCombo) or
         (Ctrl = TDriveComboBox) then

Wie wo wat? Das geht doch nicht! Das eine ist ein Objekt, das andere eine Klasse. Wenn schon
Delphi-Quellcode:
Ctrl.Classtype=...
.
Delphi-Quellcode:
is
ist aber sauberer imo.

EWeiss 6. Jul 2011 17:28

AW: TCollection = not TCollection ?
 
Zitat:

Zitat von Stevie (Beitrag 1110359)
Zitat:

Zitat von NamenLozer (Beitrag 1110358)
Zitat:

Zitat von EWeiss (Beitrag 1110354)
Muss mich noch schlau machen wie das funktioniert.
Von dir habe ich leider nichts gefunden

Wenn du eine Version mit integriertem TDictionary besitzt, gibt es eigentlich eh keinen Grund, etwas anderes zu benutzen...

Ab Delphi 2009 siehe Generics.Collections.pas

Habe zwar 2009 aber Generics lassen sich nicht einbinden.

gruss

EWeiss 6. Jul 2011 17:31

AW: TCollection = not TCollection ?
 
Zitat:

Zitat von NamenLozer (Beitrag 1110363)
Zitat:

Zitat von himitsu (Beitrag 1110361)
Delphi-Quellcode:
      Ctrl := FParentObj.Components[ICtrl];

      If (Ctrl = TComboBox) or
         (Ctrl = TComboBoxEx) or
         (Ctrl = TDBLookupCombo) or
         (Ctrl = TDriveComboBox) then

Wie wo wat? Das geht doch nicht! Das eine ist ein Objekt, das andere eine Klasse. Wenn schon
Delphi-Quellcode:
Ctrl.Classtype=...
.
Delphi-Quellcode:
is
ist aber sauberer imo.

Hab ich was verpasst?
Um was geht's ?

Ich bekomme bei meiner abfrage das korrekte Handle.

und das geht gar nicht.

Delphi-Quellcode:
  for ICtrl := 0 to FParentObj.ComponentCount - 1 do
    begin
      Ctrl := FParentObj.Components[ICtrl];

      If (Ctrl = TComboBox) or
         (Ctrl = TComboBoxEx) or
         (Ctrl = TDBLookupCombo) or
         (Ctrl = TDriveComboBox) then
      begin
         CtrHwnd := FindWindowEx(FParentObj.Handle, 0, PChar(Ctrl.ClassName), nil);
      end;
Dann müßte ich nämlich die Controls bzw.. dazugehörige Units mit einbinden.
Ich befinde mich in einer DLL und die Controls in der Anwendung.


gruss

Stevie 6. Jul 2011 18:53

AW: TCollection = not TCollection ?
 
Zitat:

Zitat von EWeiss (Beitrag 1110365)
Zitat:

Zitat von Stevie (Beitrag 1110359)
Zitat:

Zitat von NamenLozer (Beitrag 1110358)
Zitat:

Zitat von EWeiss (Beitrag 1110354)
Muss mich noch schlau machen wie das funktioniert.
Von dir habe ich leider nichts gefunden

Wenn du eine Version mit integriertem TDictionary besitzt, gibt es eigentlich eh keinen Grund, etwas anderes zu benutzen...

Ab Delphi 2009 siehe Generics.Collections.pas

Habe zwar 2009 aber Generics lassen sich nicht einbinden.

Wat?
Delphi-Quellcode:
uses
  Generics.Collections;

EWeiss 6. Jul 2011 19:16

AW: TCollection = not TCollection ?
 
na gut hast mich überzeugt :)

gruss

himitsu 6. Jul 2011 19:20

AW: TCollection = not TCollection ?
 
usp, ja

Delphi-Quellcode:
Ctrl.ClassType = TIrgendwas
or
Delphi-Quellcode:
Ctrl is TIrgendwas
PS: Nur weil Klassen den gleichen Namen haben, müssen sie nicht die selben Klassen-Deklarationen besitzen.
Geh mal raus und frage so lange, bis du einen "Frank" gefunden hast ... mit etwas Glück bin ich das.

EWeiss 6. Jul 2011 19:41

AW: TCollection = not TCollection ?
 
Zitat:

Zitat von himitsu (Beitrag 1110387)
usp, ja

Delphi-Quellcode:
Ctrl.ClassType = TIrgendwas
or
Delphi-Quellcode:
Ctrl is TIrgendwas
PS: Nur weil Klassen den gleichen Namen haben, müssen sie nicht die selben Klassen-Deklarationen besitzen.
Geh mal raus und frage so lange, bis du einen "Frank" gefunden hast ... mit etwas Glück bin ich das.

Da frag ich doch besser nach himitsu..
Ist bestimmt bekannter zumindest nicht 1 zu ner million bis ich dich finde.

Komme auf keinen grünen zweig da ich nicht auf die Objekte der Form direkt zugreifen kann.

gruss

himitsu 6. Jul 2011 20:26

AW: TCollection = not TCollection ?
 
Es handelt sich doch um Komponenten einer Form der eigenen Anwendung?
Wenn ja, dann siehe PSS in #11.

PS: Von Delphi automatisch erzeugt form haben immer Application als Owner, weswegen sie sich auch über Application.Components finden lassen.
Alle anderen delphieigenen TopLevel-Forms sind nochmal über Screens.Forms aufzufinden.



Ach ja, die Variante über den ClassType hat noch den vorteil der Quellcodevervollständigung, beim Schreiben der Namen und das Ganze wird dann auch nochmal über den Kompiler validiert,
wärend man sich bei den Strings nur mal verschreiben braucht (sei es uch nur in der Groß-/Kleinschreibung) und schon wird der Vergleich schnell Mal was von FALSE behaupten.
Abgesehn davon, daß ein Integervergleich ein klein bissl optimaler ist, als ein Stringvergleich.

EWeiss 6. Jul 2011 20:47

AW: TCollection = not TCollection ?
 
Zitat:

Es handelt sich doch um Komponenten einer Form der eigenen Anwendung?
Wenn ja, dann siehe PSS in #11.
Jain..
Die werden in einer DLL ausgewertet.
Das bereitet probleme.

Sagte ja schon ich sende SELF aber das was in Self(eigene Anwendung) steht kommt in der DLL nicht an.
Dann wäre es alles kein problem.

So wie hier von Luckie schon gesagt
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.

Komme ich so ohne weiteres nicht an die objekte heran.

EDIT:
Zitat:

haben immer Application als Owner
Da muss ich nochmal was überdenken.

gruss.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:02 Uhr.
Seite 2 von 4     12 34      

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