![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
DblClick на кнопке
LDV © (2012-05-18 18:13:00)Нужно обрабатывать DblClick на кнопке. Отлавливаю сообщение WM_LBUTTONDBLCLK, но работает как-то криво, иногда при двойном щелчке сообщение не посылается. Есль ли другие варианты, как обработать двойной нажатие на кнопку?
Amoeba_ (2012-05-19 21:35:00) [1]
> LDV (18.05.12 18:13)
>
> Нужно обрабатывать DblClick на кнопке.
Странного захотелось?
Inovet (2012-05-19 15:10:00) [2]> [7] Медвежонок Пятачок © (19.05.12 15:00)
> где и в каком месте вы видели подобное?
В больном воображении.
Медвежонок Пятачок (2012-05-19 15:00:00) [3]МОжно ведь ее делать вдавленной
зачем?
тренировать зрительную реакцию юзера?
где и в каком месте вы видели подобное?
в каком элементе стандартного итерфейса?
Ega23 (2012-05-19 13:51:00) [4]
> А нажиматься она будет изменением стиля границы? МОжно ведь
> ее делать вдавленной
У панели Canvas в паблике сидит, ты можешь её отрисовать как угодно.
И таки да, даблклик на кнопке - это гуй как минимум странный. Как минимум.
Dennis I. Komarov (2012-05-19 13:42:00) [5]Если на кнопке (не обязательно TButton) требуется даблклик, я бы задумался на счет переделки ГУЯ, для юзверя сея операция крайне не удобна и не понятна...
TStas (2012-05-19 13:31:00) [6]>Ega23 © А нажиматься она будет изменением стиля границы? МОжно ведь ее делать вдавленной
Ega23 (2012-05-19 12:39:00) [7]Возьми TPanel и не парься
TStas (2012-05-19 11:24:00) [8]>Медвежонок Пятачок // Ага. На 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
Медвежонок Пятачок (2012-05-18 21:00:00) [9]заменить кнопку на другой контрол, так как кнопка задумана и заточена не для даблклика