[delphi] Checken of een property default is

Pagina: 1
Acties:

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 22-06 10:32

_Thanatos_

Ja, en kaal

Topicstarter
:? De situatie
Ik ben bezig met een applicatie waarin van een form alle componenten en hun properties m.b.v. RTTI afgegaan worden, op zoek naar string-achtige properties. De reden hiervoor is het maken van een multilingual iets, maar das nu ff niet van belang.

Ik wil natuurlijk alleen de meest relevante properties uitzoeken om in een vertaalbaar bestand te zetten. TCustomAction.Category en TComponent.Name heb ik er bijvoorbeeld al uitgefilterd.

:? Het probleem
Ik wil alleen string-achtige properties opslaan die niet default zijn. Default properties heeft geen zin om op te slaan, omdat ze toch niet veranderen. Een default property kan ook een caption van iets zijn, die in een TAction staat. In Delphi (7) is die property dan niet vet, maar wel in de bijbehorende TAction.

:? Wat wil je nou
Weten hoe je opvraagt (via RTTI of niet) wanneer zo'n property opgeslagen/nondefault is en dus in de object inspector vet afgebeeld is...

Ik hoop dat het duidelijk is, ben niet heel erg goed in uitleggen

日本!🎌


  • klinz
  • Registratie: Maart 2002
  • Laatst online: 10-08 15:44

klinz

weet van NIETS

Zie mijn antwoord in deze thread: http://groups.google.com/...v7%241%40hermes.castel.nl

Aanvullen met Properties[i]^.Default om te bepalen of een property default is.

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Een Default property is wat anders dan de Default waarde van de property. Bovendien geeft het vergelijken van de Default waarde van de property alleen geen garantie dat de property wel of niet opgeslagen wordt. Dat kan namelijk ook nog veranderd worden door de Stored specifier. Zie Properties[i]^.StoredProc.

Daarnaast zijn de default waarde van een property weldegelijk te veranderen en is juist ook wat je wilt denk ik. De Caption mag dan wel een default waarde bevatten, maar je wilt m toch vertalen of niet?

We adore chaos because we like to restore order - M.C. Escher


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 22-06 10:32

_Thanatos_

Ja, en kaal

Topicstarter
Nee, properties die default zijn, hoeven niet vertaald te worden. Als dat wel zou moeten, zou ik wel een property ingetypt hebben (waardoor ie dus wel opgeslagen/nondefault wordt).

Ik bedoel dus vooral bijvoorbeeld de caption van een TButton ofzo, die niet door de TButton opgeslagen wordt, maar door de Action waar ie aan hangt. Als ik daar niet op zou controleren, zou mijn routine die caption dus 2x tegenkomen.

日本!🎌


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 22-06 10:32

_Thanatos_

Ja, en kaal

Topicstarter
kickje :)

Ik zou dus in ieder component dat ik tegenkom, moeten kijken of er een Action aan hangt, en dan voor iedere property van dat component moeten kijken of de Action (if any) die property niet toevallig al opgeslagen heeft... Ik heb ondanks mijn lange ervaring toch geen idee hoe dat moet.

日本!🎌


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Ik snap niet helemaal waarom je kickt. Welk onderdeel mis je nog? Klinz geeft je een link naar code die je kan gebruiken en ik geef je nog een extra hint over hoe je het zou kunnen bepalen.

We adore chaos because we like to restore order - M.C. Escher


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 22-06 10:32

_Thanatos_

Ja, en kaal

Topicstarter
Welk onderdeel mis je nog?
Nou, het lijkt me dat ik nog iets aan een Action moet vragen? Of denk ik dan verkeerd?

/edit
Bovendien is Properties[i]^.Default een longint, wat ik natuurlijk niet met een string kan gaan vergelijken...

[ Voor 35% gewijzigd door _Thanatos_ op 21-08-2003 20:27 ]

日本!🎌


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Wat wil je dan aan de action vragen? De action zet de caption enz van het object al. Als je het toch aan de action wil vragen zal je bij elk property na moeten gaan of het van het type TAction is en daar dan actie op ondernemen.

De default waarde voor een String property is altijd een lege string en dat kan je niet veranderen. Je moet kijken naar de StoredProc daarvoor.

We adore chaos because we like to restore order - M.C. Escher

Pagina: 1