Модератор: Модераторы
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. Если опять не догадаетесь...

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1