Модератор: Модераторы
7bit писал(а):Приветствую, форумчане. Кто-нибудь знает как в дизайнере форм реализовано рисование сетки (точки на форме)? Куда смотреть в исходниках?
// Прорисовка рабочего поля MagSize - размерность сетки .
procedure TForm1.PaintBox1Paint(Sender: TObject);
var
I,J:LongInt;
begin
//...
I:=0;J:=0;
While I< ScrollBar1.Position+panel2.Height do begin
Inc(i,MagSize);
While J< ScrollBar2.Position+panel2.Width do begin
Inc(J,MagSize);
PaintBox1.Canvas.Pixels[j,i]:=clGray;
end;
j:=0;
end;
//...
end;
7bit писал(а):Медленно. Brush.Bitmap работает быстрее, но clDefault - черный. Думаю на этом варианте остановиться, но может есть вариант лучше. Вот как это в Lazarus реализовано?..
// Только 24 Бита !
Procedure Set_Pixel(Var BB:TBitmap;X,Y,C:Integer);
Type
TA=Array[0..1] of byte;
var
PA:^TA;
n:integer;
begin
if bb = NIL then exit;
// if not InR(x,0,bb.Width-1) then exit;
// if not InR(y,0,bb.Height-1) then exit;
Bb.BeginUpdate; ;
pa:=Pointer(BB.RawImage.Data);
N:=Y*(BB.Width*3)+X*3;
pa^[n] :=Blue(C);
pa^[n+1]:=Green(C);
pa^[n+2]:=red(C);
Bb.EndUpdate;
end;
procedure TDisplayForm.FormPaint(Sender: TObject);
var
brs: TBrush;
begin
brs := TBrush.Create;
brs.Bitmap := TBitmap.Create;
with brs.Bitmap do begin
Width := 10;
Height := 10;
Canvas.Pixels[0, 0] := clWhite;
end;
Canvas.Brush := brs;
Canvas.FillRect(ClientRect);
end;
xchgeaxeax писал(а):Или создайте Bitmap размером в шаг сетки по вертикали и горизонтали, потом в координатах 0, 0 поставьте точку на этом Bitmap и после по этой Bitmap создайте PatternBrush
xchgeaxeax писал(а):P.S.S. Если Form1.Color = clDefault, тогда можно считать цвет фона из того же Canvas.Pixels[0, 0] вне блока with .. do. Если опять не догадаетесь...
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 50