Форум: "Основная";
Текущий архив: 2003.06.26;
Скачать: [xml.tar.bz2];
ВнизКак, если возможно, обработать событие прокручивания у формы... Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.031 c