Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.043 c
2-1164896709
KyRo
2006-11-30 17:25
2006.12.17
DBGRID с разноцветніми строками


15-1164349741
Иксик
2006-11-24 09:29
2006.12.17
"Книги, повышающие уровень знаний" (с)


15-1164392601
furyz
2006-11-24 21:23
2006.12.17
Так сяк


1-1162539533
Gear
2006-11-03 10:38
2006.12.17
Как правильно закрыть все потоки закрывая программу?


1-1162540775
wild_arg
2006-11-03 10:59
2006.12.17
Показ неактивного окна





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский