Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Кнопка TButton + нажатие/отпускание 
:(
    Опции темы
Vitalik
Дата 16.11.2004, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Координатор проекта
Сообщений: 653
Регистрация: 8.11.2004
Где: Ukraine, Kharkov

Репутация: нет
Всего: 12



Здравствуйте!

Мне бы очень хотелось сделать такую кнопку, которая бы при первом клике нажималась (не отпускаясь после этого). При этом показывается меню. Потом при закрытии меню или повторном клике по этой кнопке она отпускается.
Использовать хочется TButton, чтобы можно было до этой кнопки с помощью Tab добраться. И желательно обойтись без дополнительных компонентов.
Были бы замечательно, если бы кнопке можно было бы послать какое-нибудь сообщение типа "нажмись и замри" smile и "отпустись обратно" smile

Спасибо за любые предложения!
PM MAIL WWW ICQ YIM   Вверх
<Spawn>
Дата 16.11.2004, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Данной функциональности можно добиться от TSpeedButton, кром получения фокуса вводаsmile Думаю, что прийдется использовать сторонние компоненты или писать что то свое.


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Snowy
Дата 16.11.2004, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Такой вариант: Кладем панельку. Делаем ей нужный раздел. Устанавливаем TabStop в true. Устанавливаем BorderStyle в sSingle, Ctl3D в false.
Длее события:
Panel1Enter - Panel1.Ctl3D:=false;
Panel1Exit - Panel1.Ctl3D:=true;
Длее на события клик и кейпресс:
with Panel1 do
if BevelOuter=bvRaised then
BevelOuter:=bvLowered
else
BevelOuter:=bvRaised;

Немножко своеобразно смотрится, но мне так даже больше понравилось :-) Особенно, когда таких кнопочек много.
PM MAIL   Вверх
Vitalik
Дата 16.11.2004, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Координатор проекта
Сообщений: 653
Регистрация: 8.11.2004
Где: Ukraine, Kharkov

Репутация: нет
Всего: 12



Воть, нашёл неплохое решение.

Есть маленькая кнопочка Button1 и произвольное контекстное меню PopupMenu1 с пунктом MenuItem1):
Код
procedure TForm1.Button1MouseUp(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
var
 Pt: TPoint;
begin
 Button1.Tag := 1 - Button1.Tag;
 SendMessage(Button1.Handle, BM_SETSTATE, Button1.Tag, 0);
 if (Sender as TButton).Tag = 1 then begin
   Pt := Button1.ClientToScreen(Point(0, Button1.Height));
   PopupMenu1.Popup(Pt.X, Pt.Y);
   Button1.Tag := 0;
   SendMessage(Button1.Handle, BM_SETSTATE, 0, 0);
 end;
end;
Код
procedure TForm1.Button1Exit(Sender: TObject);
begin
 Button1.Tag := 0;
 SendMessage(Button1.Handle, BM_SETSTATE, 0, 0);
end;
Код
procedure TForm1.MenuItem1Click(Sender: TObject);
begin
 // Делаем что-нибудь при щелчке по пункту меню
 Button1.Tag := 0;
 SendMessage(Button1.Handle, BM_SETSTATE, 0, 0);
end;


Всё вроде работает отлично. Но только меня немного смущает очень часто повторяющийся код:
Код
 Button1.Tag := 0;
 SendMessage(Button1.Handle, BM_SETSTATE, 0, 0);

Может можно как-нибудь более изящно решить данную задачу?


PM MAIL WWW ICQ YIM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0532 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.