![]() |
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; [...] |
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:
mfg
// 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; Christian |
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:
Die Compilerschalter ($M+, $M-) sind überflüssig. Nur Definition der Klasse, für die Typinformationen erzeugt werden sollen, muß damit eingeklammert werden.
[...]
for i := 0 to ComponentCount - 1 do SetVisibleValue (Components[i], (Components[i].Tag and 2) <> 0); [...] Gruß Hawkeye |
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 ? |
Re: TypInfo und Komponenten verursachen Execption
Zitat:
mfg Christian |
Re: TypInfo und Komponenten verursachen Execption
Thx, so funktioniert es.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:28 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz