OnResize

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

OnResize

Сообщение IonIvan » 17.06.2011 20:43:18

Вопрос 1:
У меня есть форма, к которой привязан TImage (он растягивается при изменении размеров формы).
Ещё есть процедура TForm1.fieldResize (field - это TImage), в которой вызывается другая процедура, рисующая сетку на field.
Дело в том, что когда я только касаюсь уголочка окна, сеть рисуется, а мне надо, чтобы она рисовалась в конце. Как это сделать?
Вопрос 2:
Что нужно сделать, чтобы размер формы можно было менять только с шагом в 20 пикселей?
IonIvan
незнакомец
 
Сообщения: 8
Зарегистрирован: 15.03.2011 19:00:00

Re: OnResize

Сообщение Maxizar » 17.06.2011 22:03:19

Ну незнаю, если такое кривое решение пойдет, то см исходники.
Код: Выделить всё
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.


У вас нет необходимых прав для просмотра вложений в этом сообщении.
Maxizar
постоялец
 
Сообщения: 385
Зарегистрирован: 20.03.2010 19:48:14


Вернуться в Lazarus

Кто сейчас на конференции

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

Рейтинг@Mail.ru