Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi TypInfo und Komponenten verursachen Execption (https://www.delphipraxis.net/85262-typinfo-und-komponenten-verursachen-execption.html)

Nils_13 28. Jan 2007 10:26


TypInfo und Komponenten verursachen Execption
 
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;
[...]

r2c2 28. Jan 2007 10:39

Re: TypInfo und Komponenten verursachen Execption
 
Hallo :hi:

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

Hawkeye219 28. Jan 2007 10:40

Re: TypInfo und Komponenten verursachen Execption
 
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

Nils_13 28. Jan 2007 10:47

Re: TypInfo und Komponenten verursachen Execption
 
@r2c2: Das Visible nimmt er nicht hin.
@Hawkeye219: Danke, jetzt ist schonmal die Exeption weg, aber warum wird dann die Form fast komplett ausgeblendet ?

r2c2 28. Jan 2007 10:51

Re: TypInfo und Komponenten verursachen Execption
 
Zitat:

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

Nils_13 28. Jan 2007 11:26

Re: TypInfo und Komponenten verursachen Execption
 
Thx, so funktioniert es.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:55 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