Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Вниз

DblClick на кнопке   Найти похожие ветки 

 
LDV   (2012-05-18 18:13) [0]

Нужно обрабатывать DblClick на кнопке. Отлавливаю сообщение WM_LBUTTONDBLCLK, но работает как-то криво, иногда при двойном щелчке сообщение не посылается. Есль ли другие варианты, как обработать двойной нажатие на кнопку?


 
Медвежонок Пятачок ©   (2012-05-18 21:00) [1]

заменить кнопку на другой контрол, так как кнопка задумана и заточена не для даблклика


 
TStas   (2012-05-19 11:24) [2]

>Медвежонок Пятачок // Ага. На TGraphicControl, а рисовать его той же API ф-цией, что и кнопку рисует. Вот пример, каторый с диска Фаронова:

procedure TForm1.Button1Click(Sender: TObject);
const
 W = 150; H = 50;     // Размеры "кнопки"
 Text = "Caption";    // Надпись на ней
var
 X, Y: Integer;       // Левый верхний угол
 R, RR: TRect;        
begin
 if Tag = 1 then
   Close    // Рисунок уже выведен. Второй щелчок на кнопке останавливает работу
 else with Canvas do  // Первый щелчок - отрисовка кнопки
 begin
   X := (Width - W) div 2;
   Y := (Height - H) div 2;
   R := Rect(X, Y, X + W, Y + H);
   // Обводим периметр кнопки:
   Rectangle(R.Left, R.Top, R.Right, R.Bottom);
   // Уменьшаем размер прямоугольника, чтобы не стереть обводку:
   InflateRect(R, -1, -1);
   // Отрисовка прямоугольника кнопки:
   DrawFrameControl(Handle, R, DFC_BUTTON, DFCS_BUTTONPUSH);
   // Отрисовка прямоугольника из точек для кнопки с фокусом:
   InflateRect(R, -4, -4);
   DrawFocusRect(R);
   RR := R;          // Запоминаем исходный прямоугольник
   // Устанавливаем шрифт:
   Font.Name := "Times New Roman";
   Font.Size := 20;
   Font.Style :=[fsBold];
   // Получаем прямоугольник для текста:
   DrawText(Handle, PChar(Text), Length(Text), R, DT_CALCRECT);
   // Смещаем на 1 пиксель вверх и влево от центра:
   OffsetRect(R, (RR.Right - R.Right) div 2 - 1,
                 (RR.Bottom - R.Bottom) div 2 - 1);
   // Выводим светлую кромку текста:
   Font.Color := clBtnHighLight;
   DrawText(Handle, PChar(Text), Length(Text), R, 0);
   // Отказ от отрисовки фона, чтобы не стереть уже выведенное:
   SetBkMode(Handle, Transparent);
   // Выводим темную кромку текста:
   OffsetRect(R, 2, 2);
   Font.Color := clBtnShadow;
   DrawText(Handle, PChar(Text), Length(Text), R, 0);
   // Выводим основной текст:
   OffsetRect(R, -1, -1);
   Font.Color := clBlack;
   DrawText(Handle, PChar(Text), Length(Text), R, 0);
   // Изменяем кнопку
   Tag := 1;
   Button1.Caption := "Выход"
 end
end;
А ещё через DrawFocusedControl можно рамочку "фокуса" нарисовать, а повторным вызовом стереть. Получится компонент, по виду идентичный кнопке, но работающий по-другому. И ловить ничего не надо, все события и так есть, в т. ч. DblClick


 
Ega23 ©   (2012-05-19 12:39) [3]

Возьми TPanel и не парься


 
TStas   (2012-05-19 13:31) [4]

>Ega23 ©  А нажиматься она будет изменением стиля границы? МОжно ведь ее делать вдавленной


 
Dennis I. Komarov ©   (2012-05-19 13:42) [5]

Если на кнопке (не обязательно TButton) требуется даблклик, я бы задумался на счет переделки ГУЯ, для юзверя сея операция крайне не удобна и не понятна...


 
Ega23 ©   (2012-05-19 13:51) [6]


> А нажиматься она будет изменением стиля границы? МОжно ведь
> ее делать вдавленной


У панели Canvas в паблике сидит, ты можешь её отрисовать как угодно.
И таки да, даблклик на кнопке - это гуй как минимум странный. Как минимум.


 
Медвежонок Пятачок ©   (2012-05-19 15:00) [7]

МОжно ведь ее делать вдавленной

зачем?
тренировать зрительную реакцию юзера?
где и в каком месте вы видели подобное?
в каком элементе стандартного итерфейса?


 
Inovet ©   (2012-05-19 15:10) [8]

> [7] Медвежонок Пятачок ©   (19.05.12 15:00)
> где и в каком месте вы видели подобное?

В больном воображении.


 
Amoeba_   (2012-05-19 21:35) [9]


> LDV   (18.05.12 18:13)
>
> Нужно обрабатывать DblClick на кнопке.

Странного захотелось?



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

Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.092 c
2-1332071987
Pcrepair
2012-03-18 15:59
2013.03.22
компонент TIdHTTP, разница в синтаксисе для ИНДИ7 и ИНДИ10


15-1345822753
brother
2012-08-24 19:39
2013.03.22
Сис админ - диагноз?


2-1343506606
3asys
2012-07-29 00:16
2013.03.22
Получение директории программы


2-1340107316
sas9568635
2012-06-19 16:01
2013.03.22
Написать процедуру задержки в эмуляторе процессора КР580


15-1329492368
поверфулл
2012-02-17 19:26
2013.03.22
Подскажите путевый учебник по HTML





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