Консультация № 176317
26.01.2010, 16:16
0.00 руб.
0 23 2
Здравствуйте Уважаемые эксперты. У меня еще вопросик.
Точнее два, но они не столь значительны, так что задаю их в одном.
Уважаемые модераторы, если вы считаете что их нужно разделить - я отправлю отдельным вопросом второй.
1) Имеется много компонентов типа TImage, необходимо при нажатии на каждый определить его и изменить его высоту на единичку.
Проблема заключается в том, что я не знаю как определить, на каком компоненте произошло событие. Если бы это вышло сделать, то можно было бы с каждым компонентом в одной процедуре делать действия. Например при нажатии на первый. А все остальные тоже использовали такую же процедуру.
2) Есть ли такой компонент, который имеет свойства как у панели, то есть является контейнером для объектов, но обладает свойством страниц и возможностью показа определенной страницы? Если есть то что это за компонент и как примерно с ним работать(кратко) или же ссылка. Заранее спасибо.

Обсуждение

Неизвестный
26.01.2010, 16:37
общий
это ответ
Здравствуйте, Dimon4ik.
По первому вопросу: Назначьте один обработчик OnClick для всех Image. В самом обработчике вы можете обратиться к Image, по которму кликнули по передаваемому Sender.
Приведите его к TImage(Sender).Height:= TImage(Sender).Height+1;
5
Даже не мог подумать, что все так просто! <br>Я как только не пробовал обратиться к Sender.<br>Ничего не выходило. А сейчас, попробовал как Вы написали - все работает! <br>Это на много упростит код моих программ в дальнейшем. <br>Отличный ответ!
давно
Профессионал
153662
1070
26.01.2010, 16:41
общий
По второму вопросу на вкладке win3.1 есть компонент TabbedNotebook:
TTabbedNotebook - набор страниц с закладками

Компонент TTabbedNotebook представляет собой объединение TTabSet и TNotebook в готовый многостраничный блокнот с заклад-ками. В отличие от TTabSet закладки в TabbedNotebook могут располагаться в несколько рядов.

Свойства ActivePage, Pagelndex И Pages компонента совпадают c одноименными свойствами компонента TNotebook. Свойство property TabsPerRow: Integer; определяет количество закладок в одном ряду.

С помощью метода function GetIndexForPage(const PageName: String): Integer; программа может получить индекс страницы по ее имени PageName.

или на вкладке win32 компонент TPageControl:
TPageControl - набор страниц с закладками

Компонент TPageControl в отличие от TTabControl может содержать несколько перекрывающих друг друга панелей класса ттаь-Sheet. Каждая панель выбирается связанной с ней закладкой и может содержать свой набор помещенных на нее компонентов.

Чтобы на этапе конструирования добавить новую панель или выбрать ранее вставленную, щелкните по компоненту правой кнопкой мыши и выберите New page (новая панель), Next page (следующая панель) или previous page (предыдущая панель). Смена панелей идет циклически, т. е. после показа последней показывается первая и наоборот.

Помимо свойств HotTrack, MultiLine, ScrollOpposite, TabHeight, TabPosition и TabWidth, которые аналогичны одноименным свойствам TTabcontrol, компонент имеет следующие специфичные свойства:

property ActivePage: TTab-Sheet;

Содержит ссылку на активную панель. Установка нового значения ActivePage размещает соответствующую панель поверх остальных. Для выбора новой панели следует использовать методы SelectNextPage и FindNextPage

property ActivePageIndex: Integer;

Содержит индекс активной панели

property PageCount: Integers;

Содержит количество панелей (только для чтения)

property Pages[Index: Integer] : TTabSheet;

Возвращает ссылку на панель по ее индексу (только для чтения)

Методы компонента:

function FindNextPage (CurPage: TTabSheet; GoFor-ward, CheckTabVisible: Boolean) : TTabSheet;

Ищет следующую панель: CurPage - текущая панель; GoForward - содержит True, если поиск идет от первой панели к последней; CheckTabVisible -содержит True, если из поиска исключаются панели с признаком Tabvisible=False. Возвращает ссылку на найденную панель. Если CurPage не принадлежит компоненту, возвращает ссылку на первую или последнюю панель в зависимости от параметра GoForward

procedure SelectNextPage (GoForward: Boolean);

Делает активной следующую панель. Если GoFor-ward=True, активизируется следующая панели, в противном случае - предыдущая
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

Неизвестный
26.01.2010, 16:42
общий
Dimon4ik:
По второму вопросу: попробуйте использовать TNotebook. У меня он на вкладке Win 3.1 (D2009)
давно
Профессионал
153662
1070
26.01.2010, 16:48
общий
Selax:
И что у Вас этот код работает?
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

Неизвестный
26.01.2010, 16:51
общий
это ответ
Здравствуйте, Dimon4ik.

По второму вопросу: в отличие от предыдущих отвечавших, порекомендую TPageControl (вкладка Win32). Почему? У него (а точнее - у его страниц) есть замечательное свойство TabVisible. Это зачастую удобно.
5
Да! Это действительно удобное свойство, особенно мне для меня оно как раз то, что нужно! <br>Очень хороший компонент. Легко понял как им пользоваться, там и понимать нечего.<br>Вы ответили на вторую часть вопроса, так как на первую часть вопроса отлично ответил Selax, поэтому вы вместе мне очень помогли. <br>Отлично!
Неизвестный
26.01.2010, 16:58
общий
Евгений/Genia007/:
А вы попробуйте!
Для Трех Image обработчик OnClick=ImageClick;

procedure TForm1.ImageClick(Sender: TObject);
begin
TImage(Sender).Height:= TImage(Sender).Height+50;
end;
давно
Профессионал
153662
1070
26.01.2010, 17:01
общий
Del:
Вы невнимательно прочитали мой пост, про TPageControl я уже писал.
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

давно
Профессионал
153662
1070
26.01.2010, 17:02
общий
Selax:
А я перед тем как написать так и попробовал, на delphi 7 не прокатывает.
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

Неизвестный
26.01.2010, 17:04
общий
Dimon4ik:
Можно добавить еще проверку, что кликнули именно на TImage (если этот обработчик будет на других компонентах):
if (Sender is TImage) then .....
Так же можно заменить: TImage(Sender).Height на (Sender as TImage).Height
Неизвестный
26.01.2010, 17:06
общий
Евгений/Genia007/:
Я пробовал на D2009 все сработало. Попробую вечером проверить на D7
давно
Профессионал
153662
1070
26.01.2010, 17:13
общий
Selax:
Кстати на turbo delphi тоже не работает. Думаю как это исправить.
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

давно
Профессионал
153662
1070
26.01.2010, 17:43
общий
Selax:
У меня это работает если stretch установлено в true, или картинка больше высоты image и не стоит proportional в true (но тогда изменение идёт только до размеров картинки).
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

Неизвестный
26.01.2010, 19:44
общий
Евгений/Genia007/:
Вы наверное путаете картинку в Image и сам компонент TImage? Размер компонента увеличивается. Проверил на д7. Попробуйте показать высоту компонента - она постоянно увеличивается. То что при этом не увеличивается картинка при stretch=false оно и понятно: картинку то никто не увеличивает. Если же нужно увеличивать именно картинку, то или stretch=true или брать картинку TImage(Sender).Picture.Bitmap, увеличивать и возвращать обратно.
P.S. Если у Image стоит AutoSize, то изменение высоты не будет происходить: оно постоянно будет возвращаться в исходное состояние
давно
Профессионал
153662
1070
26.01.2010, 19:59
общий
Selax:
Я вот чего не пойму, смысл увеличивать высоту компонента без перерисовки содержащийся картинки. Высота то увеличивается, а картинка нет в чём смысл?
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

Неизвестный
26.01.2010, 20:09
общий
Евгений/Genia007/:
Может у картинки stretch=true или еще что-то есть. Это вопрос к автору....
Неизвестный
26.01.2010, 21:59
общий
Сколько много информации! Спасибо вам. Сейчас буду читать и пробовать!
Неизвестный
26.01.2010, 22:19
общий
Евгений/Genia007/:
Наверное у нас версии Delphi не совпадают. У меня Delphi 7. Я не нашел в данной вкладке этого компонента. Посмотрите, как у меня:

Может я ошибаюсь...
Может такими достоинствами могут пользоваться только владельцы новых версий Delphi?
А в общем интересно. Так много компонентов, их совмещают, получается более продвинутые, которые потом снова с чем то совместят. Интересно есть будет ли предел?
Я имею ввиду, что будет ли такое, что компонент улучшали, улучшали и все, он останется в таком состоянии на долгие года... То есть лучшего не будет.
Хотя, мне кажется, тогда и работы не будет компаниям.
Неизвестный
26.01.2010, 22:47
общий
Selax:
Проверка работает отлично!
Неизвестный
26.01.2010, 23:38
общий
Dimon4ik:
Вы смотрите вкладку Win32, а надо смотреть вкладку Win 3.1
Неизвестный
27.01.2010, 00:11
общий
Selax:
Да уж, что-то со мною не то.
Спасибо, что предупредили.
давно
Профессионал
153662
1070
27.01.2010, 08:37
общий
Dimon4ik:
У меня тоже версия delphi 7, хотя есть и turbo delphi explorer (делаю проги на нём).
на вкладке win32 компонент TPageControl:

а на вкладке Win 3.1 компонент TabbedNotebook:
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

давно
Профессионал
304622
583
27.01.2010, 19:22
общий
Евгений/Genia007/:
Цитата: Евгений/Genia007/
turbo delphi


(Что-то я от жизни отстал) А расскажите, пожалуйста, что это такое?
давно
Профессионал
153662
1070
27.01.2010, 19:30
общий
Сергей Бендер:
turbo delphi это решения для одного языка и одной платформы, предназначенные для разработчиков-любителей, независимых профессиональных разработчиков и профессионалов, работающих по совместительству. Новое семейство продуктов «Turbo Delphi», «Turbo Delphi .NET», «Turbo C++» и «Turbo C#», для каждого из этих продуктов предусмотрено два выпуска — Explorer Edition и Professional Edition., к примеру у меня стоит turbo delphi explorer с бесплатной лицензией вплоть до продажи программ написанных на нём. Только это уже устаревший продукт 2006 года. Вот здесь можно почитать по подробнее.
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

Форма ответа