AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Daten von einem Formular in ein anderes übernehmen
Thema durchsuchen
Ansicht
Themen-Optionen

Daten von einem Formular in ein anderes übernehmen

Ein Thema von KRM · begonnen am 6. Mai 2007 · letzter Beitrag vom 10. Mai 2007
Antwort Antwort
Seite 1 von 2  1 2      
KRM

Registriert seit: 6. Feb 2007
Ort: Kölle am Rhing
24 Beiträge
 
Turbo Delphi für Win32
 
#1

Daten von einem Formular in ein anderes übernehmen

  Alt 6. Mai 2007, 17:48
Hallo,

ich habe da (mal wieder) eine Frage, zu der ihr bestimmt die Antwort kennt! ...

Es geht darum, dass ich 2 Formulare habe.
Das erste (Hauptformular) enthält eine Listbox in der Daten aus einer Datei stehen.

Diese Daten sind ein einfacher record mit diesem Format:

Delphi-Quellcode:
type
  IR_Rahmen = record
    name : string[50];
    geraeteaddy : string[5];
    befehl : string[7];
    beschreibung : string[150];
  end;
In der Listbox wird immer nur der String mit dem Namen angezeigt.
Nun geht es darum, dass ich die Möglichkeit schaffen will, dass ein Datensatz mit allen Parametern über ein seperates Formular geändert werden kann (siehe Anhang).

Hat jemand eine Idee, wie ich beim Aufruf des zweiten Formulars die Daten in die Edit-Felder bekomme?
Miniaturansicht angehängter Grafiken
form_168.jpg  
  Mit Zitat antworten Zitat
pacman1986

Registriert seit: 11. Feb 2005
Ort: Kirchhain
498 Beiträge
 
Delphi 2005 Personal
 
#2

Re: Daten von einem Formular in ein anderes übernehmen

  Alt 6. Mai 2007, 17:59
wenn du das record global anlegst kannst du darauf zugreifen wenn du die erste unit in die uses klausel der 2 unit schreibst
Christian N.
Designed to make a difference

najjaronline.de
  Mit Zitat antworten Zitat
Gremlin

Registriert seit: 18. Apr 2006
Ort: Im Süden
176 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Daten von einem Formular in ein anderes übernehmen

  Alt 6. Mai 2007, 18:12
Hallo,

na du kannst zb. eine class function in deiner Edit-Form definieren mit
Angabe des IR_Rahmen als Parameter oder ensprechend einzeln wenn gewünscht.
Als Rückgabewert gibst du einen Boolean zurück (True=ok und übernehmen, False=Werte verwerfen)

Damit es funktioniert sollte der Record in der Edit-Form bekannt sein. Wenn du das nicht
möchtest, dann nimmst du eben die Parameter einzeln, wird aber später wenn das Programm
einmal erweitert werden sollte, schnell unübersichtlich.


in der Edit-Form

Delphi-Quellcode:

type
  TEditForm = class
   [...]
  public
    class function Execute(var EditParam:IR_Rahmen):Boolean;
  end;

[...]

class function TEditForm.Execute(var EditParam:IR_Rahmen):Boolean;
begin
  with TEditForm.Create(Application) do begin
    <Editname>.Text := EditParam.Name;
    <Editgeraeteaddy>.Text := EditParam.geraeteaddy;
    [...]
    Result := (ShowModal=mrOK);
    if Result then begin
      EditParam.Name := <Editname>.Text;
      EditParam.geraeteaddy := <Editgeraeteaddy>.Text;
      [...]
    end;
  end;
end;

function TEditForm.FormClose...
begin
  if (ModalResult=mrOK) then begin
    // Hier die Werte prüfen auf plausibiblität
  end;
end;

und in der Hauptform wenn die Daten schon im Record stehen

Delphi-Quellcode:

  [...]
  if TEditForm.Execute(MyRecord) then begin
    // Daten übernehmen
  end;
  [...]
Gruss Gremlin
  Mit Zitat antworten Zitat
KRM

Registriert seit: 6. Feb 2007
Ort: Kölle am Rhing
24 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Daten von einem Formular in ein anderes übernehmen

  Alt 6. Mai 2007, 18:25
hey cool,

das record war sowieso global und die beiden Formulare kannten sich auch, aber ich wusste nicht, dass man so einfach drauf zugreifen kann...

ok, das Problem ist allerdings noch nicht gelöst.

Denn wenn ich das neue Formular öffne, zeigt er mir immer das erste Element aus der ListBox an und nicht das, welches ich zuletzt angeklickt habe.


Kann es damit zusammen hängen, dass beim Schließen des Formulars eine Funktion aufgerufen wird, die die Listbox neu füllt und die erste Zeile dabei markiert?
(es mag sein, dass ich vllt um zu viele Ecken denke, aber ich denke dabei irgendwie, dass der Code, der beim FormDestroy ausgeführt werden soll, vllt schon intern vorher ausgeführt wird o_O)...
  Mit Zitat antworten Zitat
KRM

Registriert seit: 6. Feb 2007
Ort: Kölle am Rhing
24 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Daten von einem Formular in ein anderes übernehmen

  Alt 6. Mai 2007, 18:32
@gremlin:

Ich probiers gleich mal.
Danke
  Mit Zitat antworten Zitat
KRM

Registriert seit: 6. Feb 2007
Ort: Kölle am Rhing
24 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Daten von einem Formular in ein anderes übernehmen

  Alt 7. Mai 2007, 11:27
Es funktioniert leider nicht, gremlin ...

Hier mal der komplette code des Formulars:

Delphi-Quellcode:
unit rahmen_aendern;

interface

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

type
  TForm5 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Memo1: TMemo;
    Label4: TLabel;
    Button1: TButton;
    Button2: TButton;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    class function Execute(var EditParam:IR_Rahmen):Boolean;
  end;

type
  IR_Rahmen = record
    name : string[50];
    geraeteaddy : string[5];
    befehl : string[7];
    beschreibung : string[150];
  end;

var
  Form5: TForm5;

implementation

{$R *.dfm}


//class function TForm5.Execute(var EditParam:IR_Rahmen):Boolean;
//-> FEHLER: Deklaration von 'Execute' unterscheidet sich von vorheriger Deklaration
class function Execute(var EditParam:IR_Rahmen):Boolean;
begin
  with Form5.Create(Application) do begin
    Edit1.Text := EditParam.Name;
    Edit2.Text := EditParam.geraeteaddy;
    Edit3.Text := EditParam.befehl;
    Memo1.Text := EditParam.beschreibung;
    Result := (ShowModal=mrOK);
    if Result then begin
      EditParam.Name := Edit1.Text;
      EditParam.geraeteaddy := Edit2.Text;
      EditParam.befehl := Edit3.Text;
      EditParam.beschreibung := Memo1.Text;
    end;
  end;
end;

// OK-Button
procedure TForm5.Button1Click(Sender: TObject);
begin
  close; // Eigenschaft: ModalResult = mrOk
end;

// Abbrechen-Button
procedure TForm5.Button2Click(Sender: TObject);
begin
  close; // Eigenschaft: ModalResult = mrCancel
end;

procedure TForm5.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  if (ModalResult=mrOK) then begin
    // Hier die Werte prüfen auf plausibiblität
  end;
end;

end.
Wenn ich

class function TForm5.Execute(var EditParam:IR_Rahmen):Boolean; Bei der funktions-def. angebe kommt die Fehlermeldung:
Deklaration von 'Execute' unterscheidet sich von vorheriger Deklaration Wenn ich es dann so ändere, wie es oben steht ist die Fehlermeldung zwar weg, aber eine andere bleibt:

Delphi-Quellcode:
[Pascal Fehler] rahmen_aendern.pas(28): E2065 Ungenügende Forward- oder External-Deklaration: 'TForm5.Execute'
[Pascal Fataler Fehler] main.pas(109): F2063 Verwendete Unit 'rahmen_aendern.pas' kann nicht compiliert werden

Dabei wird mir dann die Zeile 28 knallrot angestrichen, also dort, wo die Deklaration von der function ist...

Was habe ich falsch gemacht?
Nebenbei noch die Frage: Kann ich die Button-proceduren so stehen lassen?
Ich habe bei den Buttons einfach die Eigenschaft ModalResult geändert.
Wird dann beim Schließen des Formulars automatisch der Wert des Buttons, dass gedrückt wurde zurück gegeben?

Die Plausibilitätsprüfungen habe ich im "IR-Rahmen erstellen"-Button über onKeyPress-Ereignisse gelöst.
  Mit Zitat antworten Zitat
Gremlin

Registriert seit: 18. Apr 2006
Ort: Im Süden
176 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Daten von einem Formular in ein anderes übernehmen

  Alt 7. Mai 2007, 13:14
Du darfst nur denselben Typ für alle Parameter verwenden. Werden mehrere gleiche Typen in unterschiedlichen Units definiert, dann sind diese trotzdem unterschiedlich.
Ich nehme mal an, das in deiner Main der Typ für den IR_Rahmen schon deklariert wurde.

Delphi-Quellcode:
type
    class function Execute(var EditParam:IR_Rahmen):Boolean;
  end;

type
  IR_Rahmen = record
    name : string[50];
    geraeteaddy : string[5];
    befehl : string[7];
    beschreibung : string[150];
  end;

var
  Form5: TForm5;

implementation
Du solltest diesen einfach rauslöschen und dann müsste alles funktionieren.
Gruss Gremlin
  Mit Zitat antworten Zitat
KRM

Registriert seit: 6. Feb 2007
Ort: Kölle am Rhing
24 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Daten von einem Formular in ein anderes übernehmen

  Alt 7. Mai 2007, 14:28
ok, es hat funktioniert.

Ich habe den record IR_Rahmen in einer komplett seperaten Unit geschrieben, die in allen anderen Formularen bei Bedarf eingbunden werden kann (mittels uses) ...

VIELEN DANK!!!!!!!!
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.029 Beiträge
 
Delphi XE3 Enterprise
 
#9

Re: Daten von einem Formular in ein anderes übernehmen

  Alt 7. Mai 2007, 16:15
TMemIni ..
Martin Schaefer
Phaeno
  Mit Zitat antworten Zitat
KRM

Registriert seit: 6. Feb 2007
Ort: Kölle am Rhing
24 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Daten von einem Formular in ein anderes übernehmen

  Alt 10. Mai 2007, 14:58
Hmmm...

es hat sich doch noch ein Problem ergeben...

Und zwar:

Delphi-Quellcode:
procedure TForm5.FormClose(Sender: TObject; var Action: TCloseAction);
var
  ok : BOOLEAN;
begin
  ok := true;
  if (ModalResult=mrOK) then begin
      // Editfelder die Standard-Windowfarbe verpassen
    Edit1.Color := clWindow;
    Edit2.Color := clWindow;
    Edit3.Color := clWindow;

    F_Message.Caption := '';
    ok := true;
    if length(Edit1.Text) < 2 then begin
      F_Message.Caption := F_Message.Caption +
                      '-> Der Name muss mindestens 2 Zeichen lang sein.'#13#10;
      Edit1.Color := clYellow;
      ok := false;
    end;
    if length(Edit2.Text) < 5 then begin
      F_Message.Caption := F_Message.Caption +
                      '-> Die Geräte-Adresse muss mindestens 5 Zeichen lang sein.'#13#10;
      Edit2.Color := clYellow;
      ok := false;
    end;
    if length(Edit3.Text) < 7 then begin
      F_Message.Caption := F_Message.Caption +
                      '-> Der Befehl muss mindestens 7 Zeichen lang sein. ';
      Edit3.Color := clYellow;
      ok := false;
    end;

  end;
end;
ist der Code, wenn der Benutzer den "übernehmen"-Button anklickt und das Formular geschlossen wird.
Nun sollen ja dort die eingaben überprüft werden.
Wie bewirke ich denn, dass bei falschen Eingaben das Formular geöffnet bleibt?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 18:50 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