12. april 2005 - 16:34Der er
12 kommentarer og 1 løsning
Random farve til shape??
Hej, jeg har fire shape ( ShapeA, ShapeB, ShapeC og ShapeD) på min form. Jeg vil gerne have at når man starter programmet skal hver af de fire shape få et tilfældigt farve ud af disse 8 farver (clRed, clBlue, clGreen, clYellow, clSilver, clFuchsia, clAqua og clBlack).
Ja men så skal der lidt mere kode til, noget i denne stil:
procedure TForm1.FormCreate(Sender: TObject); const StartColors : array(.0..7.) of TColor =(clRed, clBlue, clGreen, clYellow, clSilver, clFuchsia, clAqua, clBlack); var ColorsLeft : array of TColor;
function GetColor : TColor; var i : integer; begin i:=Random(Length(ColorsLeft)); Result:=ColorsLeft[i]; if i+1<Length(ColorsLeft) then Move(ColorsLeft[i+1],ColorsLeft[i],(Length(ColorsLeft)-i-1) * SizeOf(TColor));
SetLength(ColorsLeft,Length(ColorsLeft)-1); end;
begin SetLength(ColorsLeft,Length(StartColors)); Move(StartColors,ColorsLeft[0],SizeOf(StartColors)); Randomize; ShapeA.Brush.Color:=GetColor; ShapeB.Brush.Color:=GetColor; ShapeC.Brush.Color:=GetColor; ShapeD.Brush.Color:=GetColor; end;
Din kode virker, men jeg må desværre sige at jeg ikke forstår hvorfor den virker :(
Hvis du er så venlig, at ville skrive hvad hver eneste sætning gør, så vil jeg være dig meget taknemlig og samtidig belønne det med ekstra point ( hvor mange point vil du have for det "ekstra arbejde" :D )?
function GetColor : TColor; var i : integer; begin i:=Random(ColorsLeft); Result:=ColorsLeft[i]; StartColors[i]:=StartColors[ColorsLeft-1]; Dec(ColorsLeft); end;
begin ColorsLeft:=Length(StartColors); Randomize; ShapeA.Brush.Color:=GetColor; ShapeB.Brush.Color:=GetColor; ShapeC.Brush.Color:=GetColor; ShapeD.Brush.Color:=GetColor; end;
Nu har jeg prøvet mange mange gange (læs: 1 million gange) og har ikke oplevet at de får samme farve.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.