AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Klassentyp nicht verfügbar

Ein Thema von WoTo · begonnen am 6. Jan 2006 · letzter Beitrag vom 7. Jan 2006
Antwort Antwort
Seite 1 von 2  1 2      
WoTo

Registriert seit: 28. Jun 2004
Ort: Rotenburg (Wümme)
102 Beiträge
 
Delphi 2005 Enterprise
 
#1

Klassentyp nicht verfügbar

  Alt 6. Jan 2006, 13:09
Hallo zusammen,
ich habe folgendes Problem:
mit folgendem Befehl speichere ich Objekte in einer StringList:

Delphi-Quellcode:
if (ACB <> nil) and (ACB is TGridCheckBoxExt)
  then AJob.ObjectList.AddObject(ACB.Name,ACB);
wobei ACB vom Typ TGridCheckBoxExt ist.

Anschließend kopiere ich den Inhalt der StringListe ObjectList mit

sgGrid.ObjectList.Assign(AJob.ObjectList) .

Nun lese ich die einzelnen Objekte wieder aus und überprüfe deren Klassentyp mit
Delphi-Quellcode:
for index:= 0 to Pred(sgGrid.ObjectList.Count) do
begin
  sgGrid.ObjectList.Objects[index] is TGridCheckBoxExt
  then begin
   
  end;
end;
Leider wird das Objekt nicht als TGridCheckBoxExt erkannt !

Was mache hier nun wieder falsch ?
  Mit Zitat antworten Zitat
Igotcha

Registriert seit: 22. Dez 2003
544 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Klassentyp nicht verfügbar

  Alt 6. Jan 2006, 13:13
Zitat von WoTo:
Nun lese ich die einzelnen Objekte wieder aus und überprüfe deren Klassentyp mit
Delphi-Quellcode:
for index:= 0 to Pred(sgGrid.ObjectList.Count) do
begin
  sgGrid.ObjectList.Objects[index] is TGridCheckBoxExt // wo ist das "if"?
  then begin
   
  end;
end;
Fehlt da nicht ein "if"?

Und dann pack da mal ein ShowMessage oder so zwischen begin und end. Evtl. wird das Ganze vom Compiler wegrationalisiert, da dort eh nix passiert.

Gruß Igotcha
  Mit Zitat antworten Zitat
WoTo

Registriert seit: 28. Jun 2004
Ort: Rotenburg (Wümme)
102 Beiträge
 
Delphi 2005 Enterprise
 
#3

Re: Klassentyp nicht verfügbar

  Alt 6. Jan 2006, 13:28
Hallo Igotcha,
vielen Dank für deine Antwort.

Das if ist in der Originalversion vorhanden und zwischen dem Begin und End deklariere ich dann das Objekt mit

Delphi-Quellcode:
ACB := TGridCheckBoxExt(sgGrid.ObjectList.Objects[index]);
Self.SetCheckBoxAlignment(ACB,ACol,ARow);
Nur da kommt das Programm erst gar nicht hin, da das Object nicht als TGridCheckBoxExt erkannt wird.

Gruß
Woto
  Mit Zitat antworten Zitat
Benutzerbild von freak4fun
freak4fun

Registriert seit: 22. Sep 2004
Ort: Hannover
1.807 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#4

Re: Klassentyp nicht verfügbar

  Alt 6. Jan 2006, 13:32
Hallo ,
kannst du dir nicht mit .CalssName oder etwas Änlichen den KLassentyp ausgeben lassen?

MfG
freak
Christian
IT: Schließen Sie bitte das Fenster. User: Die Tür auch?
i++; // zaehler i um 1 erhoehen
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

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

Re: Klassentyp nicht verfügbar

  Alt 6. Jan 2006, 14:01
Wenn du auf ein Objekt in der Liste zugreifst musst du dem Compiler IMMER den Typ angegeben:


entweder so:

TGridCheckBoxExt(TsgGrid.ObjectList.Objects[index]).Eigenschaft wenn du den Typ vorher mit is geprüft hat oder mit

(TsgGrid.ObjectList.Objects[index] as TGridCheckBoxExt).Eigenschaft wenn der Typ vorher nicht geprüft wurde. as behinhaltet ein is, heisst er prüft bei as den Typ nochmal und löst eventuell eine Exception aus.
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Klassentyp nicht verfügbar

  Alt 6. Jan 2006, 14:07
@jim_raynor: Der Typ ist ja schon von der Stringliste her vorgegeben. Und zwar ist das Property Objects vom Typ TObject und somit kann überprüft werden ob dieses TObject vom Typ TGridCheckBoxExt ist.
@Igotcha: Dort wo die Prüfung mit "is" fehlschläft könntest du dir doch mal in den watsches
sgGrid.ObjectList.Objects[index].Classname
ausgeben lassen
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
WoTo

Registriert seit: 28. Jun 2004
Ort: Rotenburg (Wümme)
102 Beiträge
 
Delphi 2005 Enterprise
 
#7

Re: Klassentyp nicht verfügbar

  Alt 6. Jan 2006, 14:20
Hallo SirThornberry,
genau das habe ich schon probiert und als Wert wird "nicht verfügbar" ausgegeben.

zu jim_raynor:
ich caste das Objekt mit
ACB := TGridCheckBoxExt(sgGrid.ObjectList.Objects[index]); MfG
Woto
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

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

Re: Klassentyp nicht verfügbar

  Alt 6. Jan 2006, 14:25
Zitat von WoTo:
genau das habe ich schon probiert und als Wert wird "nicht verfügbar" ausgegeben.
Deutet darauf hin, dass das Object nil oder Funktionsaufrufe nicht gestatte sind (doppelklick auf den Ausdruck in der Ausdrucksliste) ist.
Werden vielleicht die Objekte nicht bei Assign nicht übernommen?

Zitat von WoTo:
zu jim_raynor:
ich caste das Objekt mit
Hatte deinen Frage falsch interpretiert, von daher vergiss was ich geschrieben hab
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Klassentyp nicht verfügbar

  Alt 6. Jan 2006, 15:12
@woto: Hast du "Allow Functioncalls" oder wie auch immer das in der deutschen Version heißt bei dem eintrag in den watches ausgegeben? Wenn das auch nicht hilft könntest du das ja mal mit ShowMessage ausgeben oder in eine Listbox etc. schreiben lassen.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
WoTo

Registriert seit: 28. Jun 2004
Ort: Rotenburg (Wümme)
102 Beiträge
 
Delphi 2005 Enterprise
 
#10

Re: Klassentyp nicht verfügbar

  Alt 7. Jan 2006, 11:55
Hallo zusammen,
danke für den Hinweis mit der "Funktionsaufrufe gestatten"-Option bei den Watches. Ich kannte diese noch nicht.
Nachdem ich die Option enabled hatte, wird mir im Watchfenster für die Variable

sgGrid.ObjectList.Objects[index].Classtype.Classname

eine Zugriffsverletzung ausgegeben.
Ich habe mal die Adressen des 1. Objektes in beiden Stringlisten verglichen und festgestellt, daß diese ungleich sind !

Ich vermute, daß ich irgendwie aus einer falschen StringList die Objekte auslese.
Werde dies überprüfen und mich wieder melden.

Gruß
Woto
  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 22:18 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