Jakie zalecacie sposoby by zapisać ustawienia dynamicznie tworzonych przycisków?

0

Próbuję zrobić prosty, wymyślony program w celach edukacyjnych. Na pustą Formę użytkownik może wstawiać Buttony, przesuwać je. Planuję pozwolić mu zmienić Caption Buttona oraz by było ciekawiej, będzie można każdemu buttonowi przypisać link url, po to by po kliknięciu w dynamicznie utworzony button (uzupełniony o dane jak nazwa i link), otwierał stronę www w przeglądarce.

Tylko teraz zastanawiam się czego użyć by zapisać te dane do pliku konfiguracyjnego, tak by uruchamiając program, aplikacja ów plik odczytała i na jego podstawie utworzyła przyciski itd.
Zastanawiałem się czy tzw. rekordy nadadzą się, ale wolę już z góry zapytać tu na forum o możliwości zapisu/odczytu dla tego specyficznego programu niż marnować czas, by usłyszeć od was, że wybrałem najgorszy, możliwy sposób (który może nawet nie nadaje się do tego), dlatego proszę o radę czego użyć do zapisu/odczytu.

0

Wystarczy plik konfiguracyjny w postaci xml, json, yaml lub wg. twojego własnego schematu zapisu. Dawno nie dotykałem się delphi, ale pewnie można zapisać cały rekord do pliku

1

Ja to bym sikę nie bawił w swój ani w żaden inny popularny format. TFileStream ma metody WriteComponent i ReadComponentto czemu ich nie wykorzystać. Tworzonym komponentom TButton ustawiłbym odpowiednią właściwość Tag po to aby rozpoznać o które buttony chodzi i:
zapis:

var
  fs: TFileStream;
  i: Integer;
  Component: TComponent;
begin
  fs:= TFileStream.Create('d:\data.txt', fmCreate or fmOpenWrite);
  for i:= 0 to Self.ComponentCount - 1 do
  begin
    Component:= Self.Components[i];
    if (Component is TButton) and (Component.Tag = 1) then
      fs.WriteComponent(Component);
  end;
  fs.Free;
end;

odczyt:

var
  fs: TFileStream;
  Component: TButton;
begin
  fs:= TFileStream.Create('d:\data.txt', fmOpenRead);
  while fs.Position <  fs.Size do
  begin
    Component:= TButton.Create(Self);
    Component.Parent:= Self;
    fs.ReadComponent(TButton(Component));
  end;
  fs.Free;
end;

Oczywiście jakaś obsługa błędów by się zdała ale to test...

1 użytkowników online, w tym zalogowanych: 0, gości: 1