Запись в label1 , как записать ?

Тема в разделе "ASM, С/С++, Delphi, Java", создана пользователем disker, 23 янв 2012.

Статус темы:
Закрыта.
  1. disker

    disker

    Регистр.:
    28 авг 2007
    Сообщения:
    577
    Симпатии:
    59
    Имеется одномерный массив из 600 чисел (числа загружаются из файла, числа от 0 до 38) . На форме расположены 600 label - ов. Как записать эти все числа из одномерного массива в эти label - ы ? Первое число из массива к примеру a [1] в label1 , второе a[2] в label2 и т.д. Уже целый вечер сижу ничего не получается :( Понимаю, что вопрос ламерский, но я первый раз на с++ пытаюсь программировать :( o_O :att:

    Подозреваю что перед записью нужно скорее всего произвести конвертацию, а вот как это записать чтобы было правильно , не знаю :(

    Может кому пригодится - нашел вот такой ответ наконец-то :

    Код:
     label1->Text = Convert::ToString(a[1]); 
    Пока вроде фурычит :)

    antiterror спасибо, ты прав, пока работает. Но что-то уже перестает мне нравиться. Я пользуюсь компилятором от мелкомягких и вот он очень сильно подвисает когда сохраняешь проект или меняешь свойство какого-нибудь labela (до 2-3 минут и это не на слабом ПК :( ) , а у меня их как можешь заметить целых 600 (может потому, что так много и подвисает). Вот подумываю чем-то их заменить, но не знаю какую альтернативу выбрать. Тут в соседней теме советовали мне заменить label на TcxGrid , но пока не разобрался как там обращаться к ячейкам и как записывать в них значения к примеру с того же массива.. иду курить гугл... :)

    немного погорячился я с тем, что всё работает :( По ходу тестирования возникла небольшая проблемка: среди записываемых и выводимых данных присутствуют такие числа как "0" и "00" и мне нужно их различать. А комп не умеет - для него это одинаковые числа. Может кто знает как их различить ? Подозреваю что им нужно присвоить символьный тип или что-то похожее, присваиваю им тип char , но при выводе в label выводятся совсем другие числа :( К примеру там где должно быть "00" комп выводит в label "50" а там, где "0" - выводится тоже 50... В общем ай нид хелп :) ... плиз )))
     
    Последнее редактирование модератором: 6 янв 2014
  2. Forza.Baron

    Forza.Baron

    Регистр.:
    26 янв 2012
    Сообщения:
    175
    Симпатии:
    76
    Надо сделать динамический вывод label ов...
    Код:
    TLabel *label[600];
    for (i=0;i<600;i++)
      {
      label[i]=new TLabel(Application);
      label[i]->Parent=Form1; //имя формы
      label[i]->Caption=IntToStr(a[i]);
      label[i]->Left=1;
      label[i]->Top=1;
      label[i]->Font->Size=12;
      label[i]->BringToFront();
      label[i]->Show();
      } 
    Попробуйте...
     
  3. disker

    disker

    Регистр.:
    28 авг 2007
    Сообщения:
    577
    Симпатии:
    59
    Forza.Baron 32 ошибки выдает, но это уже не важно.. я наверно всё же буду использовать TcxGrid :)
     
  4. Any_Key

    Any_Key aka mad red cat

    Регистр.:
    30 мар 2006
    Сообщения:
    388
    Симпатии:
    346
    o_O 600 лейблов... Не делай так никогда! даже не хочу кататать полотно из 15 пуктов почему. Нельзя так и все тут!
     
  5. disker

    disker

    Регистр.:
    28 авг 2007
    Сообщения:
    577
    Симпатии:
    59
    на 600 страниц не надо, но 2-3 предложения не помешали бы мне :) . Просто визуально они мне больше нравятся, чем к примеру аналоги (тот же TcxGrid или dataGridWiev), но так как это 600 записей в программе о параметрах, размещении (позиции) и т.д. , то понятно что это всё дело будет мне грузить компилятор, вот поэтому и пришлось отказаться, хотя они мне и больше нравятся...
     
  6. nik-taraz

    nik-taraz Писатель

    Регистр.:
    9 фев 2012
    Сообщения:
    2
    Симпатии:
    0
    советую создавать лэйблы динамически и после этого присваивать им нужные свойства, гугль расскажет)
     
  7. Any_Key

    Any_Key aka mad red cat

    Регистр.:
    30 мар 2006
    Сообщения:
    388
    Симпатии:
    346
    2-3 предложения (все они касаются если делаешь прогу не только себе... гы себе то какая разница как затупливать будет главное чтоб сделала)
    без димагогий на высокие темы
    1) не создавать кучу компонетов, даже динамически. Проблемы 1) расход памяти; 2) при изменении свойств нескольких компонентов в течении секунды - процу поплохеет
    2) .net вещь в себе - рандомные глюки могут запросто появится

    Предложение: если не хочешь гриды юзать возьми TextBox создай в нем 1200 строк и через 1 напиши свой текст
    делаем alClient цвет карячневый (как на форме), бардюры убрать и ридонли. Визуально тоже самое
     
  8. nik-taraz

    nik-taraz Писатель

    Регистр.:
    9 фев 2012
    Сообщения:
    2
    Симпатии:
    0
    да, а можно просто создать один единственный label, и записывать значения...

    вот код, на форме 5 label'ов, 1 button и 2 трекбара:
    Код:
    procedure TForm1.btn1Click(Sender: TObject);
    var i,j:Integer;
        s:string;
    begin
      lbl1.Caption := ''; //сбрасываем значение
      for i := 1 to 25 do begin //25 строк
      lbl1.Caption := lbl1.Caption + #13; //символ переноса
        for j := 1 to 24 do begin //по 24 столбика
            s := FloatToStr(Random(100)); //случайное число
            if Length(s) < 3 then s := '0' + s;  // прошу прощения за кривой код
            if Length(s) < 3 then s := '0' + s;  // тут мы выравниваем до 3х символов
            lbl1.Caption := lbl1.Caption + ' - ' + s; //добовляем к label (тут "-" знак для дальнейшего поиска нужного значения)
        end;
      end;
    end;
     
    procedure TForm1.trckbr1Change(Sender: TObject);
    var i,k:Integer;
    begin
    lbl3.Caption := IntToStr(trckbr1.Position); //показываем номер столбца
    lbl4.Caption := IntToStr(trckbr2.Position); //показываем номер строки
    for i := 0 to Length(lbl1.Caption) do begin  //цикл по всей строке
      if Copy(lbl1.Caption,i,1) = '-' then k := k + 1;  //считаем каждый спец-символ
      if k = ((trckbr2.Position-1)*24 + trckbr1.Position)-1
      then lbl5.Caption := Copy(lbl1.Caption,i+3,3); //показываем требуемый символ
     
    end;
     
    end;
     
  9. kolek

    kolek Писатель

    Регистр.:
    16 фев 2012
    Сообщения:
    1
    Симпатии:
    0
    Добрый день, вот набросал пример - разработано и проверено на C++Builder 2010, так что рабочий 100%. Чтение из файла не показывал, просто заменил инициализацию массива случайными числами, но сама суть осталась неизменной. (Примечание: имя главной формы Form1 - при необходимости измени его в примере) Держи:

    int array[600]; // Массив из 600 элементов
    // это вместо чтения из файла
    // заполнение массива случайными числами
    for(int i=0; i<600; i++)
    array=random(38);

    // Создание динамического массива TLabel
    TLabel *Lab[600];
    for(int j=0; j<600; j++)
    {
    // Динамическое создание компонентов
    Lab[j] = new TLabel(this);
    // Присвоение уникального имени
    Lab[j]->Name = "Label"+IntToStr(j);
    // Указание родителя
    Lab[j]->Parent = Form1;
    // Задание размеров компонентов
    Lab[j]->Width = 20;
    Lab[j]->Top = 20;
    // Смещение компонентов вниз
    Lab[j]->Left = 20;
    Lab[j]->Top += 20*j;
    // Запись значений в компоненты из массива
    Lab[j]->Caption = array[j];
    // Отображение компонентов
    Lab[j]->Show();
    }

    Если будут вопросы, рад буду видеть на своём сайте: cbuilder.inf.ua
     
Статус темы:
Закрыта.