Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.026 c
8-84453
Dimonich
2003-03-03 18:26
2003.06.26
Музыкальный пригрыватель


1-84230
DJ Vano
2003-06-13 02:25
2003.06.26
TMemo и TScrollBar


1-84433
Эстонец
2003-06-09 18:37
2003.06.26
Диалог смены иконки


14-84609
race1
2003-06-09 13:11
2003.06.26
m->wm


14-84716
KaRaT
2003-06-05 14:48
2003.06.26
manual по Бест?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский