Hi Andree,
ich habe Dir eine rotate-Funktion eingefügt. Bitte schau mal, ob die's tut. V0.2 ist jetzt oben und zum Download bereit.
Edit: Ich sehe gerade, die wolltest ja auch eine andere Spaltenreihenfolge. Hab ich noch schnell integriert.
@sast:
Das ist keine Komponente.
Ich benutze einfach die Canvas-Oberfläche des Formulars: (Für das Zeichnen)
Code:
procedure TForm1.img_rePaint;
var r :Trect;
I,J :Integer;
begin
For I:=0 to 31 do
For J:=0 to 31 do begin
r.Left := img_offset+i*10+1;
r.Top := img_offset+j*10+1;
r.Right := r.Left+9;
r.Bottom := r.Top+9;
if img_array[I,J] then
Canvas.Brush.Color := clPurple
else
Canvas.Brush.Color := clWhite;
Canvas.FillRect(r);
end;
Canvas.Pen.Color := clLtGray;
For I:=0 to 32 do begin
canvas.MoveTo(img_offset,img_offset+i*10);
canvas.LineTo(img_offset+32*10,img_offset+i*10);
canvas.MoveTo(img_offset+i*10,img_offset);
canvas.LineTo(img_offset+i*10,img_offset+32*10);
end;
Canvas.Brush.Color := Form1.Color;
canvas.TextOut(img_offset,img_offset-15, '0');
canvas.TextOut(img_offset-15,img_offset, '0');
For I:=1 to 4 do begin
canvas.TextOut(img_offset+10*I*8-10,img_offset-15, IntToStr(8*I-1));
canvas.TextOut(img_offset-15,img_offset+10*I*8-10, IntToStr(8*I-1));
end;
end;
Aufgerufen wird diese Funktion bei allen Aktionen, die den Datenbestand ändern, und beim Windows-Repaint-Signal (TForm1.FormPaint).
Zum Ändern der Pixel benutze ich folgende Funktion, die ich in die Ereignisse TForm1.FormMouseMove und TForm1.FormMouseUp eingefügt habe:
Code:
procedure TForm1.PaintItem(X,Y :Integer; mLeft,mRight :Boolean);
VAR iX, iY :Integer;
changed :Boolean;
begin
iX := (X-img_offset) DIV 10;
iY := (Y-img_offset) DIV 10;
if (iX < 0) OR (iX > 31) OR (iY < 0) OR (iY > 31) THEN
exit;
StatusBar1.Panels[0].Text := '('+IntToStr(iX)+'|'+IntToStr(iY)+')';
changed := False;
IF mLeft THEN begin
if not(img_array[iX,iY]) then
changed := True;
img_array[iX,iY] := True;
end;
IF mRight THEN begin
if (img_array[iX,iY]) then
changed := True;
img_array[iX,iY] := False;
end;
if (changed) then
list_recalc;
img_rePaint;
end;
Wie Du siehst, wird hier auch das Neumalen wieder angestoßen. Ebenso wie das Neuberechnen der Liste.
Für alle Interessierten ist jetzt der Source zum Download verfügbar.
Lesezeichen