Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Anzeige der Nebenform vor der Hauptform (https://www.delphipraxis.net/61993-anzeige-der-nebenform-vor-der-hauptform.html)

marabu 29. Jan 2006 14:39

Re: Anzeige der Nebenform vor der Hauptform
 
Hast du schon den Projekt-Quelltext verglichen?

marabu

Avax2k 29. Jan 2006 14:45

Re: Anzeige der Nebenform vor der Hauptform
 
yep aber aufgefallen ist mir nur das Var der Formen sonst nichts.

jetzt habe ich das einfach nachgebaut und siehe da meine Form1 startet immer als erste..kann es sein, dass du einfach die hauptform in Special Form umbenannt hast ?? und die MainForm eigentlich die Form2 ist..denn sonst kann ich mir nicht erklären wieso diese als erste startet.

Avax2k 29. Jan 2006 15:04

Re: Anzeige der Nebenform vor der Hauptform
 
ich bekomme es einfach nicht hin, weiss nicht wieso deine Form2 als erste startet ist mir einfach ein komplettes Rätsel denn als Code hat es nur einen Button bei der ActiveControl und wenn dieser weggelassen wird kommt die trotzdem als erste....

ich habe ein anders beispiel vorher gemacht dass einwandtfrei funktioniert NUR nicht wenn ich es in meine Anwendung einbinden will..ich meine bei einem neuen Projekt klappt das tadellos:

Delphi-Quellcode:
uses Unit2;
procedure TForm1.FormCreate(Sender: TObject);
begin
Form2 := TForm2.Create(Application);
  try
  Form2.ShowModal;
  Application.Initialize;
  Form2.Update;
  if Form2.Edit1.Text = 'hallo' then
  begin
  Form2.Free;
  Application.Run;
  end else
  Application.CreateForm(TForm1, Form1);
  finally
end;
end;

uses Unit1;
procedure TForm2.Button1Click(Sender: TObject);
begin
if Edit1.Text = 'hallo' then
begin
  Form2.Close;
  end else
  ShowMessage('Leider ist die Eingabe falsch');
  end;

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if Edit1.Text = 'hallo' then
begin
Form2.Close;
end else
Application.Terminate();
end;
wie gesagt, nicht dass ich hier als Trottel dastehe der gar nichts auf die Reihe bringt :(

JEDOCH mein Problem besteht immer noch ich bekomme Fehler und den Vorschlag von Marabu kann ich nicht umsetzen weil ich da gar nichts sehe als Unterschied im Quellcode außer eben diesem Button und dem ActiveControl ist da auch gar nichts mehr.

EDIT !!...
jetzt habe ich die dpr geöffnet und da steht was mit showModal usw. versuche das jetzt zu machen..aber finde es komisch dass ich dafür den Editor aufmachen musste denn Delphi hat mir nur die Formen angezeigt nicht aber die dpr :(..naja ich versuchs jetzt mal

Avax2k 29. Jan 2006 15:26

Re: Anzeige der Nebenform vor der Hauptform
 
so jetzt bekomme ich es hin, dass nun die Form2 als erste startet... ABER

meine ganzen Funktionen wie Edit1.Text = 'hallo' usw..
muss ich ausschalten sonst bekomme ich lauter Fehler :(

wie kann ich das lösen ??

marabu 29. Jan 2006 15:49

Re: Anzeige der Nebenform vor der Hauptform
 
Hast du auch den Code in Form2 angepasst?

Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
begin
  if Edit1.Text = Password
    then ModalResult := mrOK
    else ShowMessage(Password);
end;

procedure TForm2.FormCloseQuery(Sender: TObject;
  var CanClose: Boolean);
begin
  if Edit1.Text = Password
    then ModalResult := mrOK
    else ModalResult := mrCancel;
end;
Und im Projekt-Quelltext (DPR) steht jetzt:

Delphi-Quellcode:
program Demo;

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

{$R *.res}

var
  mr: TModalResult;

begin
  with TForm2.Create(nil) do
  begin
    mr := ShowModal;
    Free;
  end;
  if mr = mrCancel then
    Exit;
   
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
marabu

Avax2k 29. Jan 2006 16:19

Re: Anzeige der Nebenform vor der Hauptform
 
so nun funktioniert es FAST perfekt...wies nur FAST..weil nun dieser befehl nicht richtig geht:

Delphi-Quellcode:
... on Create der Nebenform
button1click(button1);
...
beime rsten Start wenn keine INI-Datei erzeugt ist wird der Knopf ausgelöst..wenn aber ini-Datei erzeuigt ist und der Eintrag ins Editfeld geholt wird dann wird nicht mehr geklcikt..sprich der text steht drin und man muss manuell klicken dann gehts sofort weiter..frage mich nur wieso der automatische klick beim OnCreate nicht mehr geht wenn aus der ini-Date der text gelesen wird ??


und an Marabu super vielen Dank für deine Geduld und die Mühen die du bisher aufgebracht hast

marabu 29. Jan 2006 16:30

Re: Anzeige der Nebenform vor der Hauptform
 
Das sollte ohne Probleme so funktionieren:

Delphi-Quellcode:
procedure TLoginForm.LoginButtonClick(Sender: TObject);
var
  ini: TMemIniFile;
  fn: TFileName;
begin
  if PswdEdit.Text = PASSWORD then
  begin
    fn := ChangeFileExt(ParamStr(0), '.ini');
    ini := TMemIniFile.Create(fn);
    ini.WriteString('Einstellungen', 'LetzteAnmeldung', DateTimeToStr(Now));
    ini.UpdateFile;
    ini.Free;
    ModalResult := mrOK;
  end else ShowMessage('falsches Kennwort');
end;
marabu

Avax2k 29. Jan 2006 16:34

Re: Anzeige der Nebenform vor der Hauptform
 
Delphi-Quellcode:
procedure TLoginForm.LoginButtonClick(Sender: TObject);
var
  ini: TMemIniFile;
  fn: TFileName;
begin
  if PswdEdit.Text = PASSWORD then
  begin
    fn := ChangeFileExt(ParamStr(0), '.ini');
    ini := TMemIniFile.Create(fn);
    ini.WriteString('Einstellungen', 'LetzteAnmeldung', DateTimeToStr(Now));
    ini.UpdateFile;
    ini.Free;
    ModalResult := mrOK;
  end else ShowMessage('falsches Kennwort');
end;
das geht auch bei mir und im OnCreate habe ich

Delphi-Quellcode:
var ini : TIniFile;
begin
ini := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'test.ini');
Edit2.Text := Ini.ReadString('Text', 'test','');
Button1Click(Button1);
und nun geht eben der ButtonClick nicht automatisch..aber NUR wenn eben der Ini-String-Eintrag bereits existiert und ins fenster geladen wurde :gruebel:

marabu 29. Jan 2006 16:40

Re: Anzeige der Nebenform vor der Hauptform
 
Du verwendest TIniFile und hältst damit die Datei sehr wahrscheinlich offen. Nimm ini: TMemIniFile einfach zu deinen privaten Form-Variablen und im OnCreate schreibst du dann das:

Delphi-Quellcode:
begin
  ini := TMemIniFile.Create(ExtractFilePath(ParamStr(0)) + 'test.ini');
  Edit2.Text := ini.ReadString('Text', 'test', '');
  Button1Click(Button1);
end;
Im OnDestroy der Form schreibst du dann ini.Free rein und im ButtonClick entfällt das Create für die Ini-Variable dann.

marabu

Avax2k 29. Jan 2006 16:58

Re: Anzeige der Nebenform vor der Hauptform
 
leider ändert das MemIniFiles nichts daran...

und wenn ich das ini.Create weglasse im Button dann bekomme ich Violation Fehler aber eben nur einmal dann geht es weiter..mit ini.Create im Knopf kommt die Violation nicht aber wie gesagt der Button will nicht automatisch drücken..obwohl er ja geht wenn man manuell drückt kommt nichts..somit sollte er gehen :cry:


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:20 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz