AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Problem beim finden dynamischer Menüeinträge
Thema durchsuchen
Ansicht
Themen-Optionen

Problem beim finden dynamischer Menüeinträge

Ein Thema von MarcusB · begonnen am 26. Okt 2004 · letzter Beitrag vom 26. Okt 2004
Antwort Antwort
MarcusB

Registriert seit: 7. Mär 2004
121 Beiträge
 
Delphi 7 Professional
 
#1

Problem beim finden dynamischer Menüeinträge

  Alt 26. Okt 2004, 09:57
Hallo,

folgendes Problem:

Ich habe ein dynamisch erzeugtes PopUp-Menü, welches wie folgt erzeugt wurde (Auszug):

Delphi-Quellcode:
    ...
    MyMenuItem := TMenuItem.Create(Feldnamenzuordnen1);
    MyMenuItem.Caption := AdressFields[i];
    MyMenuItem.Tag := i;
    MyMenuItem.Name := 'Adress_' + IntToStr(i);
    MyMenuItem.OnClick := MyMenuItemClick;
    Feldnamenzuordnen1.Add(MyMenuItem);
    ...
wobei Feldnamenzuordnen1 ein übergeordneter Menüeintrag ist.

In einer Routine will ich überprüfen, ob bestimmte Untermenüpunkte schon mal angeklickt wurden, um dann die Eigenschaft checked entweder auf true oder false zu setzen.

Dazu wollte ich

Feldnamenzuordnen1.FindComponent('Adress_' + IntToStr(i)).checked := true; verwenden. Das klappt leider nicht!

Komischerweise funktioniert folgendes aber:

ShowMessage(Feldnamenzuordnen1.FindComponent('Adress_' + IntToStr(i)).name); Was mach ich schon wieder falsch
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

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

Re: Problem beim finden dynamischer Menüeinträge

  Alt 26. Okt 2004, 10:10
Hi,

FindComponent liefert dir lediglich eine "TComponent" zurück. Für Deine Checked Eigenschaft brauchst Du also ein TMenuItem:

(Feldnamenzuordnen1.FindComponent('Adress_' + IntToStr(i)) as TMenuItem).checked := true mfG
mirage228
David F.

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

n/a Beiträge
 
#3

Re: Problem beim finden dynamischer Menüeinträge

  Alt 26. Okt 2004, 10:11
dir fehlt ein Type-cast

  (Feldnamenzuordnen1.FindComponent('Adress_' + IntToStr(i)) as TMenuItem).checked := true; generell wäre man aber vor dem Type-cast auf der sicheren Seite mit der Abfrage
Delphi-Quellcode:
  if (Feldnamenzuordnen1.FindComponent('Adress_' + IntToStr(i)) is TMenuItem) then
     ...

daß die 1. Anweisung nicht funktioniert, aber die 2. Anweisung mit ShowMessage funktioniert, liegt daran, daß eine Komponente eine Property "name" besitzt, aber keine Property "Checked".

Roderich
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

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

Re: Problem beim finden dynamischer Menüeinträge

  Alt 26. Okt 2004, 10:17
Zitat von roderich:
dir fehlt ein Type-cast

  (Feldnamenzuordnen1.FindComponent('Adress_' + IntToStr(i)) as TMenuItem).checked := true; generell wäre man aber vor dem Type-cast auf der sicheren Seite mit der Abfrage
Delphi-Quellcode:
  if (Feldnamenzuordnen1.FindComponent('Adress_' + IntToStr(i)) is TMenuItem) then
     ...
Jupp,

aber der AS-Operator führt intern bereits ein IS aus (und löst ggf. ein EInvalidCast aus), soweit ich weiss.
Daher sollte man. wenn man schon mit IS prüft, dann auch direkt type-casten, also so (ich würde mir dann das doppelte findcomponent sparen):
Delphi-Quellcode:
var
  Comp: TComponent;
begin
  Comp := Feldnamenzuordnen1.FindComponent('Adress_' + IntToStr(i));
  if (Comp is TMenuItem) then
    TMenuItem(Comp).Checked := True;
end;
mfG
mirage228
David F.

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

Registriert seit: 7. Mär 2004
121 Beiträge
 
Delphi 7 Professional
 
#5

Re: Problem beim finden dynamischer Menüeinträge

  Alt 26. Okt 2004, 10:43
Ich liebe Euch alle

Es funktioniert
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#6

Re: Problem beim finden dynamischer Menüeinträge

  Alt 26. Okt 2004, 11:08
Zitat von mirage228:
Jupp,

aber der AS-Operator führt intern bereits ein IS aus (und löst ggf. ein EInvalidCast aus), soweit ich weiss.
Daher sollte man. wenn man schon mit IS prüft, dann auch direkt type-casten, also so (ich würde mir dann das doppelte findcomponent sparen):
Delphi-Quellcode:
var
  Comp: TComponent;
begin
  Comp := Feldnamenzuordnen1.FindComponent('Adress_' + IntToStr(i));
  if (Comp is TMenuItem) then
    TMenuItem(Comp).Checked := True;
end;
mfG
mirage228
Jupp. Ich bestätige es einfach mal.
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  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 20:44 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