|
Вопрос # 2 955/ вопрос открыт / |
|
Приветствую, уважаемые эксперты!
Подскажите в таком вопросе:
Есть панель на форме, на которой есть некоторые компоненты
Мне надо каким то образом скопировать эту панель и вставить ее под текущей, со всеми компонентами, которые есть на исходной панели
И желательно не форму увеличивать по высоте, а скролить ее
Есть ли какие то идеи?
Заранее, спасибо!
 |
Вопрос задал: Irbis (статус: Посетитель)
Вопрос отправлен: 30 июня 2009, 16:21
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 8; последнее сообщение — 30 июня 2009, 18:13; участников в обсуждении: 3.
|
min@y™ (статус: Доктор наук), 30 июня 2009, 16:35 [#1]:
Если надо это делать во время проектирования, то выдели панель, Ctrl+C, потом тыкни на компонент, в который надо вставить (например TScrollBox) и нажми Ctrl+V. Форма тоже может скроллиться, если её свойство AutoScroll = True.
Если надо в run-time, можно:
а) воспользоваться фреймами;
б) написать свой компонент на основе TPanel и создавать его экземпляры во время выполнения.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Irbis (статус: Посетитель), 30 июня 2009, 16:44 [#2]:
Это надо во время выполнения(в run-time)
И еще, как понять, на каком фрейме была нажата кнопка или что то введено в Edit box
Например у меня есть button1 и программно было создано уже с десяток фреймов с этой кнопкой. ТО как мне узнать, на каком именно фрейме на нее нажали?
|
|
Вадим К (статус: Академик), 30 июня 2009, 17:02 [#3]:
Если кнопка стоит на фрейме, то можно черезе TFrame(Button1.Parent) получить ссылку на родительский фрейм. А вот родительские фреймы можно либо с каким то массивом структур связать, либо для фрейма завести публичное поле и при создании записывать туда "идентификационную метку".
А с едитом - да там всё просто - Edit.text и всех делов.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Irbis (статус: Посетитель), 30 июня 2009, 17:51 [#4]:
Может в поле Tag хранить метку? Такой нормально будет?
И еще совет нужен
На фрейме будут разные поля, где будет отображаться информация о каком то продукте
Так вот, у меня клиент хочет, что бы все продукты были видны на одной форме. Т.е. неопределенное количество фреймов, которые скролируются и просматриваются
Проблема еще в том, что у каждого продукта может быть до 4 картинок, а самих продуктов может быть более 1000(это более 4000 картинок)
Как правильно и умно отговорить клиента от такой затеи? ))
Мне кажется что одна форма не затянет столько инфы
|
|
min@y™ (статус: Доктор наук), 30 июня 2009, 17:51 [#5]:
Ребяты, не знаю, как вы, а я привык всё-таки писать свои компоненты и работать с ними в run-time. Хотя, думаю, тут и фрейм сойдёт, причём его нужно будет немного обработать напильником, т.е. создать нужные свойства и события, например событие нажатия на кнопку OnButtonClick или редактирования текста в Edit - OnEditChange. И, естественно, при создании в run-time таких фреймов прописывать их в какой-нить массив или список - для этих целей советую заюзать TList, являющийся полем формы-owner'a этих самых фреймов.
Всё просто, собственно.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
min@y™ (статус: Доктор наук), 30 июня 2009, 18:00 [#6]:
Да, не стоит грузить в память такую кучу данных. Память не резиновая.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Вадим К (статус: Академик), 30 июня 2009, 18:07 [#7]:
фрейм это тоже компонент, просто чуточку необычный для простого программиста.
Использовать tag фрейма - ну это от безисходности и незнания. проще завести свое свойство, с своим поведением. Также хорошо, как пишет min@y™, скрыть всю внутренню кухню фрейма и вынести только методы наружу. Это даст как минимум два приимущества
- возможно в будущем захочеться заменить один компонент на другой (со скинами к примеру). А у этого компонета может оказаться, что часть свойст не совпадает. И пришлось бы перелопачивать весь проект. А так только один юнит с фреймом.
- можно в функции заложить хитрые проверки, логику. А с основного кода просто вызывать простые методы. Это вначале выглядит дико, а потом, когда входишь в вкус, оно так хорошо пишеться.
4000 Image на форме? могут быть конкретные бока. Как минимум - долго загружаться (а это обычно нервирует юзера). Во вторых, у винды есть ограничение в 10000 хендлов на приложение. каждая кнопка, едит - один хендл. форма - штуки 4 или 5 (в зависимости от версии делфи). Image это просто картинка, они хендлы не кушают.
поэтому я предлагаю красивое решение. Очень оригинальное. На форме создается только для одного продукта место. С боку ставиться скролл. Когда юзер тянет скролл - обновляем записи.
Можно чуточку напрячся и сделать под две-три записи и сделать их "перетекание". В этом случае автоматически решается куча проблем.
Правда придется напрячся с "плавной прокруткой". Её надо будет симулировать. Как? ну в наиболее простом варианте у нас всегда будет на одну строку для продукта больше. и при прокрутке мы будем просто делать подмену . Выглядит сложно, но реализуемо.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Irbis (статус: Посетитель), 30 июня 2009, 18:13 [#8]:
Спасибо за советы, попробую что то придумать!
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|