Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

constructor


wwwrr ©   (2007-03-09 10:40:00) 


(******************************************************************************)
                                program My;
(******************************************************************************)

uses
 Forms,
 uMain in 'uMain.pas' {frmMain};

type
 TApp = class(TApplication)

 private
   { Private declarations }
   procedure prApplication(GUID: TGUID);
 public
   { Public declarations }
   constructor CreateForm(InstanceClass: TComponentClass; var Reference; GUID: TGUID); overload;
 end;

var
 App: TApp;

{$R *.res}

constructor TApp.CreateForm(InstanceClass: TComponentClass; var Reference; GUID: TGUID);
begin
  inherited CreateForm(InstanceClass, Reference);
  Tag:= Integer(PChar(GUIDToString(GUID))^);
end;

procedure TApp.prApplication(GUID: TGUID);
begin
  with Application do
    begin
      Initialize;
      CreateForm(TfrmMain, frmMain, GUID);
      Run;
    end;
end;

begin
 App.prApplication(.значение генератора GUID.);
end.


Как правельно переписать метод CreateForm чтоб передовать дополнительный параметр, полученный еще в разделе programm, т.е. еще на стадии зарождения программы????


Юрий Зотов   (2007-03-09 14:14:00) [1]

Как правило, можно найти способ и без подобных извращений, но если уж очень надо, то можно и TApplication переписать.

program My;
...
begin
 Application.Free;
 Application := TMyApplication.Create(...);
 Application.Initialize;
 TMyApplication(Application).CreateMainForm(TMyForm, MyForm, GUID);
 Application.Run;
end.


Плохиш   (2007-03-09 11:59:00) [2]


> wwwrr   (09.03.07 11:17) [10]

1. Добавляешь в программу TDataModul, если ещё не сделал. В нем делаешь следующее
2. Создаёшь метод Login, в котором производишь авториторизацию пользователя и устанавливаешь права пользователя.
3. В конструкторе производишь вызов метода Login
4. Создаёшь метод HasRight(<Индекс прав>): Boolean;, в нём проверяешь имеет ли пользователь право
5. Правишь, по необходимости, файл проекта, чтобы строка создания TDataModul была следующей после Application.Initialize;
6. Я бы добавил в TDataModul ещё свойство Connected, определяющее имеется ли подключение к базе данных, тогда файл проекта может выглядеть так

begin
 Application.Initialize;
 Application.CreateForm(TDM, DM);
 if DM.Connected then
 begin
   Application.CreateForm(TfrmMain, frmMain);
   .....
   Application.Run;
 end;
end.

7. В программе, при необходимости проверить права пользователя, производить вызов метода HasRight.


Сергей М.   (2007-03-09 11:24:00) [3]


> wwwrr   (09.03.07 11:17) [10]


> Акак иначе?


см. Плохиш ©   (09.03.07 11:16) [9]

В методе SetGuid запускаешь модально свою "форму авторизации" и получаешь от нее значение GUID


wwwrr   (2007-03-09 11:17:00) [4]


> Сергей М. ©   (09.03.07 11:13) [8]

Акак иначе? Этот GUID далее в основном модуле unit frmMain..., будет обробатываться и в зависимости от разграниченных (в БД), прав поль зователя будут создоваться или не создоваться те или иные компонентя программы...

Может есть другие идеи рад выслушать...


Плохиш   (2007-03-09 11:16:00) [5]


> wwwrr   (09.03.07 11:10) [7]

У формы, которой нужен этот гуид, делается новое свойство

 property GUID: TGUID read GetGUID write SetGUID;

И присваивается ему значение в любой желаемый момент времени. И ненадо переписывать TApplication.


Сергей М.   (2007-03-09 11:13:00) [6]


> От другой формы, формы Авторизации, т.е. передает некий
> (определенный) GUID- пользователя.


И только ради этого нужно городить весь этот огород ?!


wwwrr   (2007-03-09 11:10:00) [7]


> Сергей М. ©   (09.03.07 11:04) [5]


> Этот GUID откуда берется ?

От другой формы, формы Авторизации, т.е. передает некий (определенный) GUID- пользователя...


wwwrr   (2007-03-09 11:09:00) [8]

Постораюсь поставить сетуация под другим углом обзора....
Скажем можно ли сделать так:


(******************************************************************************)
                                program My;
(******************************************************************************)

uses
 Forms,
 uMain in 'uMain.pas' {frmMain};

{$R *.res}

begin
      Application.Initialize;
...
      TfrmMain.Create(Application, GUID)
...
     Application.Run;
end.

где в основном модуле:

constructor TfrmMain.Create(AOwner: TComponent; GUID: TGUID); {Ïåðåïèñûâàåì ñîáûòèå Create.}
begin
  inherited Create(AOwner); {Óíàñëåäóåì ìåòîä Create.}
  .... := GUID;
end;


Чем, и на сколько будет отличатся от CreateForm(TfrmMain, frmMain);


Сергей М.   (2007-03-09 11:04:00) [9]


> загиб в том что хотелось, новые методы прописать


Зачем они нужны ? Тот же CreateForm ?


> передать некий GUID в основной модуль программы


Этот GUID откуда берется ?


wwwrr   (2007-03-09 11:02:00) [10]


> Сергей М. ©   (09.03.07 10:54) [3]

Да загиб в том что хотелось, новые методы прописать...
Например тотже CreateForm... и т.д....
Короче говаря основная проблема над которой я бюсь... это передать некий GUID в основной модуль программы .... util frmMain;


Сергей М.   (2007-03-09 10:54:00) [11]

А ради чего , собственно, "загиб"  с наследником TApplication ?


Плохиш   (2007-03-09 10:52:00) [12]

Написал-то нормально, но забыл одно "но", сообщить делфи, что теперь надо использовать не родной TApplication, а твой изменённый. А как это сделать, ты можешь узнать изучив код модуля Forms ма предмет использования и создания экземпляра класса TApplication.

PS. Если ветку сейчас опять перенесут :-( больше не буду ответ писать :@


Kok   (2007-03-09 10:44:00) [13]


> wwwrr   (09.03.07 10:40)

Сам знаю что загнул ну все же.....???


Наверх

Титульная страница Поиск, карта сайта Написать письмо