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:
Wie Du siehst, wird hier auch das Neumalen wieder angestoßen. Ebenso wie das Neuberechnen der Liste.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;
Für alle Interessierten ist jetzt der Source zum Download verfügbar.






Zitieren

Lesezeichen