AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Delphi Verwendung der Variablen "Handle" aus Unit "Controls" in Klasse funktioniert nicht
Thema durchsuchen
Ansicht
Themen-Optionen

Verwendung der Variablen "Handle" aus Unit "Controls" in Klasse funktioniert nicht

Ein Thema von FriendOfDelphi · begonnen am 27. Jul 2010 · letzter Beitrag vom 6. Aug 2010
Antwort Antwort
FriendOfDelphi

Registriert seit: 21. Mai 2010
163 Beiträge
 
Delphi 5 Professional
 
#1

Verwendung der Variablen "Handle" aus Unit "Controls" in Klasse funktioniert nicht

  Alt 27. Jul 2010, 09:42
Hallo Allerseits,

ich habe eine Frage zu der Variablen "Handle".

Wenn ich mit dem Mauszeiger in der IDE über die Variable fahre, erhalte ich die Information "prop TWinControl.Handle - Control.pas".
Sofern ich dies richtig interpretiere, dann bedeutet dies, dass diese Variable in der Delphi Standard Unit "Controls" definiert ist.

Soweit so gut.

Ich habe nun folgendes Problem:

Schreibe ich ein Programm, in welchem die Variable "Handle" verwendet wird prozedural, also mit Funktionen und Prozeduren, so funktioniert alles fehlerfrei.

Nun möchte ich das Programm auf Klassen und Objekte umstellen.
Sobald ich den Programmteil, der die Variable "Handle" enthält in eine Klasse auslagere, erhalte ich die Fehlermeldung "Undefinierter Bezeichner: 'Handle'" vom Compiler, obwohl ich natürlich unter uses Controls mit eingebunden habe.

Weiß jemand von Euch was ich falsch mache?
Herzlichen Gruß
FriendOfDelphi
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Verwendung der Variablen "Handle" aus Unit "Controls" in Klasse funktioniert nich

  Alt 27. Jul 2010, 09:50
Zitat:
verwendet wird prozedural, also mit Funktionen und Prozeduren, so funktioniert alles fehlerfrei.
Sicher daß du prozedual meinst und nicht "Methode meiner Form" ?

Handle in soeiner Methode entspricht self.Handle , also z.B. Form1.Handle ... jedes (fast) WinControl enthält ein "Handle", bzw ein Property names Handle, über welches man von der VCL auf das enthaltene/gekapselte Windows-Control zugreifen kann.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
FriendOfDelphi

Registriert seit: 21. Mai 2010
163 Beiträge
 
Delphi 5 Professional
 
#3

AW: Verwendung der Variablen "Handle" aus Unit "Controls" in Klasse funktioniert nich

  Alt 27. Jul 2010, 13:05
Sicher daß du prozedual meinst und nicht "Methode meiner Form" ?
Ja, richtig. Ist in einer ganz normalen procedure TForm1.FormCreate(Sender: TObject);
Handle in soeiner Methode entspricht self.Handle , also z.B. Form1.Handle ... jedes (fast) WinControl enthält ein "Handle", bzw ein Property names Handle, über welches man von der VCL auf das enthaltene/gekapselte Windows-Control zugreifen kann.
Nun habe ich mir eine Klasse gebaut und will das Ganze im Konstruktor unterbringen:
constructor TKlassenName.Create; Die Funktion selbst sieht so aus:
Delphi-Quellcode:
AdsResult :=AdsSyncAddDeviceNotificationReq( @LocalAddr,
                 ADSIGRP_SYM_VALBYHND,
                 varDaHandle,
                 @adsNotificationAttrib,
                 @NotificationCallback, Handle, @hNotificationDa );
Vielleicht habe ich Dich noch nicht richtig verstanden, aber die vorgeschlagene Änderung von Handle in self.Handle , bzw. TKlassenName.Handle funktioniert so nicht.
.Handle ist nicht bekannt.
Herzlichen Gruß
FriendOfDelphi
  Mit Zitat antworten Zitat
blackfin
(Gast)

n/a Beiträge
 
#4

AW: Verwendung der Variablen "Handle" aus Unit "Controls" in Klasse funktioniert nich

  Alt 27. Jul 2010, 13:09
Das CodeInsight sagt dir ja nur, dass "handle" deines Controls in der unit "classes.pas" deklariert ist.
Handle ist hier die Eigenschaft des Controls, aber nicht der Variablen-Typ.
Der ist nämlich HWND und ist in der unit windows deklariert.

Edit:
Wenn deine Klasse nicht von TWinControl abgeleitet ist, dann hat sie auch kein Handle.
In deiner FormCreate()-Funktion bezieht sich ja das Handle auf das der Form, nicht deiner Klasse.
Brauchst du das Handle der Form in der Klasse, musst du diese dem Konstruktor übergeben, z.B:

Delphi-Quellcode:
constructor TKlassenName.Create(AOwner: TWinControl);
begin
 AdsResult :=AdsSyncAddDeviceNotificationReq( @LocalAddr,
                 ADSIGRP_SYM_VALBYHND,
                 varDaHandle,
                 @adsNotificationAttrib,
                 @NotificationCallback, AOwner.Handle, @hNotificationDa );
end;
Und in der Form rufst du den Konstruktor dann mit
Klasse := TKlassenName.Create(self); auf.

Geändert von blackfin (27. Jul 2010 um 13:15 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Verwendung der Variablen "Handle" aus Unit "Controls" in Klasse funktioniert nich

  Alt 27. Jul 2010, 13:16
Ja, richtig. Ist in einer ganz normalen procedure TForm1.FormCreate(Sender: TObject);
also sind es Methoden

Tja, und das Handle gehört nunmal zu deiner TForm1-Klasse.

Self ist immer die Klasse, bzw. das Objekt, in welcher sich die Methode befindet.
Also das Self in deiner TKlassenName zeigt auf die TKlassenName (bzw. auf das davon erstellte Objekt).
Und das Self in deiner TForm1 zeigt auf das TForm1-Objekt.


Zitat:
bzw. TKlassenName.Handle funktioniert so nicht.
.Handle ist ein Property des Objekts und nicht ein Class-Property der Klasse ... es ist also nur über ein Objekt erreichbar.

nicht TKlassenName.Handle sondern ({Objekt von TKlassenName}).Handle
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
FriendOfDelphi

Registriert seit: 21. Mai 2010
163 Beiträge
 
Delphi 5 Professional
 
#6

AW: Verwendung der Variablen "Handle" aus Unit "Controls" in Klasse funktioniert nich

  Alt 3. Aug 2010, 15:15
Zitat:
bzw. TKlassenName.Handle funktioniert so nicht.
.Handle ist ein Property des Objekts und nicht ein Class-Property der Klasse ... es ist also nur über ein Objekt erreichbar.

nicht TKlassenName.Handle sondern ({Objekt von TKlassenName}).Handle
Ja, aber es besteht doch zu dieser Zeit noch kein Objekt.
Der Compiler meldet den Fehler in der Definition des Konstruktors.
Herzlichen Gruß
FriendOfDelphi
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.545 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Verwendung der Variablen "Handle" aus Unit "Controls" in Klasse funktioniert nich

  Alt 3. Aug 2010, 15:23
Wovon ist denn Deine Klasse abgeleitet?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  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:22 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