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

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

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

Delphi.int.ru Expert

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

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

#   

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


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

Подробнее »



Вопрос # 33

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

Я хочу сделать программу которая бы создавала
различные компоненты по щелчку пользователя на форме в определённом месте. Мой вопрос: как сделать чтобы эти компоненты не "накладывались" друг на друга или же меняли свое местоположение после щелчка?

Приложение:
  1. ...
  2. var
  3. i,k,j:integer;
  4. Form1: TForm1;
  5. Checkboxes:array[1..500] of TCheckbox;
  6. obj1: string;
  7. p:tpoint;
  8. implementation
  9.  
  10. {$R *.dfm}
  11.  
  12. procedure TForm1.FormCreate(Sender: TObject);
  13. begin
  14. i:=1;
  15. end;
  16.  
  17. procedure TForm1.Checkbox1Click(Sender: TObject);
  18. begin
  19. click_form('checkbox');
  20. end;
  21.  
  22. procedure TForm1.click_form(obj: string);
  23. begin
  24. obj1:=obj;
  25. end;
  26.  
  27. procedure TForm1.FormActivate(Sender: TObject);
  28. begin
  29. panel1.Width:=form1.Width-10;
  30. panel1.Width:=form1.height-10;
  31. panel1.Left:=5;
  32. panel1.Top:=5;
  33. end;
  34.  
  35. procedure TForm1.FormResize(Sender: TObject);
  36. begin
  37. panel1.Width:=form1.Width-20;
  38. panel1.height:=form1.height-56;
  39. panel1.Left:=5;
  40. panel1.Top:=5;
  41. end;
  42.  
  43. procedure TForm1.Timer2Timer(Sender: TObject);
  44. begin
  45. panel1.Width:=form1.Width-20;
  46. panel1.height:=form1.height-56;
  47. panel1.Left:=5;
  48. panel1.Top:=5;
  49. end;
  50.  
  51. procedure TForm1.Panel1Click(Sender: TObject);
  52. begin
  53. getcursorpos(p);
  54. if obj1='checkbox' then begin
  55. checkboxes[i]:=TCheckbox.create(panel1);
  56. checkboxes[i].name:='Checkbox'+inttostr(i);
  57. checkboxes[i].Parent:=panel1;
  58.  
  59. checkboxes[i].left:=p.x-form1.left-4;
  60. checkboxes[i].top:=p.y-form1.top-45;
  61. end;
  62. ...
  63. I:=I+1;
  64. end;
  65.  
  66. end;
  67. end.
  68.  


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

Вопрос задал: Александр-446 (статус: Посетитель)
Вопрос отправлен: 4 июня 2006, 19:47
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Вадим К

У компонента контейнера (тоесть компонента, на который вы ставите свой компонент, обычно форма) есть такое свойство как Controls[index:integer]:TControl. При добавлении вы в цикле просматриваете все компоненты и проверяете их координаты с текущим.

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 5 июня 2006, 11:01


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

Всего сообщений: 3; последнее сообщение — 1 июля 2006, 21:30; участников в обсуждении: 3.
Александр-446

Александр-446 (статус: Посетитель), 5 июня 2006, 18:37 [#1]:

А если это не форма, а TPanel или что-нибудь другое (TMemo и т.д.)? Дело в том, что в моей программе компоненты добавляются не на форму. И какие, вообще, компоненты имеют это свойсто (кроме самой формы)?
Вадим К

Вадим К (статус: Академик), 6 июня 2006, 11:24 [#2]:

Все компоненты, которые могут "принимать в себя другие компоненты", тоесть ставать контейнерами, имеют это свойство.
Галочка "подтверждения прочтения" - вселенское зло.
DNK

DNK (статус: Студент), 1 июля 2006, 21:30 [#3]:

Здравствуйте, Александр.

Не нравится мне такая логика. Если отдать расположение компонентов на откуп программы, в конечном случае она их так расставит, что доведет бедного юзера до слез.
Гораздо удобней, когда после установки компонента его можно перетащить на нужное место. Очень интересный и серьезный вопрос. Сначала подумал о технологии Drag-and-Dock, но разобраться с ней так и не смог. Поэтому создал компонент, благодаря которому компоненты можно таскать почти как в конструкторе форм Delphi. Данный пример подсмотрен в библиотеке VTControl. Сделано слегка небрежно, но концепция видна.

https://www.delphi-int.ru/expert/?step=download&id=7

Тысяча извинений, что так задержал с ответом.
"Digital Networked Knight"

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

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:43
Выполнено за 0.02 сек.