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 1 von 2  1 2      
hoika

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

Compiler erkennt TControl.PopupMenu nicht

  Alt 28. Jul 2009, 19:10
Hallo,

folgender Code wird nicht compiliert,
weil der Compiler PopupMenu moniert (existiert nicht).

Delphi-Quellcode:
procedure TForm_Base.SetExportPopMenu;
var
  iComponent : Integer;
  Component : TComponent;
  Control : TControl;
begin
  for iComponent:= 0 to ComponentCount-1 do
  begin
    Component:= Components[iComponent];
    if (Component is TListView) or
       (Component is TVirtualStringTree) then
    begin
      Control:= TControl(Component);
      if Control.PopupMenu=NIL then // hier meckert er
      begin
        PopupMenu:= TPopupMenu.Create(ListView);
        Control.PopupMenu:= PopupMenu;
      end;
Nehme ich statt dessen Control:= TControl(Component)

Delphi-Quellcode:
with Component as TControl do
      begin
        if PopupMenu=NIL then
        begin
          MyPopupMenu:= TPopupMenu.Create(Control);
          PopupMenu:= MyPopupMenu;
        end;
      end;
klappt es.

Ich hätte aber gern die 1. Code.
Ich mage dieses RTTI hier nicht so.

Es handelt sich um das Original TControl (unit Controls).


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#2

Re: Compiler erkennt TControl.PopupMenu nicht

  Alt 28. Jul 2009, 19:17
Es gibt doch auch noch ControlCount, wenn ich nicht irre (hab gerade kein Delphi zur Hand).
Delphi-Quellcode:
procedure TForm_Base.SetExportPopMenu;
var
  iComponent : Integer;
  Control : TControl;
begin
  for iComponent:= 0 to ControlCount-1 do
  begin
    Control:= Controls[iComponent];
    if ((Control is TListView) or
        (Control is TVirtualStringTree)) and not Assigned(Control.PopupMenu) then
    begin
      PopupMenu:= TPopupMenu.Create(ListView);
      Control.PopupMenu:= PopupMenu;
    end;
  end;
end;
Wie angedeutet nur heruntergetippt.
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
hoika

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

Re: Compiler erkennt TControl.PopupMenu nicht

  Alt 28. Jul 2009, 19:26
Hallo,

Controls: wieder was dazugelernt

gleiche Fehlermeldung:
Assigned(Control.PopupMenu)

undefinierter Bezeichner PopupMenu

*ratlos*



Heiko
Heiko
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

Re: Compiler erkennt TControl.PopupMenu nicht

  Alt 28. Jul 2009, 19:33
Da wird TControl.PopupMenu wohl protected sein
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#5

Re: Compiler erkennt TControl.PopupMenu nicht

  Alt 28. Jul 2009, 20:22
Hallo Heiko,

deine zweiter Code im Beitrag #1 funktioniert nicht wirklich, es scheint nur so. Du setzt damit lediglich das Popup-Menü des Formulars und lieferst gleichzeitig ein schönes Beispiel für die Tücken der WITH-Anweisung.

Gruß Hawkeye
  Mit Zitat antworten Zitat
hoika

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

Re: Compiler erkennt TControl.PopupMenu nicht

  Alt 28. Jul 2009, 20:35
Hallo,

das habe ich auch schon gemerkt.
Wie muss es denn richtig heissen ?

Ich dreh hier noch durch.
So eine Zeitverschwendung für das bischen Scheiss !! (Tschuldigung)

Warum findet der PopupMenu nicht ???

Wie soll ich dass denn sonst für einen ListView zur Laufzeit setzen ????

#Update:#
Nicht zu fassen, ist doch tatsächlich protected.


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von FaTaLGuiLLoTiNe
FaTaLGuiLLoTiNe

Registriert seit: 3. Jul 2004
Ort: NRW
55 Beiträge
 
Delphi XE Enterprise
 
#7

Re: Compiler erkennt TControl.PopupMenu nicht

  Alt 28. Jul 2009, 20:44
Wenn du das PopupMenu nur für 2 bestimmte Komponententypen setzen willst dann wäre es doch auch nicht zuviel Aufwand, beide Fälle seperat zu behandeln, oder? Also erst auf TListView prüfen, im Erfolgsfall dann explizit nach TListView casten und Menü zuweisen. Dasselbe dann für TVirtualStringTree.
Christian
<< FaTaLGuiLLoTiNe >>
Rhinoceroses don't play games!
  Mit Zitat antworten Zitat
hoika

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

Re: Compiler erkennt TControl.PopupMenu nicht

  Alt 28. Jul 2009, 21:22
Hallo,

der Code wird sich noch ändern.
Ich muss halt leider doch immer auf die jeweilige Komponente casten.

Erledigt.

#closed#


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
 
#9

Re: Compiler erkennt TControl.PopupMenu nicht

  Alt 29. Jul 2009, 09:07
Zitat von hoika:
#closed#
Ich muss trotzdem noch meinen Senf dazugeben.

Zitat von hoika:
Nicht zu fassen, ist doch tatsächlich protected
Sagt der Compiler auch recht deutlich:
Code:
[Pascal Fehler] Unit1.pas(91): E2362 Auf protected-Symbol TControl.PopupMenu kann nicht zugegriffen werden
Das ist glücklicherweise ein Standardproblem mit einer Standardlösung:
Delphi-Quellcode:
type
  THACK_Control = class(TControl);
  
  if THACK_Control(Control).PopupMenu = nil then
    THACK_Control(Control).PopupMenu := TPopupMenu.Create(Control);
Uli.
Uli Gerhardt
  Mit Zitat antworten Zitat
hoika

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

Re: Compiler erkennt TControl.PopupMenu nicht

  Alt 29. Jul 2009, 09:39
Hallo,

ja dein Compiler sagt das, meiner noch nicht (D6)

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.

Das gefällt mir aber gar nicht ...


Heiko
Heiko
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 21:40 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