Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.11.2011, 09:10   #1
qwerty55
Пользователь
 
Регистрация: 22.02.2010
Сообщений: 60
Радость Составить текст из нескольких Label'ов

Не могу понять как сделать....
Имеется 10 Labelов, находятся на панеле в разброс (в каждом из них строчка текста, загружаемая из файла), из них нужно построчно (сверху вниз) составить текст. Перемещение labelов по панеле я замутил, а вот как теперь, начиная с верхнего (по координатам) составить текст я не знаю...((
Помогите пожалуйста!!!
qwerty55 вне форума Ответить с цитированием
Старый 27.11.2011, 12:35   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

всё зависит от конкретных деталей. (какие имена у лейблов, все ли лейблы нужны, где они лежат (на форме, на панели, на фрейме, на закладке и т.д.))

но общий подход,

либо чере FindComponent:
Код:
var
  MyComponent: TComponent;
  i : integer;
  s : string;
begin
 s := ''; 
 for i:=1 to 10 do begin
   MyComponent := Form1.FindComponent('Label'+IntToStr(i));
   if MyComponent <> nil then
      s := s + ' '+TLabel(MyComponent).Caption;
  end;
либо через перебор всех контролов на форме:
Код:
     for i:=0 to Form1.ControlCount - 1 do
      begin
        If Form1.Controls[i] is TLabel then  begin
          .....
Serge_Bliznykov вне форума Ответить с цитированием
Старый 27.11.2011, 13:01   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Мне больше по душе второй подход
Код:
procedure TForm1.Button1Click(Sender: TObject);
var i,j,xCount: Integer;
    xLabels: array of TLabel;
    xLabel: TLabel;
    s: String;
begin
  {Выбираеи лєйбы}
  xCount:=0;
  for i:=0 to Panel1.ControlCount-1 do
    if Panel1.Controls[i] is TLabel then begin
      Inc(xCount);
      SetLength(xLabels,xCount);
      xLabels[xCount-1]:=TLabel(Panel1.Controls[i]);
    end;
  {Сортируем по тор, при желании можно и по left добавить}
  for i:=0 to xCount-2 do
    for j:=i+1 to xCount-1 do
      if xLabels[j].Top<xLabels[i].Top then begin
        xLabel:=xLabels[i];
        xLabels[i]:=xLabels[j];
        xLabels[j]:=xLabel;
      end;
  {Формируем текст}
  s:='';
  for i:=0 to xCount-1 do s:=s+xLabels[i].Caption;
  SetLength(xLabels,0);
  Memo1.Text:=s;
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 27.11.2011, 15:45   #4
qwerty55
Пользователь
 
Регистрация: 22.02.2010
Сообщений: 60
По умолчанию

лейблы лежат на панеле))
спасибо за варианты, сейчас поколдую над кодом и попробую
qwerty55 вне форума Ответить с цитированием
Старый 27.11.2011, 15:53   #5
qwerty55
Пользователь
 
Регистрация: 22.02.2010
Сообщений: 60
По умолчанию

Аватар, спасибо огромнейшее за помощь именно то что искал!!!!
qwerty55 вне форума Ответить с цитированием
Старый 28.11.2011, 14:53   #6
qwerty55
Пользователь
 
Регистрация: 22.02.2010
Сообщений: 60
По умолчанию

извините за еще один тупой вопрос.....
лейблы берутся по всей панеле, а как сделать вычисление только тех лейблов которые лежат допустим между верхним и нижним компонентами Bevel (сделан подобие линии, толщиной в 1px)?
qwerty55 вне форума Ответить с цитированием
Старый 28.11.2011, 16:16   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
только тех лейблов которые лежат допустим между верхним и нижним компонентами
ну цикл перебора (причём работающий) у Вас уже есть.
добавьте в него проверку на попадание TOP в нужный диапазон и дело в шляпе!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 29.11.2011, 11:37   #8
qwerty55
Пользователь
 
Регистрация: 22.02.2010
Сообщений: 60
По умолчанию

дак в том то и дело, что я пытался но не выходит....
Код:
With Components[L] as TLabel do
if (Top>Bevel1.Top) and (Top+Height<Bevel2.Top) then
вставляю строки и тогда программа вообще отказывается составлять текст
qwerty55 вне форума Ответить с цитированием
Старый 29.11.2011, 11:56   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

выложите исходники небольшого тестового примерчка
Serge_Bliznykov вне форума Ответить с цитированием
Старый 29.11.2011, 12:06   #10
qwerty55
Пользователь
 
Регистрация: 22.02.2010
Сообщений: 60
По умолчанию

не могу выложить... пишет "ошибка загрузки"
qwerty55 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
текст из нескольких ячеек в одну Tirendus Microsoft Office Excel 10 20.01.2016 16:45
Сохранить в текстовый файл текст из Memo и текст из нескольких Edit misher Общие вопросы Delphi 5 02.01.2011 15:37
Текст из нескольких txt файлов Federal Помощь студентам 6 28.12.2010 18:34
несколько Label'ов в качестве кнопок skalt12 Общие вопросы Delphi 12 12.08.2010 13:18
Не могу составить запрос на выборку из нескольких таблиц :( Semidarckness SQL, базы данных 3 23.05.2010 15:27