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

Вниз

Не смог найти в стандартной палитре компонент!   Найти похожие ветки 

 
Германн ©   (2006-02-05 03:34) [0]

Поясню. Хотел использовать компонент из стандартных. Типа кнопки. Имеющий "наглядный" рисунок. Но такой, чтобы при нажатии мышкой на него "визульно это нажатие отбражалось" изменением Bevel"а. Чтобы "отжатие" кнопки мыши также отображалось изменением Bevel"а.
Но не смог найти такой, чтобы он формировал только два события. Кнопка нажата, Кнопка отпущена(отжата)!

Решил пока свою задачу с помощью TPanel с помещённым на неё TImage. И соответственно с помощью приведения типа TPanel(TImage(Sender).Parent).BevelOuter:=bvLowered;
В чём я не прав?


 
Petr V. Abramov ©   (2006-02-05 03:57) [1]

Не понял либо
Вам чем-го то не хватает в TBitBtn или TspeedButton
Вас не устраивает кол-во событий больше 2-х (маловероятно...)


 
Джо ©   (2006-02-05 04:00) [2]

Присоединяюсь, не понял вопроса. Сергей, может, "зайдете с другого конца"? ;)


 
Германн ©   (2006-02-05 04:12) [3]


> Petr V. Abramov ©   (05.02.06 03:57) [1]
>
> Не понял либо
> Вам чем-го то не хватает в TBitBtn или TspeedButton
> Вас не устраивает кол-во событий больше 2-х (маловероятно.
> ..)
>


Да не устраивает! Кидаем на форму TSpeedButton. Прописываем обработчики OnMouseDown, OnMouseUp. Только ShowMessage в них.
Вызываем Run (Ну не люблю я термины "запускаем" и "вызываем", но как
ещё по русски это сказать, я не знаю! Но суть та же!)
При нажатии на сию кнопку сначала вызывается обработчик "OnMouseUp" Откуда и с чего совершенно не понятно.


 
Джо ©   (2006-02-05 04:14) [4]

> [3] Германн ©   (05.02.06 04:12)

OnClick?


 
Германн ©   (2006-02-05 04:23) [5]


> Джо ©   (05.02.06 04:14) [4]
>
> > [3] Германн ©   (05.02.06 04:12)
>
> OnClick?
> <Цитата>
>

Это, может быть и ДА. Но тогда зачем "OnMouseDown"?


 
Джо ©   (2006-02-05 04:53) [6]

> [5] Германн ©   (05.02.06 04:23)
> Это, может быть и ДА. Но тогда зачем "OnMouseDown"?


Наследство TControl.


 
Германн ©   (2006-02-05 04:56) [7]

:(((


 
Джо ©   (2006-02-05 04:58) [8]

> [7] Германн ©   (05.02.06 04:56)
> :(((

А чем оно реально мешает-то?


 
Defunct ©   (2006-02-05 05:04) [9]

> Но не смог найти такой, чтобы он формировал только два события. Кнопка нажата, Кнопка отпущена(отжата)!

Гм.. я понимаю если бы генерировалось только одно событие когда нужно два.. например, только "Кнопка отпущена". А так их много, в таких случаях просто не используют лишние, ну всмысле те, которые не нужны.

> Да не устраивает! Кидаем на форму TSpeedButton. Прописываем обработчики OnMouseDown, OnMouseUp.

Киньте BitBtn с теми же обработчиками.

> При нажатии на сию кнопку сначала вызывается обработчик "OnMouseUp" Откуда и с чего совершенно не понятно.

И все будет ок, вызовется сперва down, затем up.
Или пошаманьте с SpeedButton, похоже в нем есть ошибка.


 
homm ©   (2006-02-05 09:39) [10]


> > При нажатии на сию кнопку сначала вызывается обработчик
> "OnMouseUp" Откуда и с чего совершенно не понятно.
Гон какой-то. Все правильно вызывается. (d5up1)


 
Германн ©   (2006-02-06 02:46) [11]


> Defunct ©   (05.02.06 05:04) [9]


> homm ©   (05.02.06 09:39) [10]


Ну вот специально проверил на "чистом" проекте.

File-New-Application.
Кидаю на пустую форму SpeedButton. Прописываю обработчики OnMouseDown и OnMouseUp.
procedure TForm1.SpeedButton1MouseDown(Sender: TObject;
 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
 if TSpeedButton(Sender).Down then ShowMessage("OnSBMouseDown - Down")
 else ShowMessage("OnSBMouseDown - Up");
end;

procedure TForm1.SpeedButton1MouseUp(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
 if TSpeedButton(Sender).Down then ShowMessage("OnSBMouseUp - Down")
 else ShowMessage("OnSBMouseUp - Up");
end;

Жму F9 затем нажимаю на кнопку. Сначала появляется окно с сообщением OnSBMouseUp - Up, затем с OnSBMouseDown - Up. После чего кнопка показывается "нажатой". Затем при отпускании кнопки идет сообщение OnSBMouseUp - Up.
Проверено в Д4 и в Д6.
Так вот - как отличить первое событие OnSBMouseUp - Up от второго?

2 Джо ©   (05.02.06 04:58) [8]

> [7] Германн ©   (05.02.06 04:56)
> :(((
А чем оно реально мешает-то?
Хотел реализовать "Рукоятку Мертвеца" (Dead Man"s Handle).

2 Defunct ©   (05.02.06 05:04) [9]
Киньте BitBtn с теми же обработчиками.
И все будет ок, вызовется сперва down, затем up.
Кидал, но BitBtn не менял свой внешний вид в таком варианте. :(


 
Defunct ©   (2006-02-06 02:50) [12]

> Кидал, но BitBtn не менял свой внешний вид в таком варианте. :(

Я не об этом. Я том, что посмотрите разницу в организации BitBtn и SpeedBtn и подправьте последний. Потому что, здается в нем есть ошибка.


 
Германн ©   (2006-02-06 03:04) [13]


> Defunct ©   (06.02.06 02:50) [12]
>
> > Кидал, но BitBtn не менял свой внешний вид в таком варианте.
>  :(
>
> Я не об этом. Я том, что посмотрите разницу в организации
> BitBtn и SpeedBtn и подправьте последний. Потому что, здается
> в нем есть ошибка.
>


Но и я тоже не об этом!
Искать ошибки, если таковые есть, в реализации TSpeed Button? Дык мне за это никто не заплатит! Свободного времени для "вольного художества" - тоже нет! Да и не специалист я, копаться в исходниках VCL. :(
Я - просто "бывший" инженер-физик, который в поисках куска хлеба, взялся за программирование устройств на микропроцессорах. Но вот "тестовые" программы для них, я тоже должен написАть!


 
ASoft   (2006-02-06 03:47) [14]

Действительно, странно...
Если не писать никаких обработчиков на одну Speed Button то после нажатия она автоматом возвращается в состояние "Up". Иначе, что происходит:
1. Нажимаем на кнопку - проверяется ее сосотояние - "Отжата" - получаем сообщение "Up".
2. Кнопка нажимается и тут же отпускается (должно быть так) - получаем опять сообщение "Up". Но визуально кнопка осталась нажатой.<\b> Глюк?
Пишем проперть кнопки Down:=True (GroupIndex:=1) - будем получать сообщение "Down".  (D7)


 
Германн ©   (2006-02-06 03:57) [15]


> ASoft   (06.02.06 03:47) [14]
>
> Действительно, странно...
> Если не писать никаких обработчиков на одну Speed Button
> то после нажатия она автоматом возвращается в состояние
> "Up". Иначе, что происходит:
> 1. Нажимаем на кнопку - проверяется ее сосотояние - "Отжата"
> - получаем сообщение "Up".

Но перед этим получаем сообщение MouseUp!


 
Defunct ©   (2006-02-06 04:56) [16]

Германн ©   (06.02.06 03:04) [13]

В таком случае, думаю, что Ваше решение с "panel+image" вполне нормальное. Если оформить это в компонент будет вообще, то что надо (собственно для себя так и сделал, только объединил не TImage с TPanel, а TPicture с TPanel).

PS: я по большей части тоже работаю не с x86, а тестовые программы также как и Вы пишу сам, однако в стремлении к красоте тестовых программ, стараюсь не доводить дело до фанатизма...


 
ASoft   (2006-02-06 07:15) [17]

>[15]
что значит Но перед этим получаем сообщение MouseUp!
Пока на кнопку не нажали ничего не получаем :)


 
homm ©   (2006-02-06 08:36) [18]


> Ну вот специально проверил на "чистом" проекте.
>
> File-New-Application.
> Кидаю на пустую форму SpeedButton. Прописываю обработчики
> OnMouseDown и OnMouseUp.
> procedure TForm1.SpeedButton1MouseDown(Sender: TObject;
>  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
>
> begin
>  if TSpeedButton(Sender).Down then ShowMessage("OnSBMouseDown
> - Down")
>  else ShowMessage("OnSBMouseDown - Up");
> end;
>
> procedure TForm1.SpeedButton1MouseUp(Sender: TObject; Button:
>  TMouseButton;
>  Shift: TShiftState; X, Y: Integer);
> begin
>  if TSpeedButton(Sender).Down then ShowMessage("OnSBMouseUp
> - Down")
>  else ShowMessage("OnSBMouseUp - Up");
> end;
>
> Жму F9 затем нажимаю на кнопку. Сначала появляется окно
> с сообщением OnSBMouseUp - Up, затем с OnSBMouseDown - Up.
>  После чего кнопка показывается "нажатой". Затем при отпускании
> кнопки идет сообщение OnSBMouseUp - Up.
> Проверено в Д4 и в Д6.
> Так вот - как отличить первое событие OnSBMouseUp - Up от
> второго?


Помоему всем давно известно, что сама винда глючит если в обработчике UP/DOWN передавать фокус на другие окна. Для этого есть событио OnClick. Следующий код работает на ура:

procedure TForm1.SpeedButton1MouseDown(Sender: TObject;
 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
   Memo1.Lines.Add("Down");
end;

procedure TForm1.SpeedButton1MouseUp(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
   Memo1.Lines.Add("Up");
end;



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

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

Наверх





Память: 0.5 MB
Время: 0.039 c
9-1125575221
McSource
2005-09-01 15:47
2006.02.26
Обновление OpenGL


15-1138966981
DelphiFan
2006-02-03 14:43
2006.02.26
MinGW


3-1135759898
tytus
2005-12-28 11:51
2006.02.26
Dinamic SQL error -206


2-1139213846
типа прогер
2006-02-06 11:17
2006.02.26
Как закрыть БД?


2-1139140815
TimScorp
2006-02-05 15:00
2006.02.26
Про базы!!!





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