Page 2 of 2 FirstFirst 1 2
Results 16 to 18 of 18

Thread: Stringlist met class methods

  1. #16
    Jep, je kan tig varianten kiezen. Een stringlist met veldnamen en expliciet gealloceerde TMethod variabelen is een mogelijkheid. De manier die ik koos is wel makkelijk (niet zelf met GetMem aan de slag) en praktisch omdat de TComponents ook reageren op elkaars gedragingen.

    Natuurlijk kun je ook een enkel TComponent maken en dat aan alle fields koppelen. Die kan dan weer op basis van het field het juiste record opzoeken, maar het is toch gevaarlijk om dat op naam te doen. Die kan namelijk wijzigen zonder dat je daar notificatie van krijgt. Zodoende vind je dan je record weer niet terug. Een TField verwijzing is daarom wel iets veiliger.

    En als je zoveel fields hebt dat het alloceren van deze losse objectjes een probleem wordt, dan heb je denk ik nog wel meer problemen.
    1+1=b

  2. #17
    SillyMember
    Join Date
    May 2003
    Location
    Gent
    Posts
    7,725
    Quote Originally Posted by SamWitse View Post
    Ik wil het dus eenvoudig houden, en een lijstje bijhouden met FieldNames en bijhorenden methods die op het juiste moment aan het OnSetTextEvent gekoppeld moeten worden.
    ...
    Maar daarvoor heb ik een lijstje nodig met FieldNames (strings) en Methods.
    En liefst zo eenvoudig mogelijk.
    Dat is toch exact wat de code die ik gaf deed.

    Met fields:

    delphi Code:
    1. TMijnForm = class(TForm)
    2.     MijnDataSet: TTable;
    3.     Geboortejaar: TFloatField;
    4.     Postcode: TStringField;
    5.     Inkomen: TFloatField;
    6.     DataSource1: TDataSource;
    7.     Label1: TLabel;
    8.     DBEdit1: TDBEdit;
    9.     Label2: TLabel;
    10.     DBEdit2: TDBEdit;
    11.     Label3: TLabel;
    12.     DBEdit3: TDBEdit;
    13.     procedure FormCreate(Sender: TObject);
    14.  
    15.   private
    16.     { Private declarations }
    17.     FLijst: TDictionary<string, TFieldSetTextEvent>;
    18.     procedure SetGeboortejaar(Sender: TField; const Text: String);
    19.     procedure SetInkomen(Sender: TField; const Text: String);
    20.     procedure SetPostcode(Sender: TField; const Text: String);
    21.     procedure Test;
    22.     procedure Attach;
    23.  
    24.   public
    25.     { Public declarations }
    26.   end;
    27.  
    28. var
    29.   MijnForm: TMijnForm;
    30.  
    31. implementation
    32. {$R *.dfm}
    33.  
    34.  
    35. procedure TMijnForm.SetGeboortejaar(Sender: TField; const Text: String);
    36. begin
    37.   Caption := Text
    38. end;
    39.  
    40. procedure TMijnForm.SetInkomen(Sender: TField; const Text: String);
    41. begin
    42.   Caption := Text
    43. end;
    44.  
    45. procedure TMijnForm.SetPostcode(Sender: TField; const Text: String);
    46. begin
    47.   Caption := Text
    48. end;
    49.  
    50. procedure TMijnForm.Test;
    51. begin
    52.   MijnDataSet.Close;
    53.  
    54.   FLijst := TDictionary<string, TFieldSetTextEvent>.Create;
    55.   FLijst.Add('Geboortejaar', SetGeboortejaar);
    56.   FLijst.Add('Inkomen', SetInkomen);
    57.   FLijst.Add('Postcode', SetPostCode);
    58.   Attach;
    59.  
    60.   MijnDataSet.Open;
    61. end;
    62.  
    63. procedure TMijnForm.Attach;
    64. begin
    65.   Geboortejaar.OnSetText := FLijst['Geboortejaar'];
    66.   Inkomen.OnSetText := FLijst['Inkomen'];
    67.   Postcode.OnSetText := FLijst['Postcode'];
    68.  end;
    69.  
    70. procedure TMijnForm.FormCreate(Sender: TObject);
    71. begin
    72.   Test;
    73. end;

    Als het enigzins kan zou ik de TField.Name property gebruiken (om tikfouten te vermijden) of nog beter: een TDictionary<TField, TFieldSetTextEvent>;
    All methodologies are based on fear. -- Kent Beck.

  3. #18
    Delphi & OO in Vlaanderen SamWitse's Avatar
    Join Date
    Sep 2007
    Location
    Brussel
    Posts
    833
    Quote Originally Posted by GolezTrol View Post
    Goeie leer voor de volgende keer. Gewoon die vraag stellen, je voorkomt ermee dat mensen moeilijke oplossingen gaan bedenken voor iets wat eigenlijk helemaal je probleem niet is. Kun je het altijd achteraf nog makkelijker maken als dat nodig blijkt te zijn.


    Maar eh, zeg eens eerlijk, zou het niet handig zijn om gewoon dezelfde method aan de events van alle velden te hangen, en daarin met een ifje controleren om welk veld het gaat?
    Het schaamrood trekt tot ver achter mijn oren.
    Eén method met wat if-jes of een case moet mogelijk zijn....
    Het leven kan soms simpel zijn
    En ik die dacht dat een lijstje met methods de meest simpele oplossing zou zijn

    Ik ga je handler-oplossing toch eens verder uitdiepen; lijkt mij een goede leerstof
    Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration.

    Sam Witse.
    Delphi & OO in Vlaanderen

Page 2 of 2 FirstFirst 1 2

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •