AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

zweites Formular lässt sich nicht anzeigen

Ein Thema von ggfan · begonnen am 18. Mär 2005 · letzter Beitrag vom 18. Mär 2005
Antwort Antwort
Benutzerbild von ggfan
ggfan

Registriert seit: 7. Feb 2005
Ort: Grafing bei München
85 Beiträge
 
Delphi 7 Personal
 
#1

zweites Formular lässt sich nicht anzeigen

  Alt 18. Mär 2005, 17:12
Ich will in meinem Programm ein zweits Formular anzeigen lassen, doch irgenwie kommt mit dem Befehl show nur eine Zugriffsverletzung raus.
Kann mir da jemand helfen?
Delphi-Quellcode:
program myToDo;

uses
  Forms,
  unmain in 'unmain.pas{frmmain},
  unnew in 'unnew.pas{frmnew};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(Tfrmmain, frmmain);
  Application.Run;
end.
Delphi-Quellcode:
unit unmain;

interface

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

type
  Tfrmmain = class(TForm)
    lstToDo: TCheckListBox;
    cmdNew: TBitBtn;
    cmdchange: TBitBtn;
    cmdDelete: TBitBtn;
    lstSortItems: TListBox;
    procedure cmdNewClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  frmmain: Tfrmmain;

procedure
  SortTasks();

implementation
uses unnew;

procedure SortTasks();
Begin
  showmessage('hallo');
end;

{$R *.dfm}

procedure Tfrmmain.cmdNewClick(Sender: TObject);
begin
  frmnew.Show;
end;

end.
Delphi-Quellcode:
unit unnew;

interface

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

type
  Tfrmnew = class(TForm)
    GroupBox1: TGroupBox;
    txttitle: TEdit;
    GroupBox2: TGroupBox;
    txtday: TEdit;
    txtmonth: TEdit;
    txtyear: TEdit;
    cmdInputNew: TBitBtn;
    Label1: TLabel;
    Label2: TLabel;
    procedure cmdInputNewClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  frmnew: Tfrmnew;

implementation
uses unmain;
{$R *.dfm}

procedure Tfrmnew.cmdInputNewClick(Sender: TObject);
begin
  unmain.frmmain.lstToDo.AddItem(txtday.Text + '.'+ txtmonth.Text + '.' + txtyear.Text + ': ' + txttitle.Text, unmain.frmmain.lstToDo);
  frmnew.Hide;
end;

end.
André Prescher
42. Damit ist auch schon alles gesagt.

http://myfileadmin.aprescher.de
Dateiverwalter für Webserver
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#2

Re: zweites Formular lässt sich nicht anzeigen

  Alt 18. Mär 2005, 17:15
Hallo,


Und wo wird die Form erzeugt?
Zitat:
frmnew.Show;
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von ggfan
ggfan

Registriert seit: 7. Feb 2005
Ort: Grafing bei München
85 Beiträge
 
Delphi 7 Personal
 
#3

Re: zweites Formular lässt sich nicht anzeigen

  Alt 18. Mär 2005, 17:30
Hast du das so gemeint:
"Tfrmnew.Create(self).Show;"
wenn ja, dann danke. Das funktioniert wunderbar.

Früher als ich meine VB-Phase haate, ging das einfach mit .show, aber man lernt nie aus.
André Prescher
42. Damit ist auch schon alles gesagt.

http://myfileadmin.aprescher.de
Dateiverwalter für Webserver
  Mit Zitat antworten Zitat
TStringlist

Registriert seit: 1. Dez 2003
360 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: zweites Formular lässt sich nicht anzeigen

  Alt 18. Mär 2005, 19:39
kann es event. sein, dass du in deiner Projektdatei irgendwie aus Versehen eine Zeile gelöscht hast, die dort jetzt nämlich eigentlich noch mit anwesend sein müsste, und zwar diese:

 Application.CreateForm(Tfrmnew, frmnew); Irgendwie spricht dafür auch die Existenz der folgenden Zeile (in der Uses-Klausel deiner Projektdatei):

  unnew in 'unnew.pas{frmnew}; Beide Zeilen werden nämlich automatisch erzeugt, wenn ich über das Hauptmenue Datei->Neu->Formular meinem Projekt eine weitere Form zufügen möchte. ...Und dementsprechend werden also auch alle nicht dynamisch erzeugte Formen am Programmstart erst einmal durch solche Anweisungen gemeinsam erzeugt. Womit also auch dein erster Show-Form-Versuch:

frmnew.Show; so dann eigentlich korrekt gewesen wäre. Dein aktueller Versuch, die Form dynamisch mittels

Tfrmnew.Create(self).Show; zu erzeugen, ist jedoch eher falsch, weil du danach bei jedem neuen Click auf den cmdNew-Button (den nehm ich jetzt mal an) dann nämlich immer wieder eine neue solche Form erzeugen würdest, ohne eine alte solche davor überhaupt noch freigeben zu können. Hierzu hättest du den Ptr "frmnew" bei der Erzeugung der Form nämlich zuerst entsprechend mit laden müssen:

Delphi-Quellcode:
frmnew := Tfrmnew.Create(self);
// danach dann event: frmnew.Show;
um dann nachher irgendwann diese wieder mittels der Free-Methode freigeben zu können:

frmnew.free; (Solltest du jedoch die wahrscheinlich irgendwie verloren gegangene erste Zeile oben wieder reinstallieren wollen, dann brauchst du jetzt kein eigenes Free'n dieser Form mehr auszuführen (wird dann beim Ende der Application automatisch erledigt)) usw. usf... *g*
MfG (& Thx ggf.)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:28 Uhr.
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