Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 322

/ вопрос решён /

Здравствуйте. С кнопками у меня нечего не получилось, ну и
ладно. Я хочу задать вопрос, а с Image1 может так получится.
Я постараюсь правильно сформулировать вопрос.
На форму ложу Image1 и Image2, одну на другую.
Открываю в них две иконки в Image1 32*32, а в Image2 64*64.
Вопрос? Как мне сделать так, что бы наведя на иконку мышкой
(32*32 т.е Image1),появлялась иконка(64*64 т.е Image2),
а, убрав мышку с Image2(64*64), опять появлялась Image1(32*32), так
как это сделано с иконками в программах Talisman, Aston, StileXP,
ну и так далее.
А вот с окнами у меня подошёл один код, который отправил
Сергей Устинов. Спасибо ещё раз всем. Так как я начинающий,
поэтому информацию черпнул не плохую. Ну а если вернутся к окнам
то и здесь маленький нюанс, мне надо, что бы все окна сворачивались,
а моё (главной формы) не сворачивалось. Можно так сделать? И в
заключении ещё раз поблагодарю всех, кто помогает тем, кто в этом ещё
не силён. Большое спасибо.

Толков Геннадий Викторович Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: Толков Геннадий Викторович (статус: Посетитель)
Вопрос отправлен: 17 февраля 2007, 23:07
Состояние вопроса: решён, ответов: 2.

Ответ #1. Отвечает эксперт: Сергей Устинов

Здравствуйте, Толков Геннадий Викторович!

Пусть Image1 - маленькая картинка, Image2 - большая картинка.
Проще всего сделать так:
В обработчике формы OnMouseMove (FormMouseMove) пропишите:
Image2.Visible:=false;
Image1.Visible:=true;
а в обработчике Image1 OnMouseMove (Image1MouseMove)
Image1.Visible:=false;
Image2.Visible:=true;

Удачи!

Приложение:
  1. procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  2. Y: Integer);
  3. begin
  4. Image2.Visible:=false;
  5. Image1.Visible:=true;
  6. end;
  7.  
  8. procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  9. Y: Integer);
  10. begin
  11. Image1.Visible:=false;
  12. Image2.Visible:=true;
  13. end;


Ответ отправил: Сергей Устинов (статус: 2-ой класс)
Время отправки: 17 февраля 2007, 23:48
Оценка за ответ: 5

Ответ #2. Отвечает эксперт: Вадим К

У TImage есть два хороших события - OnMouseEnter (мышь "зашла на комнонент") и OnMouseLeave ("покинула"). Если у вас делфи 7 и младше, то чтаем статью http://www.delphiworld.narod.ru/base/add_event_onmouseleave.html и пишем компонент с этими событиями.
Два. Запомните, что не всегда решение в лоб есть правильним и красивым. Иногда достаточно чуточку сменить идею решения и оно становиться простым и изящьним. В вашем случае, я обошёлся бы одним Image. Загрузил в него бОльшую картинку. Выставил свойство stretch = true. и задал бы размеры как для маленькой. Картинка автоматом отмаштабировалась. Теперь при наведении просто увеличиваем размеры.
А что бы вашу форму нельзя было свернуть, то нужно перехватить само события сворачивания и обработать самостоятельно. Делается это очень просто
Вначале в private части описания формы (под словом private) вставляем такой код
Private declarations}
procedure WMSysCommand(var Msg: TWMSysCommand); message WM_SYSCOMMAND;
Нажимаем Ctrl+Shift+C. Делфи згенерирует обработчик. Туда впишем следующее
if (Msg.CmdType = SC_MINIMIZE) or (Msg.CmdType = SC_MAXIMIZE) then
MessageBeep(0)
else
inherited;
Теперь при попытке свернуть или развернуть во весь экран оно будет пищать, но не будет выполнять. inherited нужен для того, что бы другие действия (например развернуть форму) были выполнены кодом по умолчанию. Без этой строки поведение будет странным (попробуйте в качесве эксперемента)

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 18 февраля 2007, 02:14
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 3; последнее сообщение — 18 февраля 2007, 02:50; участников в обсуждении: 2.
Сергей Устинов

Сергей Устинов (статус: 2-ой класс), 18 февраля 2007, 00:31 [#1]:

Забыл добавить... В начале работы программы Image1.Visible:=true;
Image2.Visible:=false;
Эти параметры можно выбрать как в инспекторе объектов, так и прописать в обработчике формы OnCreate.
Толков Геннадий Викторович

Толков Геннадий Викторович (статус: Посетитель), 18 февраля 2007, 01:45 [#2]:

А как насчёт окон?
Сергей Устинов

Сергей Устинов (статус: 2-ой класс), 18 февраля 2007, 02:50 [#3]:

to: Толков Геннадий Викторович
А что насчет окон? Спроси... поможем...

31 января 2011, 19:26: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:58
Выполнено за 0.02 сек.