AGB  ·  Datenschutz  ·  Impressum  







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

Compiler erkennt TControl.PopupMenu nicht

Ein Thema von hoika · begonnen am 28. Jul 2009 · letzter Beitrag vom 29. Jul 2009
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#11

Re: Compiler erkennt TControl.PopupMenu nicht

  Alt 29. Jul 2009, 10:25
Naja wenn Du es inline in der Methode machst...

Delphi-Quellcode:
procedure WhatEver;

  type
    TControlAccess = class(TControl)
    public
      property PopupMenu: ....;
    end;

var
  Control: TControl;
begin
  TControlAccess(Control).PopupMenu := ...;
end;
Alternativ könnte man doch die Eigenschaft über RTTI versuchen abzugreifen...

Viele Grüße
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.746 Beiträge
 
Delphi 2007 Professional
 
#12

Re: Compiler erkennt TControl.PopupMenu nicht

  Alt 29. Jul 2009, 10:26
Zitat von hoika:
ja dein Compiler sagt das, meiner noch nicht (D6)
Na, das ist ja schwach.

Zitat von hoika:
Wie soll das mit dem THackControl denn laufen,
wenn es auch von TControl abgeleitet ist ?
Es sei denn, du machst das property PopupMenu noch public.
Nö, das ist ja der Trick. Das:
Delphi-Quellcode:
type
  THACK_Control = class(TControl);
ist die komplette Typdefinition - keine Member, Property-Redeklarationen oder sonstwas.
Jetzt hast du eine Klasse in der aktuellen Unit - und innerhalb einer Unit beschränkt protected den Zugriff nicht - im Gegensatz zu "strict protected". D.h das Member PopupMenu von THACK_Control ist in der aktuellen Unit de facto public. Und wegen der einfach gestrickten Definition von THACK_Control ist ein TControl auch (fast ) ein THACK_Control, also geht auch der Cast i.O.

Zitat von hoika:
Das gefällt mir aber gar nicht ...
Da ist nichts wirklich Gefährliches dran. Der Entwickler von TControl hat ja schon entschieden, dass er dir die Möglichkeit des Zugriffs auf PopupMenu gibt, indem er es protected gemacht hat.
Uli Gerhardt
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.746 Beiträge
 
Delphi 2007 Professional
 
#13

Re: Compiler erkennt TControl.PopupMenu nicht

  Alt 29. Jul 2009, 10:31
Zitat von mirage228:
Delphi-Quellcode:
procedure WhatEver;

  type
    TControlAccess = class(TControl)
    public
      property PopupMenu: ....;
    end;

var
  Control: TControl;
begin
  TControlAccess(Control).PopupMenu := ...;
end;
Ob du
Delphi-Quellcode:
type
  THACK_Control = class(TControl);
oder
Delphi-Quellcode:
type
  THACK_Control = class(TControl)
  public
    property PopupMenu;
  end;
schreibst, macht null Unterschied.

Zitat von mirage228:
Alternativ könnte man doch die Eigenschaft über RTTI versuchen abzugreifen...
Das würde vermutlich funktionieren, wäre aber mit Kanonen auf Spatzen geschossen - sowohl vom Codieren als auch von der Laufzeit her.
Uli Gerhardt
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#14

Re: Compiler erkennt TControl.PopupMenu nicht

  Alt 29. Jul 2009, 10:36
Ja an das mit den "class friends" innerhalb einer Unit habe ich nicht gedacht, da sind unsere Lösungen natürlich völlig equivalent.

Also ich würde wohl bei dem selben Vorhaben wohl auch nicht RTTI nehmen, wollte das aber auch nicht ungenannt lassen...
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#15

Re: Compiler erkennt TControl.PopupMenu nicht

  Alt 29. Jul 2009, 10:38
Hallo,

friend class, stimmt
Netter Trick.

Kenne mich mit Delphi nicht so aus


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.746 Beiträge
 
Delphi 2007 Professional
 
#16

Re: Compiler erkennt TControl.PopupMenu nicht

  Alt 29. Jul 2009, 10:43
Zitat von mirage228:
Ja an das mit den "class friends" innerhalb einer Unit habe ich nicht gedacht, da sind unsere Lösungen natürlich völlig equivalent.
Jo. 8)

Zitat von mirage228:
Also ich würde wohl bei dem selben Vorhaben wohl auch nicht RTTI nehmen, wollte das aber auch nicht ungenannt lassen...
Für etwas schwierigere Fälle ist das auch der gangbarere Weg.

Zitat von hoika:
Kenne mich mit Delphi nicht so aus
Man lernt nie aus.
Uli Gerhardt
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 12:56 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