Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как создавать объекты в RunTime? надо создавать sLabel во время выпонения 
:(
    Опции темы
kulikoff
Дата 29.11.2006, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 334
Регистрация: 5.11.2005
Где: Киев

Репутация: нет
Всего: 1



Подскажите, есть массив, кол-во ненулевых элементов его  заранее не известно, потом мне надо распечатывать его строки в sLabel по принципу - одна строка массива - один sLabel. Как мне создавать в процессе работы программы sLabel?
PM MAIL WWW ICQ Skype   Вверх
Snowy
Дата 29.11.2006, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Смотри внизу страницы smile

Добавлено @ 11:35 
Код

procedure TForm1.Button1Click(Sender: TObject);
var slab: TsLabel;
begin
  slab := TsLabel.Create(Self);
  with slab do begin
    Caption := 'Новая лабела';
    Left := 200; Top := 100;
    Parent := Form1;
  end;
end;

PM MAIL   Вверх
kulikoff
Дата 29.11.2006, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 334
Регистрация: 5.11.2005
Где: Киев

Репутация: нет
Всего: 1



Пишу такую вот процедурку:
Код

procedure TForm12.StringGrid1SelectCell(Sender: TObject; ACol,  ARow: Integer; var CanSelect: Boolean);
var slab: TsLabel;
      x,y: integer;
begin
  slab := TsLabel.Create(Self);
  x:=18;
  y:=30;
  with slab do begin
    Caption := 'ТЕКСТ';
    Left := x; Top := y;
    Parent := sPanel4;
    y:=y+17;
  end;
end;

При однократном нажатии на Грид добавляет новую лаблу и всё петум, но мне надо, чтоб при повторном нажатии на грид добавлялась ещё одна ниже... Как это сделать?

Это сообщение отредактировал(а) kulikoff - 30.11.2006, 16:18
PM MAIL WWW ICQ Skype   Вверх
Snowy
Дата 30.11.2006, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Код

procedure TForm12.StringGrid1SelectCell(Sender: TObject; ACol,  ARow: Integer; var CanSelect: Boolean);
var slab: TsLabel;
begin
  slab := TsLabel.Create(Self);
  with slab do begin
    Caption := 'ТЕКСТ';
    Left := 18; Top := sPanel4.tag + 30;
    Parent := sPanel4;
  end;
  sPanel4.tag := sPanel4.tag + 17;
end;

PM MAIL   Вверх
kulikoff
Дата 30.11.2006, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 334
Регистрация: 5.11.2005
Где: Киев

Репутация: нет
Всего: 1



а как обратиться к, скажем, третей сгенерированной лабле? т.е. как Узнать, какой номер у первой и какой у третьей? И кол-во сгенерированных - тут лучше использовать счетчик простой?
PM MAIL WWW ICQ Skype   Вверх
Snowy
Дата 30.11.2006, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Нет, тут нужно ещё и Name присваивать.
А уже по имени можно потом обращаться.
А как ты будешь их называть - уже сам придумывай.
Хочешь по счётчику, хочешь ещё как...
PM MAIL   Вверх
kulikoff
Дата 30.11.2006, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 334
Регистрация: 5.11.2005
Где: Киев

Репутация: нет
Всего: 1



Name - это  тип стринг? Просто стринг генерить и обращаться по имени?
PM MAIL WWW ICQ Skype   Вверх
Reptile
Дата 30.11.2006, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 30.9.2006
Где: Украина, Первомай ск

Репутация: нет
Всего: 3



А еще можно в Tag значение загонять.
PM MAIL   Вверх
Snowy
Дата 30.11.2006, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Цитата(kulikoff @  30.11.2006,  17:42 Найти цитируемый пост)
Name - это  тип стринг?
Да. Но обязательно должен быть уникален - нельзя назвать 2 компонента одинаково.

Цитата(kulikoff @  30.11.2006,  17:42 Найти цитируемый пост)
Просто стринг генерить и обращаться по имени?
Нет, их нужно находить по имени функцией FindComponent.
Примеры - введи FindComponent в поле поиска вверху страницы.

Добавлено @ 17:51 
Вот примерчик: http://forum.vingrad.ru/index.php?showtopi...st&p=698216
PM MAIL   Вверх
kulikoff
Дата 1.12.2006, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 334
Регистрация: 5.11.2005
Где: Киев

Репутация: нет
Всего: 1



Не получается у меня что-то с этими Name'ми... Посмотрите, плиз, где ошибка:
Код

procedure TForm12.StringGrid1SelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
var slab:  TsLabel;
       i:  integer;
begin
  i:=19;
  slab := TsLabel.Create(Self);
{  sbtn:=TsBitBtn.Create(Self);}
  with Form1 do begin
    ADOQuery6.Close;
    ADOQuery6.SQL.Clear;
    ADOQuery6.SQL.Text:='select b.keybank, b.s from REN.bankvup b where b.nupl=:p1 and b.dapl=:p2 and b.dateprov=:p3 and b.s=:p4';
    ADOQuery6.Parameters.ParseSQL(ADOQuery6.SQL.Text, true);
    ADOQuery6.Parameters.ParamByName('p1').Value:=Form12.StringGrid1.Cells[1,ARow];
    ADOQuery6.Parameters.ParamByName('p2').Value:=StrToDate(Form12.StringGrid1.Cells[3,ARow]);
    ADOQuery6.Parameters.ParamByName('p3').Value:=StrToDate(Form12.StringGrid1.Cells[4,ARow]);
    ADOQuery6.Parameters.ParamByName('p4').Value:=StrToFloat(Form12.StringGrid1.Cells[2,ARow]);
    ADOquery6.Prepared;
    ADOQuery6.Open;
  end;
  with slab do begin
    Caption := IntToStr(Form1.ADOQuery6.FieldByName('keybank').AsInteger);
    Name:='KEY'+IntToStr(i+1);
    inc(i);
    Form12.sLabel16.Caption:=FloatToStr(StrToFloat(Form12.sLabel16.Caption)+Form1.ADOQuery6.FieldByName('s').AsFloat);
    if StrToFloat(Form12.sLabel16.Caption)-StrToFloat(Form12.sLabel17.Caption)<0 then //вывод суммы недобора/перебора
        begin
          Form12.Label1.Font.Color:=clRed;
          Form12.label1.Caption:='Недобір '+FloatToStr(StrToFloat(Form12.sLabel16.Caption)-StrToFloat(Form12.sLabel17.Caption))+' грн.';
        end
      else
        begin
          Form12.Label1.Font.Color:=clGreen;
          Form12.label1.Caption:='Перебір '+FloatToStr(StrToFloat(Form12.sLabel16.Caption)-StrToFloat(Form12.sLabel17.Caption))+' грн.';
        end;
    Left := 18; Top := sPanel4.tag + 30;
    Parent := sPanel4;
  end;
 sPanel4.tag := sPanel4.tag + 17;
end;

Первый раз срабатывает, на второй пишет, что уже есть такой элемент. Почему-то не видит инкремента i. Я уже пробовал и i:=i+1; - не помагает. В чем дело?
PM MAIL WWW ICQ Skype   Вверх
Reptile
Дата 1.12.2006, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 30.9.2006
Где: Украина, Первомай ск

Репутация: нет
Всего: 3



Конечно i у Тебя локальная smile И у Тебя выходит:
Код

Name:='KEY'+IntToStr(19+1);

Всегда!!!

PM MAIL   Вверх
kulikoff
Дата 1.12.2006, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 334
Регистрация: 5.11.2005
Где: Киев

Репутация: нет
Всего: 1



 smile пятница, наверное, не просек сразу... Тут сразу же возник другой вопрос: создаю лаблы и кнопки рядом с ними. Как мне узнать, на какую именно кнопку нажал пользователь. Просто надо будет по нажатию на созданную кнопку удалить соответствующую лаблу и саму кнопку... 
Код

procedure TForm12.StringGrid1SelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
var slab:  TsLabel;
       i:  integer;
    sbtn: TsBitBtn;
begin
  slab := TsLabel.Create(Self);
  i:=StrToInt(Label2.Caption);
  with Form1 do begin
    ADOQuery6.Close;
    ADOQuery6.SQL.Clear;
    ADOQuery6.SQL.Text:='select b.keybank, b.s from REN.bankvup b where b.nupl=:p1 and b.dapl=:p2 and b.dateprov=:p3 and b.s=:p4';
    ADOQuery6.Parameters.ParseSQL(ADOQuery6.SQL.Text, true);
    ADOQuery6.Parameters.ParamByName('p1').Value:=Form12.StringGrid1.Cells[1,ARow];
    ADOQuery6.Parameters.ParamByName('p2').Value:=StrToDate(Form12.StringGrid1.Cells[3,ARow]);
    ADOQuery6.Parameters.ParamByName('p3').Value:=StrToDate(Form12.StringGrid1.Cells[4,ARow]);
    ADOQuery6.Parameters.ParamByName('p4').Value:=StrToFloat(Form12.StringGrid1.Cells[2,ARow]);
    ADOquery6.Prepared;
    ADOQuery6.Open;
  end;
  with slab do begin
    Form12.sLabel16.Caption:=FloatToStr(StrToFloat(Form12.sLabel16.Caption)+Form1.ADOQuery6.FieldByName('s').AsFloat);
    if StrToFloat(Form12.sLabel16.Caption)-StrToFloat(Form12.sLabel17.Caption)<0 then //&acirc;&ucirc;&acirc;&icirc;&auml; &ntilde;&oacute;&igrave;&igrave;&ucirc; &iacute;&aring;&auml;&icirc;&aacute;&icirc;&eth;&agrave;/&iuml;&aring;&eth;&aring;&aacute;&icirc;&eth;&agrave;
        begin
          Form12.Label1.Font.Color:=clRed;
          Form12.label1.Caption:='&Iacute;&aring;&auml;&icirc;&aacute;&sup3;&eth; '+FloatToStr(StrToFloat(Form12.sLabel16.Caption)-StrToFloat(Form12.sLabel17.Caption))+' &atilde;&eth;&iacute;.';
        end
      else
        begin
          Form12.Label1.Font.Color:=clGreen;
          Form12.label1.Caption:='&Iuml;&aring;&eth;&aring;&aacute;&sup3;&eth; '+FloatToStr(StrToFloat(Form12.sLabel16.Caption)-StrToFloat(Form12.sLabel17.Caption))+' &atilde;&eth;&iacute;.';
        end;
    Left := 18; Top := sPanel4.tag + 25;
    Parent := sPanel4;
    Caption := IntToStr(Form1.ADOQuery6.FieldByName('keybank').AsInteger);
    Name:='KEY'+IntToStr(i);
  end;
    sbtn:=TsBitBtn.Create(Self);
  with sBtn do begin
    Caption:='X';
    Left:= 80; Top:=sPanel4.Tag+25;
    Height:=20; Width:=20;
    Name:='BUT'+IntToStr(i);
    Font.Color:=clRed;
//  Font.Style:=bsbold;
    Parent := sPanel4;
  end;
  inc(i);
  Form12.Label2.Caption:=IntToStr(i);
  sPanel4.tag := sPanel4.tag + 25;

end;


смотрел на форуме - http://forum.vingrad.ru/topic-39839.html не понял, как поставить обработчик события доблклик на объект, который ещё не существует....

PM MAIL WWW ICQ Skype   Вверх
Reptile
Дата 1.12.2006, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 30.9.2006
Где: Украина, Первомай ск

Репутация: нет
Всего: 3



А что именно там не понятно?
Создали обработчи события доблклик(не зависимый, свой), а потом присвоили его обработчику создаваемого объекта.
А именно:
Код

 OnDblClick := OnjvTrayIconDblClick;

PM MAIL   Вверх
kulikoff
Дата 2.12.2006, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 334
Регистрация: 5.11.2005
Где: Киев

Репутация: нет
Всего: 1



Мне в этом случае точно так же поступать? Можно помочь кодом, а то никогда не делал такого, кучу вопросов возникло, понимаю, что детские, но прошу помочь.. smile 
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.4317 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.