Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Nastavení indexů(velikostí) typů v jazyce Delphi7

Dobrý den, mám tento kod

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    btn1: TButton;
    btn2: TButton;
    edt1: TEdit;
    edt2: TEdit;
    btn3: TButton;
    btn4: TButton;
    procedure btn1Click(Sender: TObject);
    procedure btn3Click(Sender: TObject);
    procedure btn2Click(Sender: TObject);
    procedure btn4Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

type    //těchto typů je více, uvádím jen jeden za všechny
  PL_TK = record
    left: Integer;
    top: Integer;
    width: Integer;
    height: Integer;
    image: string;
    hint:string;
    caption: string;

    status: string;
    volnost :Boolean;
    tag1:string;
    tag2:string;
    tag3:string;
    tag4:string;
  end;

type
  prvek = record
    L_TK:array of PL_TK ;
  end;

var
  Form1: TForm1;
  panelinfo : array of prvek;
  indexdopravny: integer;
  indexprvku:integer;

implementation

{$R *.dfm}


procedure TForm1.btn1Click(Sender: TObject);
begin
   
  panelinfo[indexpanelu].L_TK[indexprvku].left:=0;   //0 je pouze ilustrační, jinak se uloží skutečný left 
  panelinfo[indexpanelu].L_TK[indexprvku].top:=0;    //0 je pouze ilustrační, jinak se uloží skutečný top 
  //dále by pokračovalo nastavení všech vlastností daného typu (top, width, height ..... atd)

end;

Problém mi dělá nastavení indexů.
Celý program je server a ten čeká na připojení klienta, klient = vlaková stanice a ten zašle udaje serveru o počtu návěstidel v této stanici. Tím tak mám na serveru obraz stanic, což je vlastně dispečer sledující provoz v podřízených stanicích. Dispečer chci ale doplnit možností ovládat podřízené stanice. Ne každý klient při hře muže být trvale u PC (toaleta, večeře, manželka atd.) proto když musí klient odejít, má možnost předat řízení dispečerovi(serveru).

Přestože se vytvoří obraz stanic na serveru a mužu použít vlastnosti jednotlivých Image, je to málo. Proto jsem se rozhodl vytvořit typy které přebírají vlastnosti Image a přidávají vlastnosti nové, které budou využity následně při hře. Jsou to status ten udává zda je řízení na místní obsluhu (klient sám na PC si volí cesty), nebo na dálkovou obsluhu (dispečer řídí klientské PC a to podle toho volí cesty). Volbou cesty se v tomto případě rozumí kolej ve stanici po které pojede vlak. Volnost udává zda příslušná kolej je volná, nebo obsazená a tag1-4 je připraveno pro další využití. Tyto vlastnosti Image chybí, proto jsem si je takto vytvořil.

Problém nastává v tom že při spuštění nejsou typy Panelinfo nadeklarovány, to jsem zkoušel příkazem Setlenght(Panelinfo, lenght(panelinfo) + 1); což mi překladač vzal bez problémů. Tím tak došlo k vytvoření jak panelu, tak i udajů o tomto panelu. Jenže když vytvořím Panel a typ Panelinfo, nevím ještě v té chvíli kolik bude návěstidel (L_TK //levé zhlaví, tratová kolej). A proto se mi nedaří nastavit tu vlastnost tak jak je popsána v procedure TForm1.btn1Click(Sender: TObject);

Abych to tedy shrnul, potřebuji zapsat vlastnoti takto:
panelinfo[indexpanelu].L_TK[indexprvku].left:=0;

přičemž indexpanelu je integer, udávající počet připojených klientů a indexprvku je index toho daného návěstidla, vytvořeného na panelu. Jejich počet vím, protože je klient po připojení zasílá serveru a server si je vyparsuje ze zprávy a vytvoří.

Ale nevím jak postupovat na příkaz Setlenght, či použít jiný příkaz.

Příklad (3 klienti(stanice připojeny))
1 klient - 4 návěstidla
2 klient - 5 návěstidel
3 klient - 6 návěstidel

chci si změnit u 2.klienta 1.návěstidlo:
panelinfo[2].L_TK[1].left:=0;

chci si změnit u 3.klienta 5.návěstidlo:
panelinfo[3].L_TK[5].left:=0;

atd.

Předem děkuji za vaše rady.

Odpověď na otázku

1 Zadajte svou přezdívku:
2 Napište svou odpověď:
3 Pokud chcete dostat ban, zadejte libovolný text:

Zpět do poradny