AGB  ·  Datenschutz  ·  Impressum  







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

Übergabe eines Objekts an Prozedur/Funktion

Ein Thema von relocate · begonnen am 20. Mai 2010 · letzter Beitrag vom 20. Mai 2010
Antwort Antwort
relocate

Registriert seit: 26. Mai 2009
60 Beiträge
 
#1

Übergabe eines Objekts an Prozedur/Funktion

  Alt 20. Mai 2010, 11:22
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
  Mit Zitat antworten Zitat
Tryer

Registriert seit: 16. Aug 2003
200 Beiträge
 
#2

Re: Übergabe eines Objekts an Prozedur/Funktion

  Alt 20. Mai 2010, 11:26
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.139 Beiträge
 
Delphi 12 Athens
 
#3

Re: Übergabe eines Objekts an Prozedur/Funktion

  Alt 20. Mai 2010, 11:31
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
aber mit TWinControl könnte er Recht haben TWinControl
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Übergabe eines Objekts an Prozedur/Funktion

  Alt 20. Mai 2010, 11:44
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Tryer

Registriert seit: 16. Aug 2003
200 Beiträge
 
#5

Re: Übergabe eines Objekts an Prozedur/Funktion

  Alt 20. Mai 2010, 11:51
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
  Mit Zitat antworten Zitat
relocate

Registriert seit: 26. Mai 2009
60 Beiträge
 
#6

Re: Übergabe eines Objekts an Prozedur/Funktion

  Alt 20. Mai 2010, 12:03
Danke für die Tipps, werde das mit den TwinControls mal probieren und
wenn das nicht ausreicht mit dem Vorschlaghammer arbeiten.

Gruß relocate
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: Übergabe eines Objekts an Prozedur/Funktion

  Alt 20. Mai 2010, 13:09
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.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von implementation
implementation

Registriert seit: 5. Mai 2008
940 Beiträge
 
FreePascal / Lazarus
 
#8

Re: Übergabe eines Objekts an Prozedur/Funktion

  Alt 20. Mai 2010, 13:46
Zitat von Medium:
Was "Handle" heisst, muss nicht zwangsweise ein Fensterhandle sein, da gibt's mehrere. ... Oder du musst dann via RTTI den Typ noch prüfen, und ggf. noch bei Windows nachfragen, ...
MSDN-Library durchsuchenIsWindow könnte dann evtl. helfen.
  Mit Zitat antworten Zitat
Tryer

Registriert seit: 16. Aug 2003
200 Beiträge
 
#9

Re: Übergabe eines Objekts an Prozedur/Funktion

  Alt 20. Mai 2010, 17:28
Zitat von implementation:
MSDN-Library durchsuchenIsWindow könnte dann evtl. helfen.
Mit Betonung auf "könnte", muß nämlich nicht. Der Wert des Handles ist genauso eindeutig wie der Index eines Strings in einer TStringlist - im falschen Kontext (einer anderen Liste) kann etwas ganz anderes (ebenfalls existierendes) dahinter stecken.
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
  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:17 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