Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Randomize (Shuffle) podataka u ListBoxu

[es] :: Pascal / Delphi / Kylix :: Randomize (Shuffle) podataka u ListBoxu

[ Pregleda: 832 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

BakiAna

Član broj: 346785
Poruke: 29



Profil

icon Randomize (Shuffle) podataka u ListBoxu02.05.2022. u 18:00 - pre 23 meseci
Ovako stoje stvari:

Postoji ListBox1, i u njega se dodaju podaci iz baze.db iz tabele iz koje uzima ime i prezime (radi i na VCL i FMX)
Code:

procedure TForm1.Button22Click(Sender: TObject);
var
  i: integer;
begin
  FDQuery1.Filter := 'od = 51';
  FDQuery1.Filtered := true;
  ListBox1.Items.Clear;
  FDQuery1.RecordCount;
  with FDQuery1 do
  begin
    for i := 0 to FDQuery1.RecordCount do
    begin
      ListBox1.items.Add(FieldByName('Ime').AsString + ' ' +
        FieldByName('Prezime').AsString);
      next;
    end;
  end;
  for i := ListBox1.Count - 1 downto 0 do
  begin
    if Trim(ListBox1.items[i]) = '' then
      ListBox1.items.Delete(i);
  end;
end;


Da se obrise jedan Item iz ListBoxa moze se koristiti
 with Listbox1 do
    if ItemIndex <> -1 then
      Items.Delete( ItemIndex ); 
ili
      ListBox1.Items.Delete(ListBox1.ItemIndex);

sto radi i na VCL i na FMX


I sad dolazi do problema:
sledeci kod za random (shuffle) radi na VCL
Code:

procedure TForm1.Button20Click(Sender: TObject);  //RANDOM  SHUFFLE
var
  i: integer;
begin
  for i := ListBox1.count - 1 downto 0 do
  begin
    if Trim(ListBox1.items[i]) = '' then
      ListBox1.items.Delete(i);
  end;
  randomize;
  with ListBox1.items do
    for i := count downto 2 do
      exchange(i - 1, random(i));
end;


Ali nikako nece u FMX

Radi se u Alexandria 11.1, za licne potrebe


[Ovu poruku je menjao savkic dana 03.05.2022. u 11:24 GMT+1]
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Randomize (Shuffle) podataka u ListBoxu03.05.2022. u 10:32 - pre 23 meseci
A sta ti javi?

Par stvari:
Code:

koristi 

 for i := 0 to FDQuery1.RecordCount - 1 do

ili 

FDQuery1.First;
while not FDQuery1.Eof;
begin
  ...
  FDQuery1.Next;
end;


Kad vec dodajes stavku u LB, proveri da li je prazna, umesto da ih naknadno brises.

Izbaci with ListBox1 ili ListBox1.items i direktno koristi ListBox1.items, pusti program kroz debugger, ukljuci debug dcu i onda redom sa F7/F8 kroz tvoj kod i kroz VCL/FMX kod gledaj gde je problem.
 
Odgovor na temu

BakiAna

Član broj: 346785
Poruke: 29



Profil

icon Re: Randomize (Shuffle) podataka u ListBoxu03.05.2022. u 11:06 - pre 23 meseci
[quote]savkic: A sta ti javi?

Ne javlja nikakvu gresku, samo jednostavno nece da promesa listu (sto radi u VCL, ali nece u FMX)
iste su komponente - ListBox u koji se upisuju imena, i dugme kojim se redosled vec upisanih imena menja

Redosled imena treba da se pretumba:

Ime 1
Ime 2
Ime 3
Ime 4

treba da bude npr.
Ime 2
Ime 4
Ime 3
Ime 1

ili u bilo kom drugom redosledu, samo da nije pocetni redosled, na svaki klik dugmeta.
 
Odgovor na temu

ravni

Član broj: 8894
Poruke: 373



+15 Profil

icon Re: Randomize (Shuffle) podataka u ListBoxu03.05.2022. u 13:34 - pre 23 meseci
Predlog:
1. ucitas podatke
2. proveris da li ti podaci odgovaraju - da li je ime prazno, da li pocinje na upitnik itd..
3. pretumbas podatke - randomize
4. i tek onda ih prebacis u GUI komponentu
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Randomize (Shuffle) podataka u ListBoxu03.05.2022. u 22:33 - pre 23 meseci
> Ne javlja nikakvu gresku, samo jednostavno nece da promesa listu (sto radi u VCL, ali nece u FMX)

Probaj da ubacis ListBox.BeginUpdate i ListBox.EndUpdate pre i posle mesanja.
Ako ne pomogne, mozes da prebacis stavke LB u neki memorijski TStringList, na njemu primenis mesanje, ispraznis LB i ponovo dodas stavke.

A tu je i da pustis program kroz debugger i vidis kako FMX LB radi i kako updejtuje, i refreshuje sadrzaj.

 
Odgovor na temu

BakiAna

Član broj: 346785
Poruke: 29



Profil

icon Re: Randomize (Shuffle) podataka u ListBoxu06.05.2022. u 20:07 - pre 23 meseci
iscackalo se,
u kodu umesto exchange moze se staviti move

funkcionise i u VCL i FMX
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Randomize (Shuffle) podataka u ListBoxu

[ Pregleda: 832 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.