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

Вниз

Владимиру о DoDrag   Найти похожие ветки 

 
homm ©   (2006-02-05 14:00) [0]

Сдравствуйте, Владимир.

Добавьте следующий код в обработчик DoDrag (зачем - чуть ниже)

procedure DoDrag( Self_: PControl; Cancel: Boolean );
var NewSize1, NewSize2: Integer;
   MousePos: TPoint;
   R: TRect;
   Prev: PControl;
   I, M : Integer;
   ex : Boolean;
begin
 if Self_.fDragging then
 begin
   if Self_.fInDoDrag then
       exit;
   Self_.fInDoDrag := TRUE;

   I := Self_.fParent.fChildren.IndexOf( Self_ );
   Prev := Self_;
   if I > 0 then
     Prev := Self_.FParent.fChildren.fItems[ I - 1 ];
   GetCursorPos( MousePos );
   if Cancel then
     MousePos := Self_.fSplitStartPos;
   <пропущено>
   Prev.BoundsRect := R;
   Global_Align( Self_.fParent );
   Self_.fInDoDrag := FALSE;
 end;
end;


А нужно это для следующей вещи: Если в для ресайза контролов требуется достаточно много времени, то следующий ресайз может наступить до оканчания прорисовки и получается каша. Выход: ставить Applet.ProcessMessages, но он не будет работать без защиты функции DoDrag. Как вариант конечно можете исправить  Applet.ProcessPaintMessages (следующий пост), но и это исправление думаю будет не лишним.


 
homm ©   (2006-02-05 14:00) [1]

А теперь про Applet.ProcessPaintMessages:

procedure TControl.ProcessPaintMessages;
var Msg: TMsg;
begin
 while PeekMessage( Msg, Handle, 15, 15, PM_NOREMOVE ) do
   Applet.ProcessMessage;
end;


Т.е. проверяем наличие сообщений о перерисовке и выполняем потом все подряд?


 
homm ©   (2006-02-05 14:07) [2]

[0]: ЗЫ fInDoDrag: Boolean;


 
homm ©   (2006-02-13 13:48) [3]


> Добавьте следующий код в обработчик DoDrag

А почему 2.33 не добалено? Ведь все же разжовано: как, что, почему, да и кода это прибавит байт 12 (навскидку). Разве что "пожалуйста" пропустил :) Дак вот оно: Пожалуйста! ;)


 
Vladimir Kladov   (2006-02-13 19:47) [4]

У меня в просмотре форума видно 5 последних постов. Если пост ушел по любой причине вниз, я его запросто могу не заметить.

Этот пост я видел, но оставил на потом, а потом забыл. На потом оставил вот почему: вы не пишите, какие строчки изменены, добавлены, удалены. Чтобы выполнить сравнение, я должен руками взять ваш код вставить в новый текстовой файл, найти прежний код и тоже вставить его в текстовой файл, затем натравить на них WinMerge. и тогда я вижу, что добавилось. И вижу кстати, что переменная ex лишняя. А если каждый в своих исправлениях будет оставлять мусор, вы представляете сколько Hints получат юзеры KOL? Вы думаете им это понравится? Советую включить у себя в опциях Hints/Warnings и пока есть хотя бы одно предупреждение код никому не показывать.

Насчет PaintMessages - в чем вопрос? Название же говорит за себя вроде.


 
homm ©   (2006-02-14 18:04) [5]


>  вы не пишите, какие строчки изменены, добавлены, удалены.
Я выделяю исправления жирным. Впреть буду коментировать изменыные строки.


>  И вижу кстати, что переменная ex лишняя.
Это сори. Просто я расчитывал на схему "увидел жирную строку - заменил, остальное не трогал".


> Насчет PaintMessages - в чем вопрос? Название же говорит
> за себя вроде.
Не знаю как Вы понимаете логику работы этой процедуы, но в моем понимании это должно выглядеть так:
1) проверяем наличие WM_Paint
2) если нет то выход
3) выборка и обработка WM_Paint сообщения
4) перейти к 1

Сейчас же логика процедуры следующая:
1) проверяем наличие WM_Paint
2) если нет то выход
3) выборка и обработка первого в очереди сообщения
4) перейти к 1
А если учесть что WM_Paint в очереди всегда последняя, то такая схема вообще кажется странной.
В принципе я этой функцией не пользуюсь, заметил случайно. Если она нужна Вам где-то именно в таком виде, то я не настаиваю на исправлении.


 
Vladimir Kladov   (2006-02-17 15:11) [6]

в последнем сообщении жирным выделено 2 слова - вижу. Возможно, глюк Dolphin"а - не выделяет жирным среди кода.

В общем случае, не следует переставлять порядок обработки сообщений. Та версия ProcessPaintMessages выполняет все сообщения в очереди, пока в очереди остается хотя бы один WM_PAINT. По-моему, вполне корректно.


 
Vladimir Kladov   (2006-02-23 17:14) [7]

Изменение в DoDrag не принимается: перестают работать сплиттеры.



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

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

Наверх




Память: 0.49 MB
Время: 0.037 c
2-1164884539
kulkse
2006-11-30 14:02
2006.12.17
из DBGrid в ListBox


15-1164479682
DillerXX
2006-11-25 21:34
2006.12.17
Экслер - История безнадежно женатого человека


1-1162638387
312Kbps
2006-11-04 14:06
2006.12.17
Получить скрин окна по его хендлу !


15-1164552740
ShellX
2006-11-26 17:52
2006.12.17
Интересная задачка


5-1145023755
SMAC
2006-04-14 18:09
2006.12.17
Binary component