Delphi: Μεταφορά τιμής από τη μια φόρμα σε μία άλλη

Συζητήσεις σχετικές με την Delphi και την πρόγονη της Pascal

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Άβαταρ μέλους
sijoune
Δημοσιεύσεις: 16
Εγγραφή: 12 Δεκ 2010 21:09

Delphi: Μεταφορά τιμής από τη μια φόρμα σε μία άλλη

Δημοσίευση από sijoune » 14 Δεκ 2010 02:13

Θέλω να μεταφέρω την τιμή μίας μεταβλήτης από μία φόρμα σε μια άλλη.
Η μεταβλητή αυτή είναι η hour.
Για να μπορεσω να επιβεβαιώσω τη μεταφορά έχω βάλει ένα κουμπάκι στην δευτερη φόρμα και όταν το πατάω θέλω να μου εμφανίζει την τιμή που έχω δώσει από την πρώτη φόρμα.

Ορίστε ο κώδικας της πρώτης.

Κώδικας: Επιλογή όλων

unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, jpeg, ExtCtrls, StdCtrls, Menus, ActnList, ImgList, Buttons;

type
  TCafeBarForm = class(TForm)
    BitBtn1: TBitBtn;
    Image21: TImage;
    Image22: TImage;
    MainMenu1: TMainMenu;
    sda1: TMenuItem;
    N1: TMenuItem;
    N5: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    N4: TMenuItem;
    BitBtn2: TBitBtn;
    Panel1: TPanel;
    Image1: TImage;
    BitBtn3: TBitBtn;
    StaticText1: TStaticText;
    StaticText2: TStaticText;
    StaticText3: TStaticText;
    StaticText4: TStaticText;
    StaticText5: TStaticText;
    StaticText6: TStaticText;
    procedure ActionExitExecute(Sender: TObject);
    procedure N3Click(Sender: TObject);
    procedure N4Click(Sender: TObject);
    procedure hourButtonClick(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure BitBtn3Click(Sender: TObject);
    procedure N5Click(Sender: TObject);
  private
    { Private declarations }

  public
    { Public declarations }

  hour: Integer;

  end;

var
  CafeBarForm: TCafeBarForm;
  

implementation

uses
  Unit5,Unit1;

{$R *.dfm}

// procedures





// Events


procedure TCafeBarForm.ActionExitExecute(Sender: TObject);
 begin
  if MessageDlg( 'Åßóôå óßãïõñïò üôé èÝëåôå íá öýãåôå áðü ôï Cafe-Bar;',
   mtWarning,mbOKCancel,-1) = 1 then
    Hide;
  with TMainForm.Create(self) do
   begin
    ShowModal;
   end;
  Show;
 end;

procedure TCafeBarForm.N3Click(Sender: TObject);
begin
  ShowMessage('Ç þñá åéíáé ñõèìéóìÝíç óå : Ðñùß - Áðüãåõìá');
  hour := 0
end;

procedure TCafeBarForm.N4Click(Sender: TObject);
begin
      ShowMessage('Ç þñá åéíáé ñõèìéóìÝíç óå : ÂñÜäõ');
      hour := 1
end;

procedure TCafeBarForm.hourButtonClick(Sender: TObject);
begin
  ShowMessage(IntToStr(hour)) ;

end;

procedure TCafeBarForm.BitBtn2Click(Sender: TObject);
begin
  if (hour=0) then
    ShowMessage('Ç þñá åéíáé ñõèìéóìÝíç óå : Ðñùß - Áðüãåõìá')
   else
    ShowMessage('Ç þñá åéíáé ñõèìéóìÝíç óå : ÂñÜäõ');
end;



procedure TCafeBarForm.BitBtn3Click(Sender: TObject);
begin
   Hide;
  with TSit.Create(self) do
   begin
    ShowModal;
   end;
  Show;
end;

procedure TCafeBarForm.N5Click(Sender: TObject);
begin
Hide;
  with TMainForm.Create(self) do
   begin
    ShowModal;
   end;
  Show;
end;

end.
Ορίστε και ο κώδικας της δεύτερης.

Κώδικας: Επιλογή όλων

unit Unit7;

interface

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

type
  TPreOrder = class(TForm)
    Image1: TImage;
    Panel1: TPanel;
    Button1: TButton;
    Button2: TButton;
    StaticText1: TStaticText;
    StaticText2: TStaticText;
    BitBtn2: TBitBtn;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  PreOrder: TPreOrder;

implementation

uses
    Unit6,Unit2;

{$R *.dfm}

procedure TPreOrder.Button2Click(Sender: TObject);
begin
    Close;
end;

procedure TPreOrder.Button1Click(Sender: TObject);
begin
   Hide;
  with TMenu1.Create(self) do
   begin
    ShowModal;
   end;
  Show;
end;

procedure TPreOrder.BitBtn2Click(Sender: TObject);
begin
    {if (CafeBarForm.hour=0) then
    ShowMessage('0')
   else
    ShowMessage('1'); }
end;

end.
Στην πρώτη φόρμα δήλωσα την ζητούμενη μεταβλητή hour ως public ωστε να έιναι οράτη και σε άλλη φόρμα. Όμως δεν καταφερα να κάνω κάτι.

Στη δεύτερη φόρμα έχω βάλει σε σχόλια τον κώδικα για το κουμπάκι που έχω για επαλήθευση.

Ευχαριστω εκ των προτέρων.

taazz
Δημοσιεύσεις: 2
Εγγραφή: 28 Μάιος 2008 16:02

Delphi: Μεταφορά τιμής από τη μια φόρμα σε μία άλλη

Δημοσίευση από taazz » 20 Ιαν 2011 15:20

sijoune έγραψε:Θέλω να μεταφέρω την τιμή μίας μεταβλήτης από μία φόρμα σε μια άλλη.
Η μεταβλητή αυτή είναι η hour.
Για να μπορεσω να επιβεβαιώσω τη μεταφορά έχω βάλει ένα κουμπάκι στην δευτερη φόρμα και όταν το πατάω θέλω να μου εμφανίζει την τιμή που έχω δώσει από την πρώτη φόρμα.

Ορίστε ο κώδικας της πρώτης.
[snip......]

Στην πρώτη φόρμα δήλωσα την ζητούμενη μεταβλητή hour ως public ωστε να έιναι οράτη και σε άλλη φόρμα. Όμως δεν καταφερα να κάνω κάτι.

Στη δεύτερη φόρμα έχω βάλει σε σχόλια τον κώδικα για το κουμπάκι που έχω για επαλήθευση.

Ευχαριστω εκ των προτέρων.
2 τραγικά λάθη που βλέπω και νομίζω ότι θέλουν δουλειά
1) χρησιμοποιείς την global μεταβλήτη της φόρμας CafeBarForm σαν να είσαι σίγουρος ότι παίρνει τιμή. Να υπενθυμίσω ότι αυτή η μεταβλητή χρησιμοποιήται από τον κώδικα του project μόνο εάν η φόρμα γίνεται create αυτόματα. Σε κάθε άλλη περίπτωση πρέπει εσύ να της δώσεις τιμή και καθώς μπορεί να κρατήσει την τιμή μόνο 1 φορμας κάθε φορά οι περισσότεροι την διαγράφουν ή δεν την χρησιμοποιούν καθόλου

2) η TMainform εαν υποθέσω ότι είναι η κύρια φορμα της εφαρμογής όπως αφήνει να ενοηθεί το όνομα της είναι ήδη ενεργή για πιο λόγο φτιάχνει και 2η στην μνήμη?

Τώρα για το θέμα σου.

από την στιγμή που η φόρμα CafeBarForm κάνει create την TMainForm καλό είναι να περάσης τον δείκτη της στην main και να ελέγχεις βάση αυτού και όχι τη global μεταβλητής.

Εν ολίγης σιγουρέψου ότι η μεταβλητή που χρησιμοποιείς δήχνει στην φόρμα που ελέγχεις για την τιμή hour ή πέρασε την φόρμα που θες να ελέγξεις σαν μεταβλητή στην φόρμα που ελέγχει.

Απάντηση

Επιστροφή στο “Delphi, Pascal”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης