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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.03.2012, 09:14   #11
delphicoding
Заблокирован
 
Регистрация: 04.07.2011
Сообщений: 261
По умолчанию

DiemonStar
Код:
  Datasets[GetCount-1] := TDataset.Create(nil);
Вы уверены, что такая строка работает??

Stilet
Цитата:
Зачем? Вынеси это поле в класс формы.
Да просто хотел автоматизировать из базовой формы.
PS Не знаю кто тут у вас админ, напиши админу, чтобы поправил стили форума - уменьшил отступы после тэгов quote и code до минимума, а то коряво смотрится и место пусто за зря занимает.

GunSmoker
Цитата:
По этому описанию получается, что дочерняя форма создаёт глобальный объект.
Типа того. Причём не просто должно создавать, а через код базовой формы с использование именем inherited формы.

Последний раз редактировалось delphicoding; 30.03.2012 в 09:16.
delphicoding вне форума Ответить с цитированием
Старый 30.03.2012, 09:18   #12
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
Типа того. Причём не просто должно создавать, а через код базовой формы с использование именем inherited формы.
Ась? А вы в курсе, что два разных наследника не в курсе друг про друга?
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 30.03.2012, 09:20   #13
delphicoding
Заблокирован
 
Регистрация: 04.07.2011
Сообщений: 261
По умолчанию

Цитата:
Сообщение от GunSmoker Посмотреть сообщение
Ась? А вы в курсе, что два разных наследника не в курсе друг про друга?
И что умное вы хотели этим сказать? Им и не надо быть в курсе, им надо просто создать объект с именем соответствующим их имени FormX=DatasetX и всё.
Подпись у вас крутая "Опытный программист на C++ легко решает любые не существующие в Паскале проблемы." - ну раз вы такой крутой - решите эту задачу...

Последний раз редактировалось delphicoding; 30.03.2012 в 09:33.
delphicoding вне форума Ответить с цитированием
Старый 30.03.2012, 09:52   #14
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,527
По умолчанию

Цитата:
создавался Dataset с именем соответствующим Form
Т.е. для каждой формы будет один строго заданный DataSet?

ЗАРАНЕЕ (Dising-time) создаются ВСЕ нужные DataSet c нужными именами, но в закрытом состоянии. Открываются по потребности.
И достаются по известному заранее имени переменной/свойства (не имени компонента).

Основная функция имен компонент это установка связи dfm - pas. (Загрузка данных из(в) dfm в определенный объект). В остальных случаях(динамическое создание) имена могут быть ='' (и таких объектов может быть сколь угодно много).
Код:
for j:=1 to 5 do begin
  ds:=TdataSet.Create(self);
  ds.name:='';
end;
Цитата:
а после использования уничтожать.
Т.е. и пользоваться им будет только она?

Пусть форма их и создает и хранит и уничтожает. зачем DataMaster?

Цитата:
Вопрос - какой код написать в BaseForm, чтобы при открытии FormA,FormB,FormX.. в DataMaster создавался Dataset с именем соответствующим Form вида DatasetFormA,DatasetFormB,DatasetFo rmX... ??? (чтобы можно было к нему обращаться)
Код:
function DataMaster.CreateDatasettoform(f: TBaseForm);
  result:=TdataSet.Create(seldf);
  result.name:='DS'_ +f.classname;
НО! форм с одинаковым типом (Classname) теоретически может быть много.
Код:
 result,name:='DS_' +f.name;
Код:
function DataMaster.CreateDatasetname(conat dsname: string);
  result:=TdataSet.Create(self);
  result.name:=dsname;
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 30.03.2012 в 10:05.
evg_m вне форума Ответить с цитированием
Старый 31.03.2012, 20:50   #15
delphicoding
Заблокирован
 
Регистрация: 04.07.2011
Сообщений: 261
По умолчанию

Цитата:
Т.е. для каждой формы будет один строго заданный DataSet?
По-сути да.
Цитата:
ЗАРАНЕЕ (Dising-time) создаются ВСЕ нужные DataSet c нужными именами, но в закрытом состоянии. Открываются по потребности.
Смысл вопроса - как/можноли написать код в базовой форме, который будет делать то что нужно, во всех inherited формах.
Цитата:
Пусть форма их и создает и хранит и уничтожает. зачем DataMaster?
Это пример, не важно что, пускай это будет некий объект другого типа. Просто множеству inherited форм с использованием своего имени нужно создать некий объект в неком общем объекте, а код для этого написать в базовой форме.

Спасибо за предложения, потестирую.
delphicoding вне форума Ответить с цитированием
Старый 31.03.2012, 21:06   #16
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Из того что понял предположу следующую модель (в виде эскиза)

Форма:
Код:
unit Unit1;

interface

uses   Unit2,
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    MyObj:TObj;
    procedure Crea;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.Crea;
begin
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 MyObj:=DataModule2.Creat;
 Caption:=DateTimeToStr(MyObj.d);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 MyObj.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 with TForm1.Create(Application) do begin
   Show;
 end;
end;

end.
Контейнер-хранилище объектов:
Код:
unit Unit2;

interface

uses        contnrs,
  SysUtils, Classes;

type
  TObj=class
    d:TDateTime;
  end;
  TDataModule2 = class(TDataModule)
  private
    { Private declarations }
   obj:TObjectList;
  public
   Function Creat:TObj;
    { Public declarations }
   destructor Destroy;
   constructor Create(AOwner: TComponent);  override;
  end;

var
  DataModule2: TDataModule2;

implementation

{$R *.dfm}

{ TDataModule2 }

function TDataModule2.Creat: TObj;
begin
 Result:=TObj.Create;
 obj.Add(Result);
 Result.d:=Now;
end;

constructor TDataModule2.Create(AOwner: TComponent);  
begin
 inherited;
 obj:=TObjectList.Create;
end;

destructor TDataModule2.Destroy;
begin
 obj.Free;
end;

end.
Ну и в проекте не забыть хранилище создавать до создания форм.
Таким образом код оформления хранилища размещен в DataModule, а в формах только ссылки на очередную ячейку хранилища.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамическое создание и удаление компонентов на форме The SCS Общие вопросы Delphi 1 11.02.2012 13:11
[Новичёк]Динамическое создание компонентов из бд Detka.i.alex Общие вопросы Delphi 3 04.04.2011 16:23
динамическое создание компонентов DOLBY Компоненты Delphi 10 17.10.2010 14:03
Динамическое создание компонентов Nice42ru Помощь студентам 4 03.01.2010 20:51
Как динамически добавить Мемо на форму? Динамическое создание компонентов! werser Помощь студентам 1 14.06.2007 00:39