Anonymní profil Navara – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Navara – Programujte.comAnonymní profil Navara – Programujte.com

 

Příspěvky odeslané z IP adresy 46.135.52.–

Navara
Delphi › Jednodušší přístup k polím v…
10. 11. 2014   #195896

Zdravím, mám následující problém:
tvořím aplikaci pro zápis událostí při jízdě vozidla a používám k tomu struktury, které obsahují mimojiné pole stringů. Aplikace průběžně zapisuje do polí ve struktuře nové a nové položky. Tady jsou potřebné části zdroje:

unit U_EditorBS100;

type
TZastavka = record
Nazev: String;
Index: Integer;
UdalostiPriPrijezdu: Array of String;
UdalostiPredPrijezdem: Array of String;
UdalostiPriOdjezdu: Array of String;
UdalostiMezizastUsek: Array of String;
//A dalších několik polí UdalostXXXXX vždy Array of String
end;

TEditorBS100 = class
procedure ZapisUdalostJizdy(IntUdalost: Integer; TxtUdalost: String);
procedure ZapisUdalostiPrijezd;

...

var
ArrZastavky: Array of TZastavka;


procedure TEditorBS100.ZapisUdalostJizdy(IntUdalost: Integer; TxtUdalost: String);
var
PosledniZastavka: Integer;
begin
PosledniZastavka := High(ArrZastavky);

if IntUdalost = 1 then //1 = příjezd
begin
SetLength(ArrZastavky[PosledniZastavka].UdalostPriPrijezdu,
Length(ArrZastavky[PosledniZastavka].UdalostPriPrijezdu)+1);

ArrZastavky[PosledniZastavka].UdalostPriPrijezdu
[High(ArrZastavky[PosledniZastavka].UdalostPriPrijezdu)]
:= TxtUdalost;
end;

if IntUdalost = 2 then //2 = před příjezdem
begin
SetLength(ArrZastavky[PosledniZastavka].UdalostPredPrijezdem,
Length(ArrZastavky[PosledniZastavka].UdalostPredPrijezdem)+1);

ArrZastavky[PosledniZastavka].UdalostPredPrijezdem
[High(ArrZastavky[PosledniZastavka].UdalostPredPrijezdem)]
:= TxtUdalost;
end;

//stejně dak pro dalších X možných událostí, vždy zápis do některého z polí
end;

//příklad volání zápisu do některého z polí
procedure TEditorBS100.ZapisUdalostiPrijezd;
begin
ZapisUdalostJizdy(1, 'Čas: ' + FormatDateTime('HH:NN:SS', Now));
end;

Jde mi o to, že událostí muže být až 10 různých druhů, což znamená deset různých Array of String, a do funkce zápisu položky psát příkazy zvětšení pole a zápis do poslední položky pro každé pole zvlášt je tímto způsobem zralé akorát na lehce přehlédnutelné chyby. Mám takovou představu že by šlo nejprve přiřadit nějaké proměnné informaci o to, do kterého pole se bude zapisovat, a pak s tou proměnnou pracovat jako s tím vlastním polem. Způsob by měl fungovat asi takhle:

procedure TEditorBS100.ZapisUdalostJizdy(IntUdalost: Integer; TxtUdalost: String);
var
PosledniZastavka: Integer;
PoleProZapis: Array of String;
begin
PosledniZastavka := High(ArrZastavky);

if IntUdalost = 1 then PoleProZapis := ArrZastavky[PosledniZastavka].UdalostPriPrijezdu;
if IntUdalost = 2 then PoleProZapis := ArrZastavky[PosledniZastavka].UdalostPredPrijezdem;
//a další pole...

SetLength(PoleProZapis, Length(PoleProZapis)+1);
PoleProZapis[High(PoleProZapis)]:= TxtUdalost;
end;

Tento způsob však nefunguje, řádek "if IntUdalost = 2 then PoleProZapis := ArrZastavky[PosledniZastavka].UdalostPredPrijezdem;" ukazuje chybu Incompatible types. Lze tedy najít nějaký způsob, jak takhle jednodušeji zvolit pole pro zápis a pak s ním takhle podobně pracovat? Našel jsem něco o ukazatelích, jen nevím jak přeně s tím pracovat.

Děkuji.

Zasláno z mobilního telefonu.

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý