losowanie

0

Mam pytanie odnośnie losowania (random). Ja najprościej można zrobić żeby wylosowana liczba wstawiała się w miejsce numeru labela ?? Chce zrobić coś takiego że co 5 sekund losuje się liczba i label z tym numerem zmienia kolor.

0

w timerze:
randomize();
int Liczba;
Liczba = random(ZAKRES);
Label->Caption = IntToStr(Liczba);

0

Proponuję dynamiczne tworzenie komponentów TLabel.
Ja zrobiłem coś takiego:

Wstaw na formę dwa komponenty Button i przekopiuj kod poniżej. Po wciśnięciu Buttona1 robi nowy label, a na Button2 losuje numer i zmienia kolor Labela:

unit Unit1;

interface

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

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
pos:Integer; //pozycja komponentu
liczbakomp:Integer; //liczba komponentów Tlabel
MojLabel: array[1..100] of TLabel; // array[1..100] - maksymalna ilość komponentów od 1 do 100

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
pos:=pos+10; // zmiana pozycji nowego komponentu
liczbakomp:=liczbakomp+1; // zwiększenie liczby komponentów o 1
MojLabel[liczbakomp]:= TLabel.Create(Form1);
MojLabel[liczbakomp].Left:=0;
MojLabel[liczbakomp].Top:=pos;
MojLabel[liczbakomp].Width:=100;
MojLabel[liczbakomp].Height:=100;
MojLabel[liczbakomp].Caption:='Jakiś tekst';
MojLabel[liczbakomp].Tag:=liczbakomp; {musi być wpisany tag}
Form1.InsertControl(MojLabel[liczbakomp]); //utworzenie komponentu na Form1
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Randomize;
MojLabel[Random(liczbakomp)+1].Color:=clRed; //losowanie. Musi być +1 , aby uniknąć błędu (komponenty dynamicznie tworzone mają indeks od 1, a random losuje od zera)
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
pos:=0;
liczbakomp:=0;
end;

end.

0

MojLabel: array[1..100] of TLabel; // array[1..100] - maksymalna ilość komponentów od 1 do 100

a ja bym proponował : MojLabel: array of TLabel;
a tak naprawdę to rysowanie po TCanvasie

0

walnij na forme Timer1:TTimer1 i Label1:TLabel1
wloncz Timera na iles tam INTERVALA np. 1000 = 1s.
i wpisz do Timer1 procedurke:
label1.Caption:='Wylosowana liczba to: '+IntToStr(random(100));

i co 1 sekunde Timer1 bedzie losowac liczbe.

Pozdrawiam.

SORKA zapomniałem o kolorze:
do label1.caption:='wylosowana liczba to: '+IntToStr(random(10)); (lepiej random = 10 )

ze zmianą tego label1 color wpisz w timer1:

np pod 1 przyjmij kolor zielony
2 np niebieski, 3 np. czerwony itd.

if label1.caption='wylosowana liczba to: 1' then begin
lable1.font.color:=clGreen; // kolor czcionki
{ lable1.color:=clBlack; } // kolor tła tylko labela
end;
potem dalej piszesz if lable1.caption:='wylosowana liczba to: 2' then begin
lablel1.font.color:=clBlue;
itd...

pozdrafiam lóźi na stronie 4programmers.net !

Panie Kulikowski, zechciej Pan edytowac wlasne posty jak sobie co przypomnisz, a nie pisac nastepne. Moderator pq

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