|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
20.12.2016, 19:05 | #1 |
Пользователь
Регистрация: 05.02.2007
Сообщений: 91
|
Кто поможет Вывести панели как skype по средине
Есть 20 панелей как их вывести равномерно на форму
если высота и ширина формы 500х500, высота и ширина панелей 70x70, что бы не от самого края формы считать, пробовал коряво получается, не могу придумать формулу расчета. Панелей может быть больше или меньше. Может кто подскажет. Спасибо. |
20.12.2016, 20:03 | #2 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,426
|
Что-то не понятно что Вам надо. Какие панели? Они и все просто к шапке окна прилеплены.
|
20.12.2016, 20:08 | #3 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
У окна есть свойства ClientWidth ClientHeight ClientRect. От них и пляши считая Left и Top панели
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
20.12.2016, 20:52 | #4 |
Пользователь
Регистрация: 06.04.2011
Сообщений: 80
|
procedure TForm1.Button1Click(Sender: TObject);
var i,x,y:integer; begin y:=4; x:=0; for i:=0 to Componentcount-1 do if Components[i] is tpanel then begin (Components[i] as tpanel).Top:=x*70+4; (Components[i] as tpanel).Left:=y; x:=x+1; if i mod 4=0 then begin y:=y+74; x:=0; end; end; end; кривовато пожалуй, но суть полагаю выражена. |
21.12.2016, 03:46 | #5 |
Пользователь
Регистрация: 05.02.2007
Сообщений: 91
|
Спасибо за ответы и помощь буду разбиратся.
|
21.12.2016, 12:51 | #6 |
Форумчанин
Регистрация: 27.04.2012
Сообщений: 219
|
МОЯ ПАНЕЛЬ.Left:=round(ФОРМА.Width/2-МОЯ ПАНЕЛЬ.Width/2);
МОЯ ПАНЕЛЬ.top:=round(ФОРМА.Height/2-МОЯ ПАНЕЛЬ.Height/2); А сорямба, недочитал, это по центу выводит)
Пишу много и развернуто
|
21.12.2016, 13:51 | #7 |
Пользователь
Регистрация: 05.02.2007
Сообщений: 91
|
Мне и надо начинать от центра ,заполнять форму панелями в не зависимости сколько будет панелей,если не влазит значит нужно будет увеличивать размеры формы.
МОЯ ПАНЕЛЬ.Left:=round(ФОРМА.Width/2-МОЯ ПАНЕЛЬ.Width/2); МОЯ ПАНЕЛЬ.top:=round(ФОРМА.Height/2-МОЯ ПАНЕЛЬ.Height/2); это наверно не подойдет , так как если панель одна и панели создаются динамически . Если нужно вывести допустим 4 панели от центра формы (размеры панелей 70х70 и расстояние между панелями 5 . форма 500х500 , в одну строку на форме влезет 6 панелей(6*70=420)+(6*5)=30, 420+30=450,500-450=50/2=25 ,25 отступ с лева формы и справа, я так думаю,может не правильно считаю. затем заполнять вторую строку от центра(тут не понятно можно в низ выводить, или с верху этой строки , или можно сдвинуть эти 2 строки что бы они были обе от центра) (допустим у нас 10 панелей) 6 панелей в оду строку по центру 10-6=4, можно расположить 4 панели с верху тех панелей 6 которые уже вывели), так же вывести вторую строку с верху 4 панели от центра. Получается 6 панелей по центру, 4 панели с верху но от центра по длине . Ну и при изменение формы они должны перестраиватся, если форма увеличила размеры. Может какой компонент есть для вывода ? Но всё равно спасибо за помощь и ответы. Последний раз редактировалось АНАТОЛИЙ249; 21.12.2016 в 13:59. |
21.12.2016, 14:21 | #8 | |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,526
|
Код:
P.S. а лучше controls[] он же поможет если мы захотим удалить УЖЕ существующие ПЕРЕД созданием новых. Код:
Цитата:
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 21.12.2016 в 14:35. |
|
21.12.2016, 15:53 | #9 |
Пользователь
Регистрация: 05.02.2007
Сообщений: 91
|
m:=4; //сколько панелек хотим в строку
n:=5; //а сколько в колонку dx:=6; Вся проблема что я не знаю сколько будет выводится панелей,да я здесь вижу что будет выводится 20 панелей как описал выше; m:=4; //сколько панелек хотим в строку n:=5; //а сколько в колонку dx:=6; dy:=6; //расстояние в пикселях МЕЖДУ панельками (как в строке, так и в колонке) x:=( formWidth - (panelWidth *m) - dx*(m-1) ) div 2; //СВОБОДНОЕ МЕСТО слева (такое же будет и справа) y:=( formHight - (panelHight *n) - dy*(n-1) ) div 2; //свободное место сверху/снизу for j:=0 to n*m-1 do begin r:=TPanel.Create(form1);// мы не будем расставлять имеющиеся, будем создавать их сами. r.top:=y + (j div m)*(panelhight +dy); r.height:=panelhight; r.left:=x + (j mod m)*(panelwidth +dx); r.width:=panelwidth; r.parent:=form1; end; проверил да работает но выводит не с центра формы а с верху, а мне нужно от центра Допусти нужно вывести 2 панели(70х70) по центру формы,вывели , затем нужно к ним добавить еще 3 панели(70х70) ,и того у нас 5 панелей , 1- рассчитываем сколько у нас войдет в строку панелей (500 / (70+5)=6) ,войдет 6 панелей , т.е. 5 панелей у нас входит на форму в одну строку. 5*75=375-общая длинна панелей вместе с расстоянием между панелями, 500-375=125 125/2=62 расстояние от левого края откуда нужно выводить панели var k:integer; begin k:=62; for i:=0 to 4 do begin panel[i].left:=k; panel[i].top:=(form1.Height div 2)-(panel[i].Height div 2); inc(k,75); end; end; в одну строку у меня получается вывести панели если они входят на форму все,а если нужно вывести дальше 2-строку панелей тоже от центра, то не получается. Спасибо огромное за помощь и ответы !!! Сделаю отпишусь. Последний раз редактировалось АНАТОЛИЙ249; 21.12.2016 в 18:02. |
22.12.2016, 08:07 | #10 |
Форумчанин
Регистрация: 27.04.2012
Сообщений: 219
|
Ну как то так вроде:
Код:
Думаю суть будет понятна, дальше сможешь сам разобрать как двигать вверх-вниз
Пишу много и развернуто
Последний раз редактировалось Heneken87; 22.12.2016 в 08:25. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Кто поможет? | Skripach | Помощь студентам | 13 | 11.10.2014 16:18 |
Кто поможет | димон4ик_ | Помощь студентам | 0 | 17.10.2011 14:34 |
кто поможет | Marta18 | Microsoft Office Excel | 1 | 14.06.2011 02:40 |
Кто поможет??? | sashahttp | Общие вопросы Delphi | 1 | 24.06.2008 09:15 |
Кто поможет оптимизировать прогу, а то я уже оптимизировал как мог :) | Droid | Помощь студентам | 7 | 12.05.2008 20:56 |