AGB  ·  Datenschutz  ·  Impressum  







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

Problem bei weiterleiten nach Unit 2

Ein Thema von DutchmanTom · begonnen am 12. Okt 2009 · letzter Beitrag vom 12. Okt 2009
Antwort Antwort
DutchmanTom

Registriert seit: 12. Okt 2009
11 Beiträge
 
#1

Problem bei weiterleiten nach Unit 2

  Alt 12. Okt 2009, 15:36
Hi leuts,
bin im Moment dabei ein Adressbuch zu programieren (per VCL-Anwendung).

Nun habe ich beschlossen, die TEdit-Felder für dass hinzufügen einer Adresse in eine eigene Unit aus zu gliedern, damit nit der ganze Wulst von Anzeige, Hinzufügen und Suchen in einer Form drin ist.

Das Problem ist nur dass jedes mal, wenn ich auf den Button klicke, der die Form mit den Hinzufügen öffnen soll, eine Fehlermeldung über eine Zugriffsverletzung kommt.

Ich Schrieb euch unten mal den Quellcode hin, der für die Weiterleitug und die Verarbeitung sorgen soll.

ich hoffe ihr könnt mit Helfen

gruß
DutchmanTom

Delphi-Quellcode:
procedure TForm1.BtnHinzuClick(Sender: TObject);
begin
  Form2.show;
  if Form2.showmodal=mrok then
    begin
    AdresseAnlegen(EdVorname.Text, EdNachname.Text, EdJob.Text, EdStrasse.Text,
                   EdOrt.Text, EdTelefon.Text);
    end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#2

Re: Problem bei weiterleiten nach Unit 2

  Alt 12. Okt 2009, 15:41
Telefonbuch? Deja'vu... egal...wo genau kommt denn die Fehlermeldung und kann es sein, dass du das Formular quasi zwei mal öffnest? einmal mit Form2.show und dann nochmal mit form2.showmodal?
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.611 Beiträge
 
#3

Re: Problem bei weiterleiten nach Unit 2

  Alt 12. Okt 2009, 15:42
Du kannst das Form nicht erst nicht-Modal anzeigen (.Show) und dann das bereits angezeigte Form nochmal Modal anzeigen (.ShowModal).

Und dann ist das zugreifen auf Elemente des anderen Forms auch nicht wirklich sauber.

Ich würde das so machen:
Delphi-Quellcode:
var inputForm: TForm2;
var AdressDaten: TAdressDatenRecord;
begin
  inputForm := TForm2.Create(AdressDaten);
  try

    if inputForm.ShowModal = mrOk then
    begin
      AdresseAnlegen(AdressDaten);
    end;

  finally
    FreeAndNil(inputForm);
  end;

end;
Wobei Adressdaten ein Record ist, der alle Adressfelder besitzt, die Du derzeit einzeln übergibst.
Form2 füllt bei einem Klick auf okay diesen Record (der im Constructor schon übergeben wird) mit den Daten aus den Input-Feldern.

Das hat dann auch noch gleich den Vorteil, dass Dein Code die Felder im Form zwei gar nicht kennen muss.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
DutchmanTom

Registriert seit: 12. Okt 2009
11 Beiträge
 
#4

Re: Problem bei weiterleiten nach Unit 2

  Alt 12. Okt 2009, 15:57
Danke für deine Version, ich habe sie mal eingebaut und Delphi mekert zumindest mien compilieren mal nicht ^^

Jetzt ist aber auf einmal ein anderes Problem aufgetreten.

Nämlich wird beim Compilieren in der Zeile
procedure TForm1.LBAdressenClick(Sender: TObject); das "TForm1" unterstrichen und ich bekomme die Meldung
Zitat:
Unbekannte Direktive 'TForm1'
Was mich daran stört ist, dass ich an dieser stelle überhaupt nix gemacht habe.
Das einzige was ich gemacht habe war, meine Version durch die oben genannte zu ersetzen.

Versteht das einer?

mfg
Tom
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#5

Re: Problem bei weiterleiten nach Unit 2

  Alt 12. Okt 2009, 16:00
Hast du vielleicht oberhalb von der Stelle den Code von Phoenix eingebaut, und evtl irgendwie ein "end;" vergessen oder den procedure-kopf?

So wie Phoenix es gemacht hat, kann man es machen...man muss es aber nicht, ich finde es gerade für Anfänger sinnvoller, wenn Form2 zum Programmstart erstellt wird, und der Programmierer es einfach mit form2.showmodal aufruft, anstatt jedes mal eine neue Instanz von Form2 zu erstellen und hinterher wieder zu löschen

Evtl reicht es also, wenn du deinen Originalcode wieder hernimmst und einfach das "form2.show;" entfernst...
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
DutchmanTom

Registriert seit: 12. Okt 2009
11 Beiträge
 
#6

Re: Problem bei weiterleiten nach Unit 2

  Alt 12. Okt 2009, 16:03
ok, es hat wirklich das "end;" gefehlt.

nur bekomm ich jetz bei beiden versionen (phönix / alleinherrscher) wieder die zugriffsverletzung sobald ich das 2. fenster starten will
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#7

Re: Problem bei weiterleiten nach Unit 2

  Alt 12. Okt 2009, 16:18
Ist die Form2 denn am Programmstart erstellt worden? Also steht in der Project1.dpr datei ein "Application.CreateForm(TForm2, Form2);"?
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
DutchmanTom

Registriert seit: 12. Okt 2009
11 Beiträge
 
#8

Re: Problem bei weiterleiten nach Unit 2

  Alt 12. Okt 2009, 16:21
mienste das hier?

Delphi-Quellcode:
uses
  Forms,
  Unit1 in 'Unit1.pas{Form1},
  Unit2 in 'Unit2.pas{Form2};
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#9

Re: Problem bei weiterleiten nach Unit 2

  Alt 12. Okt 2009, 16:25
Fast...n bisschen weiter unten müssten form1 und form2 erstellt werden:

Delphi-Quellcode:
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); //das hier
  Application.Run;
end.
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
DutchmanTom

Registriert seit: 12. Okt 2009
11 Beiträge
 
#10

Re: Problem bei weiterleiten nach Unit 2

  Alt 12. Okt 2009, 17:58
Mit der lieben Hilfe des Chefs der Firma wo ich Praktikum mache, ist jetzt endlich eine funktionierende Variant bei herrausgekommen

Quellcode in der Hauptform:
Delphi-Quellcode:
procedure TForm1.BtnHinzuClick(Sender: TObject);
var aForm: TForm2;
begin
  try
    aForm := TForm2.Create(self);
    if aForm.showmodal=mrOK then
      begin
       AdresseAnlegen(aForm.Vorname, aForm.Nachname, aForm.Job, aForm.Strasse,
                      aForm.Ort, aForm.Telefon);
      end;
  finally
    aForm.Free;
  end;
end;

Dazugehöhriger Code der Nebenform:
Delphi-Quellcode:
procedure TForm2.BtnHinzuClick(Sender: TObject);
begin
  if MessageDlg('Soll die Adresskarte gespeichert werden?',
                mtConfirmation,[mbYes,mbNo], 0 ) = mrYes
    then
     begin
      vorname := EdVorname.Text;
      Nachname := EdNachname.Text;
      Job := EdJob.Text;
      Strasse := EdStrasse.Text;
      Ort := EdOrt.Text;
      Telefon := EdTelefon.Text;
      self.ModalResult := mrOK;
     end
    else
     self.ModalResult := mrCancel;
end;
An dieser Stelle meine Dank an Phönix und Alleinherrscher

gruß
DutchmanTom
  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