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

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

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

Delphi.int.ru Expert

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

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

#   

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


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

Подробнее »



Вопрос # 2 505

/ вопрос открыт /

Здравствуйте уважаемые эксперты!

Подскажите пожалуйста, как описывается групповая обработка компонентов, а именно кнопок (TButton):

на форме (TForm1.) размещены 3-и кнопки (Button1 , Button2 , Button3).

Надо, что-бы при наведении курсора мыши к определённой кнопки, - эта кнопка увеличивалась в 2 раза, иначе возврат её исходного состояния.

За ранее благодарю.

Приложение:
  1. procedure TForm1.ButtonsMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  2. var
  3. a,b,c: Integer;
  4. begin
  5.  
  6. a:=TButton(Components[b]).Width(self);
  7. c:=TButton(Components[b]).Height(self);
  8.  
  9. if Components[b] is TButton then
  10. with Components[b] as TButton do
  11. TButton(Components[b]).Width:= TButton(Components[b]).Width*2
  12. TButton(Components[b]).Height:=TButton(Components[b]).Height*2;
  13. else
  14. TButton(Components[b]).Width:=a;
  15. TButton(Components[b]).Height:=c;
  16. end;


gyhy Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: gyhy (статус: Посетитель)
Вопрос отправлен: 11 марта 2009, 18:31
Состояние вопроса: открыт, ответов: 2.

Ответ #1. Отвечает эксперт: Ученый

Здравствуйте, demmetriy! Немного не то событие для кноппок выбрали.... я приведу код для одной кнопки....думаю дальше сами дороботаете:


procedure TForm1.Button1MouseEnter(Sender: TObject);
begin
 button1.Height:=button1.Height*2;
 button1.Width:=button1.Width*2
end;
 
procedure TForm1.Button1MouseLeave(Sender: TObject);
begin
 button1.Height:=Round(button1.Height/2);
 button1.Width:=Round(button1.Width/2)
end;

Надеюсь, что мой ответ моможет вам :))

Ответ отправил: Ученый (статус: 8-ой класс)
Время отправки: 11 марта 2009, 20:31
Оценка за ответ: -1

Ответ #2. Отвечает эксперт: min@y™

Ну, не знаю, у меня тут в delphi 7 нету у TButton событий OnMouseEnter и OnMouseLeave. Поэтому, можно самому написать потомок TButton на эту тему.
Пристёгиваю к ответу то, что тебе, имхо, и нужно. Ну, по крайней мере, я так это понял.
К ответу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки ответа)

Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 11 марта 2009, 21:15
Оценка за ответ: 1


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

Всего сообщений: 8; последнее сообщение — 14 марта 2009, 09:23; участников в обсуждении: 3.
min@y™

min@y™ (статус: Доктор наук), 11 марта 2009, 20:33 [#1]:

a:=TButton(Components[b]).Width(self); // <--- Чему равно "b"?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
min@y™

min@y™ (статус: Доктор наук), 11 марта 2009, 20:35 [#2]:

А ".Width(self)" — это что за бред такой?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
gyhy

gyhy (статус: Посетитель), 12 марта 2009, 17:32 [#3]:

В моем коде события OnMouseMove кнопок (Button1, ...2, ...3) имеют одинаковые значения, следовательно :

a:=TButton(Components[b]).Width(self);

TButton(Components[b]) - определённый компонент (Button) класса TButton.

Width(self) - начальная позиция (х,у).

Данный код процедуры ButtonsMove в последующем встраивается мной в событие OnMouseMove кнопок (Button1, ...2, ...3). Это чтобы не заполнять редактор кода однотипной информацией одинаковых методов с компонентами одного класса, так как в этом примере лишь 3-и кнопки с одинаковыми графическими свойствами.
Вадим К

Вадим К (статус: Академик), 12 марта 2009, 17:41 [#4]:

А Ваш код точно компилируется? я не уверен по поводу строки
a:=TButton(Components[b]).Width(self);
Также смотрим в вторую половину кода
if Components[b] is TButton  then
    with Components[b] as TButton  do
       TButton(Components[b]).Width:= TButton(Components[b]).Width*2
       TButton(Components[b]).Height:=TButton(Components[b]).Height*2;
  else
        TButton(Components[b]).Width:=a;
        TButton(Components[b]).Height:=c;
end;
в данном коде b неопределенно. То есть может быть каким угодно.
строка with Components[b] as TButton do вообще не нужна.
дальше, а где begin/end для then и для else?
Но даже если их поставить, то в ветке else Components[b] не будет кнопкой и соответсвенно дальнейшее присваивание бессмысленно.
Галочка "подтверждения прочтения" - вселенское зло.
min@y™

min@y™ (статус: Доктор наук), 12 марта 2009, 22:01 [#5]:

Ты смотрел тот пример, который я прицепил к своему ответу или нет?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
gyhy

gyhy (статус: Посетитель), 12 марта 2009, 22:51 [#6]:

Да, смотрел: именно то что мне и надо,

но помимо кнопок у меня ещё несколько типов компонентов с одинаковым классом и одинаковыми методами.

И только этот код может быть решением данных проблем
Вадим К

Вадим К (статус: Академик), 13 марта 2009, 08:46 [#7]:

Ваш код не может быть решением - он синтаксически не верный. Он даже не скомпилируется.
Галочка "подтверждения прочтения" - вселенское зло.
min@y™

min@y™ (статус: Доктор наук), 14 марта 2009, 09:23 [#8]:

Да, смотрел: именно то что мне и надо,

Тогда за что оценка 1?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!

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

Версия движка: 2.6+ (26.01.2011)
Текущее время: 26 мая 2020, 01:10
Выполнено за 0.02 сек.
Рейтинг@Mail.ru