Jump to content

Delphi. array of object, of record


kkmen
 Share

Recommended Posts

Sveiki. Vopšem darbojos ar delphi.

Saprotu, ko nozīmē record. Zinu kā pamatā strādā Array of record. Bet man nepieciešams izveidot, lai array [] būtu atkarīgs no Objektu noteiktā skaita, pie tam šim array jābūt ar record īpašībām. (iekšā vēl divi operātori) un objekts, kuru vēlos iekļaut ir TEdit.

 

Tātad

var   P:array[0..6] of record
  x,y:integer;
  end;
  X0,Y0 : integer;
  m,n : integer;
  Form1 : TForm1;

 

šeit ir kods kas norāda. 7 masīva elementi katram elementam atbilst vēl divi elementi

 

Es vēlos uztaisīt, lai to skaitli 6 varētu mainīt lietotājs. pirmā ideja jau bija pavisam vienkārši

var   P:array[0..StrToInt(Edit4.Text)-1] of record
  x,y:integer;
  end;
  X0,Y0 : integer;
  m,n : integer;
  Form1 : TForm1;

Bet nu nav tas pareizākais variants jeb vispār nestrādājos.

 

Tad atradu, ka vajagot kaut ko šādu darīt.

 

var   P:array[0..StrToInt(Edit4.Text)-1] of TEdit
  x,y:integer;
  end;
  X0,Y0 : integer;
  m,n : integer;
  Form1 : TForm1;

 

Bet diemžēl šajā gadījumā vairs nav pieļaujami records. Es nezinu. apstājos. izpalīdziet

Labots - kkmen
Link to comment
Share on other sites

Par P:array[0..StrToInt(Edit4.Text)-1] daļu - palasi par dinamiskajiem masīviem. Īsumā - būs tev vienkārši "array of something", kam izmēru norādīsi ar SetLength().

 

Par array of TEdit - tev to tiešām vajag? Ja record gadījumā masīvu "parastā" apstrāde parūpēsies gan par atmiņas rezervēšanu priekš recordiem, gan par atmiņas atbrīvošanu, tad TEdit (vai jebkura cita objekta) gadījumā tev *obligāti* pašam gan jāizveido objektus, gan tos jādestroyo (papildus darbībām ar masīva izmēra maiņu).

Link to comment
Share on other sites

var   P:array of record
	x,y:integer;
	end;

begin
SetLength(P, StrToInt(Edit7.Text));

 

Nu vispār jau es gribēju piesaistīt RadioGroup un skatoties kāda ir Edit7.Text vērtība... tik daudz RadioGroup.Items izveidot vai nodzēst.

 

Neizskatās ka es kaut kur uz priekšu tikšu, bet nu provēšu.

 

Edit. Strādā Wow. milzīgs paldies! tagad provēšu to RadioGroup kaut kā piesaistīt. Bet nedomāju ka tur nebūs grūti

 

Reāli tur vajag.... nolasīt kāda ir vērtība no Edit7.Text un tik daudz RadioGroup.ItemIndex.Create (noteikti tāds . Create neeksistē). Būtu ļoti jauki, ja kads man atmest webu, kur ir uzrasktīti visi tie RadioGroup parametri un ko vini dara.

Labots - kkmen
Link to comment
Share on other sites

Priekš kam tev vēl kaut kādus savus arrayus, ja tu lieto TRadioGroup?

Link to comment
Share on other sites

Vēl joprojām nesapratu...

 

Nu vispār jau es gribēju piesaistīt RadioGroup un skatoties kāda ir Edit7.Text vērtība... tik daudz RadioGroup.Items izveidot vai nodzēst.

procedure TForm1.Button1Click(Sender: TObject);
var
   count : integer;
begin
try
   count := StrToInt(Edit1.Text);
   if count > 0 then begin
    while RadioGroup1.Items.Count < count do begin
	    RadioGroup1.Items.Append('');
    end;
    while RadioGroup1.Items.Count > count do begin
	    RadioGroup1.Items.Delete(0);
    end;
   end;
except
   on EConvertError do ShowMessage('Nepareizs skaitlis');
end;
end;

Link to comment
Share on other sites

Vopšem programma darbojās ar daudzstūru zīmēšanu. iespējamas - rotācija, pārbīde, mērogošana. Zinu, augstskolas viela ir dzīvē nederīga viela, bet tomēr gribas padarboties.

 

Vopšem x,y koordināšu asī tiek atlikti punkti, skatoties kāda ir tā Edit7.Text vērtība, kas nosaka masīva elemetu skaitu. punktus savieno un izveidojas figūra... 7 stūri, 5 stūri, 3 stūri kā vien vēlies

 

tālāk katram masīva elementam ir pievienota x un y koordināta P[].x... P[].y un tālāk varēja prieka pec izveidot operāciju figūras apgriešana ap kādu konkrētu figūras punktu, kuru iespējams izvēlēties. Tāpēc vajadzēja RadioGroup. :) Tā vismaz es saprotu. Ja nu Tu ļoti ieinteresēts varu kodu atmest.

 

Kad es sasniegšu tādu līmeni, kad dzirdot galīgus amatieru teikumus, pāris sekundēs varēšu kodu uzrakstīt?

Labots - kkmen
Link to comment
Share on other sites

gm...

1) Par recordu - ja tev vajag tikai X un Y integerus, tad vari lietot TPoint recordu. Vienīgi nezinu, vai integeri būtu piemēroti - atkarīgs no tā, kā tiek realizēta tā rotācija utt, tb vai tās darbības ietekmē tikai zīmēšanu vai arī maina punktu x un y koordinātas. Ja otrs variants, tad ieteiktu kaut kādu float(?) tipu lietot.

2) Par RadioGroup - vēl ir problēma? Nevaru saprast...

3) Ja gribi "pa smuko"... Tie daudzstūri noteikti tiek kaut kur zīmēti. Vari TRadioGroup lietošanas vietā punktu izvēlēties, uzklikšķinot uz tā (vai blakus tam) ;)

4) Par "kad es sasniegšu tādu līmeni" - atkarīgs tikai un vienīgi no Tevis paša, no tā, cik daudz laika tam visam veltīsi ;)

Labots - binary
Link to comment
Share on other sites

vsjo. 3 nevarēšu. vēl 2 gribu nedaudz savādak. bet, jā, sapratu.

 

Edit: ar dynamic array cik saprotu tur ir milzīgas problēmas, jo viņš dzēš ārā vecos rādītājus. piemēram, ja izmaina Edit1.Text saturu tad arī masīvs mainās un tās vērtības, kas vairs neiekļaujas masīvā tiek izdzēstas, tātad risinājums ir array[0..1023] of records, bet par to risinājumu ar RadioGroup1.Items... milzīgs paldies binary.

 

Es gan gribētu uzzināt kā tas ietekmē veiktspēju un kurš risinājums būtu labāks. norādīt milzīgu masīvu vai labāk tomēr mācēt strādāt ar dynamic array?

Labots - kkmen
Link to comment
Share on other sites

Izveido kontu, vai pieraksties esošajā, lai komentētu

Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas

Izveidot jaunu kontu

Piereģistrējies un izveido jaunu kontu, tas būs viegli!

Reģistrēt jaunu kontu

Pierakstīties

Jums jau ir konts? Pierakstieties tajā šeit!

Pierakstīties tagad!
 Share

×
×
  • Izveidot jaunu...