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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание и заполнение динамической формы, в чем ошибка? 
V
    Опции темы
Klio
  Дата 17.2.2011, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 111
Регистрация: 18.4.2008
Где: Харьков - СС_3

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



Здравствуйте господа программисты!!!
есть такая проблема: есть модуль в котором описана форма, в CreateForm(...) записаны все компоненты которые добавляются на форму, а также их параметры...
Код

TLstForm = class(TForm)
    ALab:TLabel;
    ...
    procedure FormCreate(Sender: TObject);   // + другие обработчики
end;

procedure TListForm.CreateForm(...);
begin
ALab:TLabel.create(LstForm);
ALab.pernt:=LstForm; Alab.caption:='kjfsdhijf';  // и т.д. и т.п.
end;

в главной форме вызываю создание
Код

procedure TMForm.ButClick(...)
var LstFrm:TLstForm;                               //  в uses модуль добавлял
begin
LstFrm := TLstForm.CreateNew(Application);
LstFrm.Show; // и другие обработчики данных этой формы
LstFrm.free;

но при выполнении CreateNew, или Show вызова CreateForm не роисходит и отображается лишь пустая авто форма, (пытался и подругому Application.FormCreate(TLstForm,LstForm), и добавлял конструктор к форме,и просто LstFrm:=TLstForm.Create(Appl...) но ничего не срабатывает)
КАК можно сделать чтобы это работало, и таких окон могло запускаться несколько?...
Заранее спасибо!!!

Это сообщение отредактировал(а) Klio - 17.2.2011, 16:07
PM MAIL ICQ   Вверх
SPrograMMer
Дата 17.2.2011, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Спамер :)
**


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

Репутация: 2
Всего: 6



Пример из рабочего исходника:
Код

procedure TFormSimpleList.FormShow(Sender: TObject);
  var
    I:integer;
    S:String;
    Ins:String;
    InsVal:String;
    Updt:String;
    Col:TColumnEh;
    LX:TLabel;
    DBX:TDBEdit;
begin
  Height := MinHeight ;
  /// подготовим список полей
  Ins:='';InsVal:='';Updt:='';
  if ListFields.Count>0 then begin
    for I:=0 to Pred(ListFields.Count) do Begin
      S:=Trim(ListFields.Names[I]);
      Ins:=Ins + ', '+S;
      InsVal := InsVal + ', :'+S;
      Updt := Updt + ', '+S+' = :'+S
    End;
    S := ExtForSQLs;
    if S<>'' then Begin
      Ins:=Ins + ', '+S;
      InsVal := InsVal + ', :'+S;
      Updt := Updt + ', '+S+' = :'+S
    End;
    Delete(Ins,1,2);
    Delete(InsVal,1,2);
    Delete(Updt,1,2)
  end;
  /// сгенерируем запросы
  GenerateSelect(Ins,InsVal);
  IBDataSet1.InsertSQL.Text := 'insert into '+SourceName+
    ' ('+Ins+') values ('+InsVal+')';
  IBDataSet1.DeleteSQL.Text := 'delete from '+SourceName+
    ' where ID = :OLD_ID';
  IBDataSet1.RefreshSQL.Text :='select * from '+SourceName+
    ' where ID = :ID';
  IBDataSet1.ModifySQL.Text := 'update '+SourceName+' set '+Updt+
    ' where ID = :OLD_ID';
  IBQuery1.SQL.Text := 'Select Max(ID) As MAX_ID From '+SourceName;
  /// настроем визуальный элемент
  if ListFields.Count>0 then Begin
    SetLength(LabelX,ListFields.Count);
    SetLength(DBEditX,ListFields.Count);
    for I:=0 to Pred(ListFields.Count) do Begin
      S:=ListFields.Names[I];
      Col := DBGridEh1.Columns.Add;
      Col.Title.Caption := Trim(ListFields.Values[S]);
      Col.Title.Alignment := taCenter;
      Col.Title.TitleButton := True;
      Col.FieldName := Trim(S);
      Col.Width := StrToInt(FieldsWidth.Values[S]);
      if Col.FieldName = FBoolField then
        begin // Логическое поле
          Col.Checkboxes := True;
          With Col.KeyList Do Begin
            Clear;
            Add('Y');
            Add('N')
          End;
          DBCheck := TCheckBox.Create(GroupBox1);
          DBCheck.Parent := GroupBox1;
          DBCheck.Caption := Col.Title.Caption;
          DBCheck.Left := 10;
          DBCheck.Top := 20 + 30*I;
          DBCheck.Width := GroupBox1.Width - 40;
          DBCheck.OnClick := OnChangeDBCheckBox;
        End
      Else begin
        /// ==========================================
        LX := TLabel.Create(GroupBox1);
        LX.Parent := GroupBox1;
        LX.Caption := Col.Title.Caption;
        LX.Left := 10;
        LX.Top := 20 + 30*I;
        LabelX[I] := LX;
        /// ==========================================
        DBX := TDBEdit.Create(GroupBox1);
        DBX.Parent := GroupBox1;
        DBX.DataSource := DataSource1;
        DBX.DataField := Trim(S);
        DBX.Left := 200;
        DBX.Width := 320;
        DBX.Top := 15 + 30*I;
        DBEditX[I] := DBX
      End
    end;
    BitBtn4.Top := 50 + 30*Pred(ListFields.Count);
    BitBtn5.Top := 50 + 30*Pred(ListFields.Count);
    GroupBox1.Height := 85 + 30*Pred(ListFields.Count);
    MaxHeight := 250 + 30*Pred(ListFields.Count)
  end;
  /// собственно откроем набор данных
  IBDataSet1.Active := True;
  EditMode(True);
  Caption := NameOfRef
end;


Это сообщение отредактировал(а) SPrograMMer - 17.2.2011, 18:33


--------------------
животное = зверь
законченный гентушник
PM MAIL ICQ Jabber   Вверх
Klio
  Дата 17.2.2011, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 111
Регистрация: 18.4.2008
Где: Харьков - СС_3

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



перемещение объявлений в FormShow не проходит
CreateForm и Show просто не вызываются

может необходимо их задавать

(если можно напиши свой вызов этого окна и конструктор класса формы)

Это сообщение отредактировал(а) Klio - 17.2.2011, 19:14
PM MAIL ICQ   Вверх
kami
Дата 17.2.2011, 19:26 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 23
Всего: 72



Цитата(Klio @  17.2.2011,  16:05 Найти цитируемый пост)
ALab.pernt:=LstForm; Alab.caption:='kjfsdhijf';  // и т.д. и т.п.

Код

Alabel.Parent:=Self;

PM MAIL WWW   Вверх
Klio
Дата 17.2.2011, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 111
Регистрация: 18.4.2008
Где: Харьков - СС_3

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



kami спасибо за совет, получилось добиться исполнения этих процедур
Код

constructor TLstForm.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
self.OnCreate:=FormCreate;
self.OnShow:=FormShow;
end;

но только вот ни один из создаваемых контролов не отображается
Код

Ldate:=TLabel.Create(self);          //  область private   Ldate:TLabel;
  Ldate.Visible:=true;
  Ldate.AutoSize:=true;
  Ldate.Caption:='Дней';
  Ldate.Left:=16;
  Ldate.Top:=0;

PM MAIL ICQ   Вверх
Klio
Дата 17.2.2011, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 111
Регистрация: 18.4.2008
Где: Харьков - СС_3

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



Код

constructor TLstForm.Create(AOwner: TComponent);
begin
self.OnCreate:=FormCreate;
inherited Create(AOwner);
self.OnShow:=FormShow;
end;

поменял местами и всё стало отображаться...
всем спасибо за помощь
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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