Вопрос: как можно создать объект в выбранном месте формы? Я пробовал так:
var panel:TSPanel;
begin
panel:=tsPanel.create(self);
panel.Top:=100;
panel.Left:=30;
panel.Height:=50;
panel.width:=50;
panel.show;
end;
И ничего не появляется..
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.
Создание объектов |
Unconnected |
Сообщение
#1
|
mea culpa Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: 24 |
Привет всем.
Вопрос: как можно создать объект в выбранном месте формы? Я пробовал так:
И ничего не появляется.. -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
Client |
Сообщение
#2
|
Профи Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: 20 |
Цитата panel.parent:=form1; добавь //или какая у тя форма |
Unconnected |
Сообщение
#3
|
mea culpa Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: 24 |
Спасибо
-------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
volvo |
Сообщение
#4
|
Гость |
Panel.Parent := self; Чтоб не гадать, какая форма. Раз создается с Self-ом в качестве Owner-а, значит, ему и быть родителем... |
Unconnected |
Сообщение
#5
|
mea culpa Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: 24 |
Странная ситуация получается:
Первый раз жму на кнопку - панель появляется, ещё раз жму - исчезает, ещё раз жму - Invalid Pointer Operation (а должна опять появиться). Может, нужно использовать FreeAndNil ещё? -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
volvo |
Сообщение
#6
|
Гость |
if panel1=nil then begin |
Unconnected |
Сообщение
#7
|
mea culpa Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: 24 |
Спасибо, работает:)
-------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
Client |
Сообщение
#8
|
Профи Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: 20 |
procedure TForm1.SpeedButton1Click(Sender: TObject);Если SpeedButton то можно проверить ее положение |
Unconnected |
Сообщение
#9
|
mea culpa Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: 24 |
И ещё один вопрос, практически по теме... Вот создал я некоторое количество объектов, и вручную на какое-то событие этих объектов повесил одну и ту же процедуру. Как из процедуры можно узнать, на каком именно объекте сработало событие?
-------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
volvo |
Сообщение
#10
|
Гость |
А Sender на что? Он вообще-то и хранит информацию о вызвавшем событие объекте...
|
Unconnected |
Сообщение
#11
|
mea culpa Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: 24 |
а я и не знал..
Добавлено через 7 мин. Но через Sender этот нельзя обратиться к методу\свойству источника события, так? Например, чтобы sender.caption:='...'; -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
volvo |
Сообщение
#12
|
Гость |
У Sender нет свойства Caption, потому что у TEdit-а, например, его не может быть... Чтоб обратиться к Caption-у (если он есть у вызывающего контрола), надо привести Sender к нужному типу, если ты точно знаешь, контрол какого типа вызвал событие. Но зато можно сделать более универсально - так:
ShowMessage((Sender as TComponent).Name);, и получить имя контрола, вызвавшего событие... |
Unconnected |
Сообщение
#13
|
mea culpa Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: 24 |
Цитата У Sender нет свойства Caption, потому что у TEdit-а, например, его не может быть... Чтоб обратиться к Caption-у (если он есть у вызывающего контрола), надо привести Sender к нужному типу, если ты точно знаешь, контрол какого типа вызвал событие. Но зато можно сделать более универсально - так: ShowMessage((Sender as TComponent).Name); , и получить имя контрола, вызвавшего событие... Непонятно... Вот в этом коде мы чему присваиваем имя компонента? И как это поможет обратиться свойству\методу? Извиняюсь за возможно глупые вопросы, с этим никогда не сталкивался. -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
volvo |
Сообщение
#14
|
Гость |
Мы ничего ничему не присваиваем. Просто выводим окошко с названием компонента...
Цитата И как это поможет обратиться свойству\методу? Повторяю: в общем случае обращение к свойству/методу невозможно. Оно становится возможным только, если ты гарантируешь, что вызывать событие будет компонент, у которого ЕСТЬ это свойство, и ты знаешь, каков ТИП этого компонента. Тогда достаточно сделать вот так (для кнопок):(Sender as TButton).Caption := 'test';Но если теперь повесить это же событие на TEdit.OnClick (этого никто не запрещает делать, сигнатура у метода подходящая для OnClick любого компонента), то будет ошибка, так как TEdit нельзя провести к TButton, это разные классы, если повесить на TMemo.OnClick - то же самое, будет ошибка... И даже TLabel, несмотря на то, что там есть Caption, ты обработать не сможешь. У тебя вся функциональность этого события будет ограничена обработкой кнопок... |
Unconnected |
Сообщение
#15
|
mea culpa Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: 24 |
Всё, теперь понял, спасибо за разъяснение:)
-------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
Unconnected |
Сообщение
#16
|
mea culpa Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: 24 |
Сегодня начала появляться ошибка, при создании объектов. Код такой:
Текст ошибки - a control cannot have itself as its parent. Мол объект не может быть своим же родителем. Ошибка возникает на выделенной строке. Причём до сегодня всё нормально отрабатывало.. Сообщение отредактировано: Unconnected - -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
volvo |
Сообщение
#17
|
Гость |
Странно, не должно быть проблем (на стандартных TPanel/TSpeedButton работает, проверил)... Но попробуй все-таки явно указать везде вместо Self класс твоей формы, может у тебя кнопка лежит на панель на какой-нибудь, и это дает такой результат (кнопка-то нестандартная, панель - тоже, мало ли что там наворотили).
Цитата Причём до сегодня всё нормально отрабатывало.. Это еще более странно. Значит. рассказывай, что добавлял сегодня, что куда перемещал, может, перенес кнопку на какой-то GroupBox, или еще что-то, связанное с Parent-ом? |
Unconnected |
Сообщение
#18
|
mea culpa Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: 24 |
Извиняюсь за беспокойство, проблему нашёл, там у индекса было смещение, и я, как умная Маша, создавал несуществующий элемент массива-кнопку.
Сообщение отредактировано: Unconnected - -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
Текстовая версия | 25.04.2024 2:46 |