Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.04.01;
Скачать: CL | DM;

Вниз

constructor   Найти похожие ветки 

 
wwwrr   (2007-03-09 10:40) [0]


(******************************************************************************)
                                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, т.е. еще на стадии зарождения программы????


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


> wwwrr   (09.03.07 10:40)

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


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

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

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


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

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


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


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

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


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


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


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


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


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


 
wwwrr   (2007-03-09 11:09) [6]

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


(******************************************************************************)
                                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);


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


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


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

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


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


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


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


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


> wwwrr   (09.03.07 11:10) [7]

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

 property GUID: TGUID read GetGUID write SetGUID;

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


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


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

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

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


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


> wwwrr   (09.03.07 11:17) [10]


> Акак иначе?


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

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


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


> 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 14:14) [13]

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

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



Страницы: 1 вся ветка

Текущий архив: 2007.04.01;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.042 c
3-1167987914
Сергей Ю
2007-01-05 12:05
2007.04.01
Помогите с запросом полному нолю, т.е. мне :)


2-1173796728
валидол
2007-03-13 17:38
2007.04.01
Позиция мыши


2-1173280010
pasha star
2007-03-07 18:06
2007.04.01
OnRestart , OnShutdown..


2-1173442023
AMW
2007-03-09 15:07
2007.04.01
Invalid pointer operation при FreeMem


1-1170435839
Makhanev Alexander
2007-02-02 20:03
2007.04.01
DdeClient и IE