AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi TypInfo und Komponenten verursachen Execption
Thema durchsuchen
Ansicht
Themen-Optionen

TypInfo und Komponenten verursachen Execption

Ein Thema von Nils_13 · begonnen am 28. Jan 2007 · letzter Beitrag vom 28. Jan 2007
Antwort Antwort
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#1

TypInfo und Komponenten verursachen Execption

  Alt 28. Jan 2007, 11:26
Hi,

ich benutze die Unit TypInfo, um die Sichtbarkeit von bestimmten Komponenten in einer Schleife setzen zu können.
Dies geschieht mit folgendem Code, welcher allerdings in den markierten Zeilen (NICHT in der Funktion) eine Execption verursacht. Warum ?
Delphi-Quellcode:
{$M+}
procedure TfrmMain.SetVisibleValue(aObject: TObject ; aVisible : Boolean);
var Info : PPropInfo;
begin
  Info := GetPropInfo(aObject, 'Visible');
  if Assigned(Info) then
    SetOrdProp(aObject, 'Visible', Integer(aVisible));
end;
{$M-}

[...]
for i := 0 to ComponentCount - 1 do
begin
  with Components[i] do
  begin
    if (Tag and 2) > 0 then
--> SetVisibleValue(Components[i], True) <--
    else
--> SetVisibleValue(Components[i], False); <--
  end;
end;
[...]
  Mit Zitat antworten Zitat
r2c2

Registriert seit: 9. Mai 2005
Ort: Nordbaden
925 Beiträge
 
#2

Re: TypInfo und Komponenten verursachen Execption

  Alt 28. Jan 2007, 11:39
Hallo

meine Glaskugel sagt, dein Problem hämgt am $M das muss zur Klasse, nicht zur Funktion. Bin mir da ber nicht sicher.

Wobei ich mich sowieso frage, warum du RTTI benutzt. Bracuhst du doch hier gar nicht:

Delphi-Quellcode:
// Pseudocode:
for i := 0 to ComponentCount - 1 do
begin
  if Components[i] is TControl then
  begin
    if ... then
      Components[i].Visible := True;
    else
      Components[i].Visible := False;
  end;
end;
mfg

Christian
Kaum macht man's richtig, schon klappts!
  Mit Zitat antworten Zitat
Hawkeye219

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

Re: TypInfo und Komponenten verursachen Execption

  Alt 28. Jan 2007, 11:40
Hallo Nils,

durch das WITH greifst du in der IF-Anweisung auf die Komponenten der Komponenten zu. Versuche es so:

Delphi-Quellcode:
[...]
for i := 0 to ComponentCount - 1 do
  SetVisibleValue (Components[i], (Components[i].Tag and 2) <> 0);
[...]
Die Compilerschalter ($M+, $M-) sind überflüssig. Nur Definition der Klasse, für die Typinformationen erzeugt werden sollen, muß damit eingeklammert werden.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#4

Re: TypInfo und Komponenten verursachen Execption

  Alt 28. Jan 2007, 11:47
@r2c2: Das Visible nimmt er nicht hin.
@Hawkeye219: Danke, jetzt ist schonmal die Exeption weg, aber warum wird dann die Form fast komplett ausgeblendet ?
  Mit Zitat antworten Zitat
r2c2

Registriert seit: 9. Mai 2005
Ort: Nordbaden
925 Beiträge
 
#5

Re: TypInfo und Komponenten verursachen Execption

  Alt 28. Jan 2007, 11:51
Zitat von Nils_13:
@r2c2: Das Visible nimmt er nicht hin.
Deshalb hab ich ja auch Pseudocode drüber geschrieben. Musst natürlich noch auf TControl casten...

mfg

Christian
Kaum macht man's richtig, schon klappts!
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#6

Re: TypInfo und Komponenten verursachen Execption

  Alt 28. Jan 2007, 12:26
Thx, so funktioniert es.
  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 08:30 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