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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.10.2011, 13:52   #1
Ko$
Пользователь
 
Регистрация: 21.12.2010
Сообщений: 91
Вопрос Form1 и Form2

Как показать Form2 на котором, Вход в программу Логин\Пароль
Код:
procedure TForm2.sBitBtn1Click(Sender: TObject);

var dir,log,pas:string;
a,i:Integer;
dos:Boolean;
begin
dos:=False;
getdir(0,dir);
dir:=dir+'\pass.txt';
Memo1.Lines.LoadFromFile(dir);
a:=Memo1.Lines.Count;
for i:=0 to a-1 do
begin
  log:=Copy(Memo1.Lines[i],0,Pos(':',Memo1.Lines[i])-1);
  pas:=Copy(Memo1.Lines[i],Pos(':',Memo1.Lines[i])+1, Length(Memo1.Lines[i]));
  if (Edit1.text=log) and (Edit2.text=pas) then
  dos:=True;
  end;
  if dos then

  Form1.Show
  else
  Form4.Show;

end;
перед запуском Form1 на котором сама прога. т.е. пока не заполниш form2 правильно Form1 не откроется.
Ko$ вне форума Ответить с цитированием
Старый 20.10.2011, 14:42   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Да очень просто...
Вот как должен выглядеть (в простейшем случае) файл проекта DPR:
Код:
program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2};

{$R *.res}

begin
  Application.Initialize;
  //Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
  Application.Run;
end.
А в Unit2, если пароль введен правильный, делаете:
Код:
Form1:=TForm1.Create(Self);
Form1.Show;
Вот и все...

З.Ы. Да, и в Unit1 добавьте:
Код:
procedure TForm1.FormShow(Sender: TObject);
begin
Form2.Hide;
end;

Последний раз редактировалось mihali4; 20.10.2011 в 14:44.
mihali4 вне форума Ответить с цитированием
Старый 20.10.2011, 15:57   #3
Ko$
Пользователь
 
Регистрация: 21.12.2010
Сообщений: 91
По умолчанию

Что то не работает нормально ошибку не выдаёт при неправильном наборе пишет(то что на картинке) а вот сам код
Код:
procedure TForm2.sBitBtn1Click(Sender: TObject);

var dir,log,pas:string;
a,i:Integer;
dos:Boolean;
begin
dos:=False;
getdir(0,dir);
dir:=dir+'\pass.txt';
Memo1.Lines.LoadFromFile(dir);
a:=Memo1.Lines.Count;
for i:=0 to a-1 do
begin
  log:=Copy(Memo1.Lines[i],0,Pos(':',Memo1.Lines[i])-1);
  pas:=Copy(Memo1.Lines[i],Pos(':',Memo1.Lines[i])+1, Length(Memo1.Lines[i]));
  if (Edit1.text=log) and (Edit2.text=pas) then
  dos:=True;
  end;
  begin
  if dos then
  begin
  Form1:=TForm1.Create(Self);
  Form1.Show;
  end
  else
  Form4.Show;
end;

Я понял в чём проблема можно ли как то не ставить (//) коментарии на Application.CreateForm ???

Код:
program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2},
  Unit3 in 'Unit3.pas' {Form3},
  Unit4 in 'Unit4.pas' {Form4};

{$R *.res}

begin
  Application.Initialize;

 // Application.CreateForm(TForm1, Form1);
 // Application.CreateForm(TForm2, Form2);
   Application.CreateForm(TForm3, Form3);
 //Application.CreateForm(TForm4, Form4);

Application.Run;
end.
P/s:"Авторизация" у меня на form3 находится
Изображения
Тип файла: jpg 1.jpg (112.4 Кб, 139 просмотров)

Последний раз редактировалось Ko$; 20.10.2011 в 16:19.
Ko$ вне форума Ответить с цитированием
Старый 20.10.2011, 16:50   #4
haruhi
Форумчанин
 
Аватар для haruhi
 
Регистрация: 05.10.2011
Сообщений: 368
По умолчанию

скорее всего проиходит обращение к несозданным формам. в вашем коде создание форм 1,2, 4 закоментарено, поэтому для правильного обращения к ним их надо создать вручную через FormX:=TFormX.Create(Self);

и надо перепроверить весь код в других формах, чтобы не было обращений к несозданным формам, либо построить всё так чтобы не возникало ситуации обращения к несозданной форме
Не стоит будить спящего Бога! (с) Меланхолия Харухи Судзумии
haruhi вне форума Ответить с цитированием
Старый 20.10.2011, 17:04   #5
Ko$
Пользователь
 
Регистрация: 21.12.2010
Сообщений: 91
По умолчанию

а можно поподробнее? Вот полностью код Project1
Код:
program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2},
  Unit3 in 'Unit3.pas' {Form3},
  Unit4 in 'Unit4.pas' {Form4};

{$R *.res}

begin
  Application.Initialize;

 // Application.CreateForm(TForm1, Form1);
 // Application.CreateForm(TForm2, Form2);
   Application.CreateForm(TForm3, Form3);
  //Application.CreateForm(TForm4, Form4);


  Application.Run;
end.
которые закоментированы те и невызываются(((

Еще раз напоминаю, что кнопкой "цитата" нужно пользоваться только при действительно насущной необходимости цитирования !
Иначе начну штрафовать за оверквотинг...

Читаем правила раздела !

Последний раз редактировалось mihali4; 20.10.2011 в 17:14.
Ko$ вне форума Ответить с цитированием
Старый 20.10.2011, 17:17   #6
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Сообщение от Ko$ Посмотреть сообщение
а можно поподробнее? Вот полностью код Project1
По теме.
Файл проекта тут ни при чем.
Если хотите, то создавайте все формы, создание которых закомментировано, в том же месте, где я вам указал создание Form1.
А показывать их или нет - вам виднее.
mihali4 вне форума Ответить с цитированием
Старый 20.10.2011, 20:04   #7
Ko$
Пользователь
 
Регистрация: 21.12.2010
Сообщений: 91
Печаль

Где ещё поставить FormX:=TFormX.Create(Self); если я правильно понял
Код:
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, acPNG, ExtCtrls, OleCtrls, SHDocVw, sSkinManager, XPMan, Drawer,
  jpeg, StdCtrls, Buttons, sSpeedButton, sSplitter, ToolWin, ComCtrls,
  acCoolBar, sPanel;
type
  TForm1 = class(TForm)
    WebBrowser1: TWebBrowser;
    Image2: TImage;
    Timer3: TTimer;
    Timer1: TTimer;
    Timer2: TTimer;
    Image1: TImage;
    Button1: TButton;
    sSkinManager1: TsSkinManager;
    XPManifest1: TXPManifest;
    sPanel1: TsPanel;
    sSpeedButton1: TsSpeedButton;
    sSpeedButton2: TsSpeedButton;
    sPanel2: TsPanel;
    procedure FormCreate(Sender: TObject);
    procedure Timer3Timer(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Timer2Timer(Sender: TObject);
    procedure Image3Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure sPanel1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure sSpeedButton1Click(Sender: TObject);
    procedure sSpeedButton2Click(Sender: TObject);
    procedure sPanel2Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
  
  private
    { Private declarations }
    procedure WMNCHitTest(var M: TWMNCHitTest); message wm_NCHitTest;
    procedure WMMoving (var msg: TWMMoving);message WM_MOVING;
    procedure WMMouseLeave(var msg: TMessage); message CM_MOUSELEAVE;


  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation

uses Unit2, Unit3;

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject); 
begin
TransparentColor := true;
Color := clWhite;                  //Ïðîçðà÷íàÿ ôîðìà
TransparentColorValue := clWhite;
WebBrowser1.Navigate('K:\Ðàçíîå\Sait\Íîâàÿ ïàïêà (2)\index.html'); //Ïóòü ê html
end;

procedure TForm1.Timer3Timer(Sender: TObject);
begin
  Form1:=TForm1.Create(Self);
if Form1.AlphaBlendValue<255 then  Form1.AlphaBlendValue:=Form1.AlphaBlendValue+3
else timer3.Enabled:=false;
end;

procedure TForm1.Image3Click(Sender: TObject);
begin
Timer1.Enabled:=True;
Timer2.Enabled:=True;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 AlphaBlendValue:=AlphaBlendValue-25 //ïðîçðà÷íîñòü ôîðìû
end;

procedure TForm1.Timer2Timer(Sender: TObject);
begin
  Form2:=TForm2.Create(Self);
Close; //çàêðûòèå ôîðìû
end;

procedure TForm1.WMNCHitTest(var M: TWMNCHitTest);
begin
inherited;
 if  M.Result = htClient then
   M.Result := htCaption;
end;

procedure TForm1.WMMoving(var msg: TWMMoving);
begin
  Form2:=TForm2.Create(Self);
Form2.Left:=Form1.Left+Form1.Width;
 Form2.Top:=Form1.Top+30;
end;
 
procedure TForm1.Button1Click(Sender: TObject);

 begin
   Form2:=TForm2.Create(Self);
 if not Form2.Showing then
  begin
    Form2:=TForm2.Create(Self);
    Form2.Show;
    Form2.Left:=Form1.Left+Form1.Width;  //×òîáû îêíà
    Form2.Top:=Form1.Top+30;            // ïðèëèïàëè.
  end
  else
      Form2:=TForm2.Create(Self);
    Form2.Hide;
 end;

procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
Form2:=TForm2.Create(Self);
Form2.Show;
Form2.Left:=Form1.Left+Form1.Width;//×òîáû îêíà
Form2.Top:=Form1.Top+30;           // ïðèëèïàëè.
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if key=27 then
Application.Terminate;
end;

procedure TForm1.sPanel1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
sPanel1.Height:=30;
sSpeedButton1.Height:=30;
end;

procedure TForm1.WMMouseLeave(var msg: TMessage);
begin
sPanel1.Height:=11;
sSpeedButton1.Height:=11;
end;


procedure TForm1.sSpeedButton1Click(Sender: TObject);
begin
Application.Terminate;
end;
 
procedure TForm1.sSpeedButton2Click(Sender: TObject);
begin
Application.Minimize
end;

procedure TForm1.sPanel2Click(Sender: TObject);
begin
Application.Terminate;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  Form3:=TForm3.Create(Self);
Form3.Hide;
end;
End.

Код:
unit Unit2;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, sSkinManager, ExtCtrls, ComCtrls, sTreeView;
type
  TForm2 = class(TForm)
    sTreeView1: TsTreeView;
    private
    { Private declarations }
    procedure WMMouseLeave(var msg: TMessage); message CM_MOUSELEAVE;

  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.WMMouseLeave(var msg: TMessage);
begin
  Form2:=TForm2.Create(Self);
Form2.Close;
end;
end.
Ko$ вне форума Ответить с цитированием
Старый 20.10.2011, 20:05   #8
Ko$
Пользователь
 
Регистрация: 21.12.2010
Сообщений: 91
По умолчанию

Код:
unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, sBitBtn, ExtCtrls, sSkinManager;

type
  TForm3 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Memo1: TMemo;
    sBitBtn1: TsBitBtn;
    sSkinManager1: TsSkinManager;
    procedure sBitBtn1Click(Sender: TObject);




  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form3: TForm3;

implementation

uses Unit1, Unit4;

{$R *.dfm}



procedure TForm3.sBitBtn1Click(Sender: TObject);

var dir,log,pas:string;
a,i:Integer;
dos:Boolean;

begin
dos:=False;
getdir(0,dir);
dir:=dir+'\pass.txt';
Memo1.Lines.LoadFromFile(dir);
a:=Memo1.Lines.Count;
for i:=0 to a-1 do
begin
  log:=Copy(Memo1.Lines[i],0,Pos(':',Memo1.Lines[i])-1);
  pas:=Copy(Memo1.Lines[i],Pos(':',Memo1.Lines[i])+1, Length(Memo1.Lines[i]));
  if (Edit1.text=log) and (Edit2.text=pas) then
  dos:=True;
  end;
  begin
  if dos then
  begin
  Form1:=TForm1.Create(Self);
  Form1.Show;
  end
  else
 Form4:=TForm4.Create(Self);
  Form4.Show;
end;
end;

end.
Код:
unit Unit4;

interface

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

type
  TForm4 = class(TForm)
    Label1: TLabel;
    sBitBtn1: TsBitBtn;
    procedure sBitBtn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form4: TForm4;

implementation

{$R *.dfm}

procedure TForm4.sBitBtn1Click(Sender: TObject);
begin
Application.Terminate;
end;

end.
Ko$ вне форума Ответить с цитированием
Старый 21.10.2011, 09:37   #9
Dush
Форумчанин
 
Регистрация: 29.09.2011
Сообщений: 116
По умолчанию

Ух тышка как у вас все запущено
я не буду приводить все места которые я не понял ни назначения ни логики, а просто покажу как делаю я:
есть проект в котором форма входа (fEnterForm), основная (fMain), и несколько других второстепенных форм.
1. Файл проекта:
Код:
begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.ShowMainForm:=False;
  Application.CreateForm(TfMain, fMain);//основная форма
  Application.CreateForm(TfEnterForm, fEnterForm);//форма входа
  uEnterForm.fEnterForm.Show;//показываем форму входа
  repeat
    Application.ProcessMessages;
  until uEnterForm.pass or uEnterForm.boolquit; 
//продолжать пока не введен правильный пароль или не нажата кнопка выхода
  if not uEnterForm.pass then Application.Terminate //если пароль не верен -  завершить работу
  else //иначе удалить форму входа и показать основную форму
  begin
    uEnterForm.fEnterForm.Free;
    Application.ShowMainForm:=True;
  end;
  Application.Run;
end.
теперь что происходит на форме входа:
допустим есть константанта PASSWORD_USER с паролем
Код:
//нажатие на кнопку OK
procedure TfEnterForm.btnOkClick(Sender: TObject);
begin
  if edtPass.Text=PASSWORD_USER then pass:=True;
end;
//нажатие на кнопку Cancel
procedure TfEnterForm.btnCancelClick(Sender: TObject);
begin
  boolquit:=True;
end;
//создание формы
procedure TfEnterForm.FormCreate(Sender: TObject);
begin
  pass:=False;
  boolquit:=false;
end;
заметьте, что в модуле проекта не создаются второстепенные формы. Почему? экономия памяти. формы создаются по мере необходимости, а не висят в оперативке. это может немного замедлить программу, так как сначала ей нужно создать форму, потом отобразить, после закрытия освободить память.

теперь что нужно делать при необходимости отобразить второстепенную форму:
Код:
Application.CreateForm(TfNewForm, fNewForm);//создали форму
fNewForm.showModal;//отобразили модально. можно и просто Show
при таком вызове форм в методе закрытия формы необходимо ее удалять из памяти:
Код:
//кнопка хзакрытия второстепенной формы
procedure TfNewForm.btnCloseClick(Sender: TObject);
begin
  Close;
end;
//событие формы OnClose
procedure TfNewForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  action:=caFree;
end;
и так для каждой формы которую вы создаете не в модуле проекта а вручную.
ну вот вроде и все
Dush вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В form1 отоброзить form2 (delphi) SNEKC Помощь студентам 3 03.02.2010 19:43
переменные form2 на form1 motaro Общие вопросы Delphi 16 28.09.2009 07:49
Form1 & Form2 Alex Cones Общие вопросы Delphi 4 31.07.2009 21:50
Delphi. Form1 и Form2. Xeon332 Общие вопросы Delphi 8 01.11.2008 15:52
form1 и form2 SLIMMUS Общие вопросы Delphi 3 29.10.2008 01:15