Форум: "KOL";
Текущий архив: 2006.12.17;
Скачать: [xml.tar.bz2];
ВнизВладимиру о 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 вся ветка
Форум: "KOL";
Текущий архив: 2006.12.17;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.042 c