Главная страница
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.019 c
14-84570
Shaman
2003-06-04 10:50
2003.06.26
Runtime error 105 - что значит?


1-84396
Charly
2003-06-09 14:42
2003.06.26
Мышь - управление с клавиатуры


3-83900
tan
2003-06-03 10:21
2003.06.26
Как избавиться от ошибки General SQL Error -2146824655


1-84179
Maxim Pshevlotsky
2003-06-07 07:29
2003.06.26
Не выгружается MTS сервер


1-84208
Rule
2003-06-12 17:59
2003.06.26
Вызов браузера, установленоого по умолчанию с нужной страницей