|
Вопрос # 33/ вопрос открыт / |
|
Я хочу сделать программу которая бы создавала
различные компоненты по щелчку пользователя на форме в определённом месте. Мой вопрос: как сделать чтобы эти компоненты не "накладывались" друг на друга или же меняли свое местоположение после щелчка?
Приложение: Переключить в обычный режим- ...
- var
- i,k,j:integer;
- Form1: TForm1;
- Checkboxes:array[1..500] of TCheckbox;
- obj1: string;
- p:tpoint;
- implementation
-
- {$R *.dfm}
-
- procedure TForm1.FormCreate(Sender: TObject);
- begin
- i:=1;
- end;
-
- procedure TForm1.Checkbox1Click(Sender: TObject);
- begin
- click_form('checkbox');
- end;
-
- procedure TForm1.click_form(obj: string);
- begin
- obj1:=obj;
- end;
-
- procedure TForm1.FormActivate(Sender: TObject);
- begin
- panel1.Width:=form1.Width-10;
- panel1.Width:=form1.height-10;
- panel1.Left:=5;
- panel1.Top:=5;
- end;
-
- procedure TForm1.FormResize(Sender: TObject);
- begin
- panel1.Width:=form1.Width-20;
- panel1.height:=form1.height-56;
- panel1.Left:=5;
- panel1.Top:=5;
- end;
-
- procedure TForm1.Timer2Timer(Sender: TObject);
- begin
- panel1.Width:=form1.Width-20;
- panel1.height:=form1.height-56;
- panel1.Left:=5;
- panel1.Top:=5;
- end;
-
- procedure TForm1.Panel1Click(Sender: TObject);
- begin
- getcursorpos(p);
- if obj1='checkbox' then begin
- checkboxes[i]:=TCheckbox.create(panel1);
- checkboxes[i].name:='Checkbox'+inttostr(i);
- checkboxes[i].Parent:=panel1;
-
- checkboxes[i].left:=p.x-form1.left-4;
- checkboxes[i].top:=p.y-form1.top-45;
- end;
- ...
- I:=I+1;
- end;
-
- end;
- end.
-
 |
Вопрос задал: Александр-446 (статус: Посетитель)
Вопрос отправлен: 4 июня 2006, 19:47
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Вадим К
У компонента контейнера (тоесть компонента, на который вы ставите свой компонент, обычно форма) есть такое свойство как Controls[index:integer]:TControl. При добавлении вы в цикле просматриваете все компоненты и проверяете их координаты с текущим.
 |
Ответ отправил: Вадим К (статус: Академик)
Время отправки: 5 июня 2006, 11:01
|
Мини-форум вопроса
Всего сообщений: 3; последнее сообщение — 1 июля 2006, 21:30; участников в обсуждении: 3.
|
Александр-446 (статус: Посетитель), 5 июня 2006, 18:37 [#1]:
А если это не форма, а TPanel или что-нибудь другое (TMemo и т.д.)? Дело в том, что в моей программе компоненты добавляются не на форму. И какие, вообще, компоненты имеют это свойсто (кроме самой формы)?
|
|
Вадим К (статус: Академик), 6 июня 2006, 11:24 [#2]:
Все компоненты, которые могут "принимать в себя другие компоненты", тоесть ставать контейнерами, имеют это свойство.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
DNK (статус: Студент), 1 июля 2006, 21:30 [#3]:
Здравствуйте, Александр.
Не нравится мне такая логика. Если отдать расположение компонентов на откуп программы, в конечном случае она их так расставит, что доведет бедного юзера до слез.
Гораздо удобней, когда после установки компонента его можно перетащить на нужное место. Очень интересный и серьезный вопрос. Сначала подумал о технологии Drag-and-Dock, но разобраться с ней так и не смог. Поэтому создал компонент, благодаря которому компоненты можно таскать почти как в конструкторе форм Delphi. Данный пример подсмотрен в библиотеке VTControl. Сделано слегка небрежно, но концепция видна.
https://www.delphi-int.ru/expert/?step=download&id=7
Тысяча извинений, что так задержал с ответом.
"Digital Networked Knight"
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|