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

Вниз

Модернизация TImage!   Найти похожие ветки 

 
Makep   (2004-05-29 15:30) [0]

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

У меня такой вопрос:
задача состоит в том, что бы модернизировать объект Image, добавив к нему событие OnMouseOut - будет происходить когда
курсор мыши будит "уходить" с этого объекта!
Хачу сделать подобие Javascript-овским роловер рисункам!
А точнее кнопку меняющую свой вид!

Поажлуйста если вам нетрудно, подскажите как эту задачу можно решить!


 
Gero ©   (2004-05-29 16:20) [1]

Обрабытывать CM_MOUSEENTER/CM_MOUSELEAVE.


 
Sun bittern ©   (2004-05-31 06:07) [2]

Добавлю к Gero ©   (29.05.04 16:20) [1]

см. реализацию TLabel к примеру.


 
ElRaki   (2004-06-01 23:00) [3]

А можно чуть точнее? Это нужно создавать свой компонент?
Я подредактировал Extctrls-ничего не вышло (или его перекомпилировать как-то надо). Подскажите пожалуйста реализацию.


 
ElRaki   (2004-06-01 23:00) [4]

А можно чуть точнее? Это нужно создавать свой компонент?
Я подредактировал Extctrls-ничего не вышло (или его перекомпилировать как-то надо). Подскажите пожалуйста реализацию.


 
ElRaki   (2004-06-01 23:00) [5]

А можно чуть точнее? Это нужно создавать свой компонент?
Я подредактировал Extctrls-ничего не вышло (или его перекомпилировать как-то надо). Подскажите пожалуйста реализацию.


 
Gero ©   (2004-06-01 23:08) [6]


> Это нужно создавать свой компонент?

Да.

> Я подредактировал Extctrls

Не надо этого делать.

Это будет выглядеть примерно так:

 TImage1 = class(TImage)
 private
   FOnMouseLeave: TNotifyEvent;
   FOnMouseEnter: TNotifyEvent;
   procedure CMMouseEnter(var Msg: TMessage); message CM_MOUSEENTER;
   procedure CMMouseLeave(var Msg: TMessage); message CM_MOUSELEAVE;
 protected
   procedure MouseEnter; dynamic;
   procedure MouseLeave; dynamic;
 public
 published
   property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
   property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
 end;

implementation

procedure TImage1.CMMouseEnter(var Msg: TMessage);
begin
 MouseEnter;
end;

procedure TImage1.CMMouseLeave(var Msg: TMessage);
begin
 MouseLeave;
end;

procedure TImage1.MouseEnter;
begin
 if Assigned(FOnMouseEnter) then
   FOnMouseEnter(Self);
end;

procedure TImage1.MouseLeave;
begin
 if Assigned(FOnMouseLeave) then
   FOnMouseLeave(Self);
end;


 
Raki   (2004-06-02 23:50) [7]

Thanks.


 
OSokin ©   (2004-08-07 20:22) [8]

У меня есть подобная прога. Проверяет, находится ли мышь в области рисунка и меняет картинку. А если мышь была нажата на картинке - то до опускания книпки мыши ставит третью картинку а потом завершает прогу. Надо?


 
Юрий Зотов ©   (2004-08-07 23:42) [9]

> Gero ©   (01.06.04 23:08) [6]

procedure TImage1.CMMouseEnter(var Msg: TMessage);
begin
 inherited;
 MouseEnter;
end;

procedure TImage1.CMMouseLeave(var Msg: TMessage);
begin
 inherited;
 MouseLeave;
end;


 
GuAV ©   (2004-08-09 00:18) [10]

Gero ©   (01.06.04 23:08) [6]

> Не надо этого делать.

это в данном частном случае или общая рекомендация?


 
Мастер ©   (2004-08-09 10:12) [11]

>GuAV ©   (09.08.04 00:18) [10]
> Не надо этого делать.

это в данном частном случае или общая рекомендация?


Общая, однозначно.


 
GuAV ©   (2004-08-10 19:29) [12]


> Общая, однозначно.

Хорошо. А как тогда... ну например сделать поддержку shevron в TCoolBar - у них же там всё в привате? или... как исправлять явные ошибки в VCL?


 
Юрий Зотов ©   (2004-08-10 19:41) [13]

> GuAV ©   (10.08.04 19:29) [12]

> как исправлять явные ошибки в VCL?

Для начала их надо найти. Потом убедиться, что это действительно ошибки. А уж потом смотреть, как их можно исправить.


 
GuAV ©   (2004-08-11 02:45) [14]

Вот Вы, Юрий мне скажите какие методы управляют тем будет ли назначеное компоненту PopupMenu работать или нет. Я сначала подумал, что в OnPopup делать Abort. Потом нашел ContextPopup. Но... hotkeys то всё равно работают.

Или ладно, допустим вышезамеченное фича.
Тогда про поддержку тем ХР. Д7 вроде поддерживает. Хорошо. Создаём манифест, включаем соотв .res файл. Был TStatusBar который показывал AutoHint - теперь он ничего не показывает... Короче, всё это я уже упоминал в
http://delphimaster.net/view/1-1091736526/
http://delphimaster.net/view/1-1091736526/

Или на вкладке Additional TActionManager, TActionMainMenu, ect - они вообще похоже не доделаны.


 
nikkie ©   (2004-08-11 03:12) [15]

>GuAV
>Вот Вы, Юрий мне скажите какие методы управляют тем будет ли назначеное компоненту PopupMenu работать или нет.

ничего, если я встряну?

что значит "работать"? показываться? или срабатывать обработчики кликов у menuitems? если ты сделаешь "как положено" через TAction, то проблем с hotkey не будет.

>Тогда про поддержку тем ХР.
проблемы с поддержкой тем приложениями дельфи есть. но у меня не стоит XP, чтобы разбираться с ними. посмотри здесь, глядишь поможет:
http://www.soft-gems.net/ThemeManager.php


 
Юрий Зотов ©   (2004-08-11 12:22) [16]

> GuAV ©   (11.08.04 02:45) [14]

> какие методы управляют тем будет ли назначеное компоненту
> PopupMenu работать или нет


Вот несколько возможных вариантов - на выбор:
а.) Событие TControl.OnContextPopup.
б). Свойство TPopupMenu.AutoPopup.
в). Свойство TControl.PopupMenu (nil запрещает показ).
г). Свойства TAction: DisableIfNoHandler, Enabled.

>  Но... hotkeys то всё равно работают

nikkie уже ответил.

Пока что непонятно, о каких ошибках VCL идет речь. Я бы отнес эту проблему, скорее, к недостаточному знанию VCL - но VCL в этом уж точно не виновата.

Насчет поддержки тем XP сказать ничего не могу, поскольку пока что с этим плотно не разбирался. Но видел несколько программ, которые нормально дружат с XP и, по словам их разработчиков, ничего в VCL они не правили. Значит, ведь можно?

===============================

Вообще, править или не править VCL - это, конечно, дело хозяйское. Но если править, то рано или поздно Вы обязательно получите проблемы (например, проблемы несовместимости Вашей исправленной VCL со сторонними пакетами, или с новой версией Delphi). Когда-то давно в команде, где я сейчас работаю, пошли по пути наименьшего сопротивления и сделали именно такую ошибку - а вот сейчас приходится разгребать ее последствия. И не потому, что захотелось, а потому, что жизнь все равно заставила. Причем делать это приходится в ЖИВОМ проекте, что ГОРАЗДО сложнее, чем если бы СРАЗУ сделали по-нормальному.


 
Мастер ©   (2004-08-11 12:40) [17]

>GuAV ©   (10.08.04 19:29) [12]

>Хорошо. А как тогда... ну например сделать поддержку shevron в TCoolBar - у них же там всё в привате?

для этого необязательно менять VCL, достаточно сделать компонент-наследник от TCoolBar.


 
GuAV ©   (2004-08-11 18:41) [18]


> для этого необязательно менять VCL, достаточно сделать компонент-наследник
> от TCoolBar.

у них же там всё в привате
Так что никакого наследника не получится - или получится криво. Сам попробуй. если не веришь

Юрий Зотов ©   (11.08.04 12:22) [16]
Пришлось так сформулировать, потому что никто не отвечал.
Со всем согласен кроме тем ХР.
Эти разработчики делали TToolBar со св-вом меню? А TStatusBar с Autohintом? с ХР проблемы существуют, перепроверте
http://delphimaster.net/view/1-1091736526/
http://delphimaster.net/view/1-1091736526/

nikkie ©   (11.08.04 03:12) [15]
Проблема была с срабатывать обработчики кликов у menuitems - нужно было при некоторых обстоятельствах запретить. Да, сделал через TAction, но ведь в хелпе вроде написано, что OnContextPopup вроде должен "пропускать через себя и хоткей". Ладно, спишем это на мою тупость. Спасибо. И за ссылку спасибо, посмотрю.


 
GuAV ©   (2004-08-11 19:12) [19]


> Вообще, править или не править VCL - это, конечно, дело
> хозяйское. Но если править, то рано или поздно Вы обязательно
> получите проблемы (например, проблемы несовместимости Вашей
> исправленной VCL со сторонними пакетами, или с новой версией
> Delphi).

А как Вы отноститсь к тому, что копировать из VCL когда наследование ну никак не получается - в "свои" компоненты?


 
Юрий Зотов ©   (2004-08-11 19:46) [20]

> GuAV ©   (11.08.04 19:12) [19]

Копировать код в свои классы, имеется в виду?

Тоже, конечно, не шибко здорово, но это уже лучше, чем править VCL. По крайней мере, если что когда и заглючит, так хотя бы не генофонд. То есть, не все разом.


 
GuAV ©   (2004-08-11 23:01) [21]

Спасибо за ответ, оффтоп закрыт :-)


 
iBitmap   (2004-08-20 15:38) [22]

Удалено модератором
Примечание: Оффтопик



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

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

Наверх





Память: 0.52 MB
Время: 0.013 c
4-1118679326
ATarget
2005-06-13 20:15
2005.08.14
драйвер


14-1121950395
oldman
2005-07-21 16:53
2005.08.14
Смотрел вчера новости - долго ржал!


4-1118757036
Dr. Genius
2005-06-14 17:50
2005.08.14
Определение доступа к ресурсам компьютера


3-1120799709
АМБ
2005-07-08 09:15
2005.08.14
Программное создание DBF таблиц


4-1119508902
Grief
2005-06-23 10:41
2005.08.14
Окошко из трея (не знаю как назвать)





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