![]() |
Übergabe eines Objekts an Prozedur/Funktion
Servus,
ich möchte ein Objekt an eine Prozedur/Funktion übergeben und damit dort weiter arbeiten. Um auf ein Objekt zugreifen zu können muss mit is und as umgewandelt (gecastet) werden, es könnte aber alles mögliche an Objekten kommen (Label, Buttons, Forms, etc.) , die nur via Handle weiterbearbeitet werden sollen. Ein Zugriff scheint ohne Umwandlung aber nicht möglich. Wie kann man nun auf ein beliebiges Objekt zugreifen ohne alle Möglichkeiten überprüfen zu müssen, wie gesagt, es wird lediglich der Handle benötigt, den ja jedes Objekt hat. Delphi Version 6. Gruß relocate |
Re: Übergabe eines Objekts an Prozedur/Funktion
Die Objekte mit Handle sollten wohl alle von TWinControl abstammen, das wäre also ein gemeinsamer Vorfahre mit dem du ohne casten auskommst.
Grüsse, Dirk |
Re: Übergabe eines Objekts an Prozedur/Funktion
Prüfte und caste alles auf TComponentsTWinControl, oder irgendeinen anderen gemeinsamen Vorfahren, welcher das Handle zugänglich macht.
[edit] wo kommt denn Tryers Beitrag plötlich her :shock: aber mit TWinControl könnte er Recht haben TWinControl |
Re: Übergabe eines Objekts an Prozedur/Funktion
Stichwort RTTI. Mit den Funktionen aus der TypeInfo.pas-Unit kannst du aus Properties von Objekten zugreifen ohne auf ihren Typ zu casten. Machte die Delphi-IDE bzw. VCL auch im großen Maße.
|
Re: Übergabe eines Objekts an Prozedur/Funktion
RTTI ist ntürlich sehr mächtig, wäre hier aber imo die Lösung mit dem Vorschlaghammer.
TWinControl ist als die Basisklasse definiert in der Windows - Fensterobjekte (Handle) eingeführt werden. Per RTTI könnte ich herausfinden das es vielleicht auch noch irgendwo ein TPersistent gibt das auch eine Eigenschaft Handle hat, aber ob das dann wirklich ein gültiges Fensterhandle ist kann ich nur durch Try&Error herausfinden (TBitmap.Handle, THandleStream..). Grüsse, Dirk |
Re: Übergabe eines Objekts an Prozedur/Funktion
Danke für die Tipps, werde das mit den TwinControls mal probieren und
wenn das nicht ausreicht mit dem Vorschlaghammer arbeiten. :-D Gruß relocate |
Re: Übergabe eines Objekts an Prozedur/Funktion
Dann aber Vorsicht mit "Handle"-Properties von Objekten, die nicht von TWinControl abstammen - wie Tryer schon sagte. TBitmap.Handle ist z.B. ein HDC, kein HWnd, und kann demnach auch nicht wie ein solches mit den Fenster-APIs be-/verarbeitet werden. Was "Handle" heisst, muss nicht zwangsweise ein Fensterhandle sein, da gibt's mehrere. Mit TWinControl bist du da auf der sicheren Seite. Oder du musst dann via RTTI den Typ noch prüfen, und ggf. noch bei Windows nachfragen, da ich problemlos ein HWnd Property machen könnte, in dem einfach mal Murks liegt, von dem Windows gornüscht weiss.
|
Re: Übergabe eines Objekts an Prozedur/Funktion
Zitat:
![]() |
Re: Übergabe eines Objekts an Prozedur/Funktion
Zitat:
Dann wäre die Aussage nur: ja, es gibt auch ein Fenster mit diesem Handle - nur ob du dich für dieses Fenster wirklich interessierst kann dir niemand sagen. Das Handle ist dann auch nur der Griff zum wegschmeissen. Grüsse, Dirk |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:29 Uhr. |
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