Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.06.26;
Скачать: CL | DM;

Вниз

Как, если возможно, обработать событие прокручивания у формы...   Найти похожие ветки 

 
Comp ©   (2003-06-10 12:02) [0]

...собственных полос прокрутки HorzScrollBar и VertScrollBar???
А точнее в обработчике события OnPaint имеется(например):
begin
Form1.canvas.Brush.Color:=ClWhite;
Form1.canvas.Fillrect(Rect(0,0,Form1.width,Form1.Height));
Form1.canvas.moveTo(10,10);
Form1.canvas.lineTo(20,20);
end;



И что происходит: при прокручивании полос прокрутки остаётся грязь от начального положения рисунка..
Как это избежать, помогите, пожалуйста..


 
Comp ©   (2003-06-10 12:12) [1]

Неужели никто не знает???


 
Zemal ©   (2003-06-10 12:39) [2]

Вот тебе пример как можно делать, а дальше я думаю догадаешься сам и найдёшь что нужно :)

const
DRAW = USER + 1;

type
TfmMain = class(TForm)
procedure FormCreate(Sender: TObject);
private
procedure AppMessage(var Msg: TMsg; var Handled: Boolean);
procedure AppMinimize(Sender: TObject);
procedure AppRestore(Sender: TObject);
procedure OnDraw(var Mes: TMessage); message DRAW;
protected
public
end;

var
fmMain: TfmMain;

implementation

{$R *.dfm}

procedure TfmMain.FormCreate(Sender: TObject);
begin
Application.OnMessage := AppMessage;
Application.OnMinimize := AppMinimize;
Application.OnRestore := AppRestore;
end;

procedure TfmMain.OnDraw(var Mes: TMessage);
begin
// При получении этого сообщения окно выполнит эту процедуру.
end;

procedure TfmMain.AppMinimize(Sender: TObject);
begin
// Будет возникать при минимизации окна.
end;

procedure TfmMain.AppRestore(Sender: TObject);
begin
// При востановлении окна.
end;

procedure TfmMain.AppMessage(var Msg: TMsg; var Handled: Boolean);
begin
// Происходит отлавливание всех сообщений окна.
// Осторожно! Сообщений очень много!
// Практически на каждое движение мышки.
// Можно так загрузить приложение, что оно никогда не ответит!
end;

end.


 
Zemal ©   (2003-06-10 12:50) [3]

Да, забыл уточнить. Событие OnDraw будет возникать когда ты будешь сам ручками отправлять message окну. Вот функция:

BOOL PostMessage(
HWND hWnd, // handle of destination window
UINT Msg, // message to post
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);


 
Zemal ©   (2003-06-10 12:58) [4]

Кстати, помоему есть message, который тебе нужен. Кажется что-то похожее WM_DRAWITEM, WM_HSCROLL, WM_VSCROLL. А в общем-то сам глянь в модуле Message.pas найдёшь их все :).


 
Zemal ©   (2003-06-10 13:03) [5]

Да, опять забыл посвятить в нюансы :). При перехвате сообщений окна ты должен либо переправить дальнейшую обработку сообщения, либо ничего не делать (тогда стандартный обработчик этого сообщения неполучит). Переправить можно примерно так:


if ... then inherited;


 
Zemal ©   (2003-06-10 13:31) [6]

Понятно, что-ли? В классе формы (т.е. другими словами окна у которого ты хочешь отловить событие), описываешь процедуру на определённый message. К примеру возьмём вертикальную прокрутку, тогда будет так:

type
TfMain = class(TForm)
...
private
...
procedure OnVertScroll(var Mes: TMessage); message WM_VSCROLL;
...
protected
...
public
...
end;

var
fMain: TfmMain;

implementation

{$R *.dfm}

procedure TfMain.OnVertScroll(var Mes: TMessage);
begin
// Вот тут и делай свою фишку по прорисовке.
// Но я бы посоветовал поискать сообщения
// для возникновения прорисовки в окне.
// И незабудь про inherited.
end;

end.


 
Comp ©   (2003-06-11 12:43) [7]

Да, попробую. спасибо.



Страницы: 1 вся ветка

Текущий архив: 2003.06.26;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.02 c
3-83853
explorer
2003-05-28 13:16
2003.06.26
Обработка ошибки хранимой процедуры


1-84393
Rel_
2003-06-09 14:05
2003.06.26
кол-во своб. памяти


1-84357
Александр-И
2003-06-16 15:10
2003.06.26
Как скрыть свойство в Object Inspector


1-84158
Child
2003-06-11 13:37
2003.06.26
BackGround формы


1-84234
Совсем новичок
2003-06-08 16:25
2003.06.26
Как сделать паузу или подождать прорисовывания TLabel?