Вопрос 1:
У меня есть форма, к которой привязан TImage (он растягивается при изменении размеров формы).
Ещё есть процедура TForm1.fieldResize (field - это TImage), в которой вызывается другая процедура, рисующая сетку на field.
Дело в том, что когда я только касаюсь уголочка окна, сеть рисуется, а мне надо, чтобы она рисовалась в конце. Как это сделать?
Вопрос 2:
Что нужно сделать, чтобы размер формы можно было менять только с шагом в 20 пикселей?
OnResize
Модератор: Модераторы
Ну незнаю, если такое кривое решение пойдет, то см исходники.
Код: Выделить всё
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Image1: TImage;
ScrollBox1: TScrollBox;
Timer1: TTimer;
procedure FormResize(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
OldW,OldH:Integer;
First:Boolean = false;
P:TNotifyEvent;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormResize(Sender: TObject);
var I:Integer;
Count20:Integer;
begin
if First then
begin
First :=False;
Form1.OnResize:=Nil;
Count20 :=(Width-OldW) div 20;
Width :=OldW+Count20*20;
Count20 :=(Height-OldH) div 20;
Height :=OldH+Count20*20;
end;
Image1.Picture:=Nil;
caption:=IntTOStr(Form1.Width);
Image1.Width :=Width-30;
Image1.Height:=Height-30;
Image1.Canvas.Brush.Color:=clWhite;
Image1.Canvas.FillRect(Image1.Canvas.ClipRect);
Image1.Canvas.Pen.Color:=clBlack;
for I:=0 to Image1.Width div 10 do
begin
Image1.Canvas.MoveTo(I*10,0);
Image1.Canvas.LineTo(I*10,image1.Height);
end;
First:=True;
Timer1.Enabled:=True;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
OldW:=Width;
OldH:=Height;
P:=Form1.OnResize;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled:=False;
Form1.OnResize:=P;
end;
end.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
