[DUG] Stupid /easy question

Jolyon Smith jsmith at deltics.co.nz
Thu Oct 15 10:58:02 NZDT 2009


As has been mentioned you can use the "built in" enumerator, but that will
only yield Pointer values, so you would then have to typecast the results,
or you should be able to use "absolute" to achieve the typecast
"declaratively" in the var declarations:

 

var
  addrFormatEnum: Pointer;
  addrFormat: TCountryAddressFormat absolute addrFormatEnum;
begin
  for addrFormatEnum in Self do
  begin
    Strings.AddObject(addrFormat.CountryName, 
                      TObject(addrFormat.CountryRefAsInteger));
  end;
end;

 

But note that the above code is untested either for compilation or
behaviour.  J

 

 

From: delphi-bounces at delphi.org.nz [mailto:delphi-bounces at delphi.org.nz] On
Behalf Of Robert martin
Sent: Thursday, 15 October 2009 10:45 a.m.
To: NZ Borland Developers Group - Delphi List
Subject: Re: [DUG] Stupid /easy question

 

Hi

Yeah I read examples of how to add enumerators but since TObjectList already
has one I didn't think I needed to.  Guess I do.  Seems like it is a bit too
much work for basic (small) classes not frequently used (such as the one im
working on).  Will give it a go anyway :)

Thanks
Rob

 

 

 



Jolyon Smith wrote: 

You will have to implement an enumerator for your TCountryAddressFormats
class that returns TCountryAddressFormat references.
 
This isn't a language feature that "just works" - you have to put some
infrastructure in place to support it.
 
The feature appears to "just work" for a bunch of VCL types (TStringList
etc) because the VCL already contains the necessary infrastructure additions
(and which should provide the examplar implementations on which you could
base your own).
 
 
-----Original Message-----
From: delphi-bounces at delphi.org.nz [mailto:delphi-bounces at delphi.org.nz] On
Behalf Of Robert martin
Sent: Thursday, 15 October 2009 10:06 a.m.
To: NZ Borland Developers Group - Delphi List
Subject: [DUG] Stupid /easy question
 
Hi
 
After the D2010 presentation yesterday I decided I should actually use 
some of the D2007 features I had not gotten around to using.  
Specifically the For .. in construct.
 
I am sure I am missing something but here iss what I want to do
 
 
I have the following 'old school code'  (note the base class here 
inherits from TObjectList)
 
procedure TCountryAddressFormats.LoadStringListWithCompanies(Strings: 
TStrings);
var
    Counter     : Integer;
begin
 
    for Counter := 0 to Self.Count - 1 do begin
        Strings.AddObject( 
TCountryAddressFormat(Self.Items[Counter]).CountryName,  
Tobject(TCountryAddressFormat(Self.Items[Counter]).CountryRefAsInteger) );
    end;
end;
 
I wanted to replace it with
 
procedure TCountryAddressFormats.LoadStringListWithCompanies(Strings: 
TStrings);
var
    CountryAddressFormat  : TCountryAddressFormat;
begin
    for CountryAddressFormat in Self do begin
        Strings.AddObject( CountryAddressFormat.CountryName, 
TObject(CountryAddressFormat.CountryRefAsInteger) );
    end;
end;
 
but I get the following error
 
[DCC Error] AddressFormat.pas(157): E2010 Incompatible types: 
'TCountryAddressFormat' and 'Pointer'
 
what am I missing ?
 
 
Cheers
Rob
 
_______________________________________________
NZ Borland Developers Group - Delphi mailing list
Post: delphi at delphi.org.nz
Admin: http://delphi.org.nz/mailman/listinfo/delphi
Unsubscribe: send an email to delphi-request at delphi.org.nz with Subject:
unsubscribe
 
_______________________________________________
NZ Borland Developers Group - Delphi mailing list
Post: delphi at delphi.org.nz
Admin: http://delphi.org.nz/mailman/listinfo/delphi
Unsubscribe: send an email to delphi-request at delphi.org.nz with Subject:
unsubscribe
 
  
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://listserver.123.net.nz/pipermail/delphi/attachments/20091015/4cc94a4c/attachment-0001.html 


More information about the Delphi mailing list