problem z Delphi..dwa pola Edit w Kalkulatorze

Anahita
Użytkownik
Użytkownik
Posty: 2
Rejestracja: 20 paź 2008, o 15:59
Płeć: Kobieta
Lokalizacja: Zamość
Podziękował: 1 raz

problem z Delphi..dwa pola Edit w Kalkulatorze

Post autor: Anahita »

witam,
jak w temacie mam problem z polami Edit w Delphi. Zaznaczam, że jestem początkującym programistą i robię wszystko na czuja, niestety...

Za zadanie miałam napisać kalkulator z klawiaturką i dwoma Editami (jeden dla zmiennej a drugi dla zmiennej b). Jak się można domyśleć wartości w pole Edit1 i Edit2 maja być wprowadzane z tej klawiaturki. Wydawałoby się proste, jednak po napisaniu procedury, jaką nam podano na zajęciach i uruchomieniu, wypełnia mi tylko pole Edit2, zamiast zacząć od pola Edit1 i po kliknięciu w pole Edit2 wypełniać pole Edit2 (bo taki był zamiar).

Robiłam modyfikacje procedury, jednak wypełniało mi wtedy tylko z kolei pole Edit1, a mimo kliknięcia w pole Edit2 i mrugającego tam kursora nadal wypełniało pole Edit1 a Edit2 pozostawało puste :/.

Inna modyfikacja w rezultacie wypełniała oba pola na raz. Nie wiem co robię źle, nie wiem czemu podany przez prowadzącego kod nie działa. Niestety zajęcia wyglądają jak wyglądają i do wszystkiego musimy dochodzić sami a w necie na ten temat nic nie znalazłam. Proszę o pomoc

mój kod dla grupy Buttonów (klawiaturki) wygląda tak:

procedure TForm1.Button3Click(Sender: TObject);

var
ak: integer ;
s : string;

begin

if sender=Edit1 then
ak:=1
else
ak:=2;

if ak=1 then
s:=Edit1.Text
else
s:=Edit2.Text;
s:=s+TButton(sender).Caption;

if ak=1 then
Edit1.Text:=s
else
Edit2.Text:=s
end;

w razie potrzeby wkleję więcej. Dzięki
smiechowiec
Użytkownik
Użytkownik
Posty: 374
Rejestracja: 21 cze 2007, o 11:28
Płeć: Mężczyzna
Lokalizacja: Łostowice
Pomógł: 146 razy

problem z Delphi..dwa pola Edit w Kalkulatorze

Post autor: smiechowiec »

Problem tkwi w tym że sender przy kliknięciu przycisku odnosi się do tego przycisku a nie do pola edit.
Logicznie należałoby więc stworzyć procedurę która ustali aktywny edit przy wejściu lub opuszczeniu go przez kursor - zdarzenia OnEnter lub OnExit.
Potem procedurę podczepiamy do obu editów.
Natomias wszytskim buttonom do zdarzenia OnClick podczepiamy procedurę ButtonClick.
Przykładowo

Kod: Zaznacz cały

unit calc01;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure OnFocusGaind(Sender: TObject);
    procedure ButtonClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  aktualny_edit : TObject;

implementation

{$R *.dfm}



procedure TForm1.ButtonClick(Sender: TObject);
begin
   (aktualny_edit as TEdit).Text := (aktualny_edit as TEdit).Text + (Sender as TButton).Caption;
   (aktualny_edit as TEdit).SetFocus;
end;


procedure TForm1.FormShow(Sender: TObject);
begin
  aktualny_edit := Edit1;  // Ustwienie wartości poczatkowej
end;

procedure TForm1.OnFocusGaind(Sender: TObject);
begin
  aktualny_edit := Sender;
end;

end.

Kod: Zaznacz cały

object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 294
  ClientWidth = 562
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  OnShow = FormShow
  PixelsPerInch = 96
  TextHeight = 13
  object Edit1: TEdit
    Left = 80
    Top = 32
    Width = 121
    Height = 21
    TabOrder = 0
    OnEnter = OnFocusGaind
  end
  object Edit2: TEdit
    Left = 224
    Top = 32
    Width = 121
    Height = 21
    TabOrder = 1
    OnEnter = OnFocusGaind
  end
  object Button1: TButton
    Left = 96
    Top = 72
    Width = 25
    Height = 25
    Caption = '1'
    TabOrder = 2
    OnClick = ButtonClick
  end
  object Button2: TButton
    Left = 127
    Top = 72
    Width = 25
    Height = 25
    Caption = '2'
    TabOrder = 3
    OnClick = ButtonClick
  end
  object Button3: TButton
    Left = 158
    Top = 72
    Width = 25
    Height = 25
    Caption = '3'
    TabOrder = 4
    OnClick = ButtonClick
  end
end
Anahita
Użytkownik
Użytkownik
Posty: 2
Rejestracja: 20 paź 2008, o 15:59
Płeć: Kobieta
Lokalizacja: Zamość
Podziękował: 1 raz

problem z Delphi..dwa pola Edit w Kalkulatorze

Post autor: Anahita »

Dzięki wielkie w końcu zadziałało jak trzeba . Brakowało mi dokładnie tego co napisałeś głównie zdarzenia OnEnter/OnExit:).
Pozdrawiam
ODPOWIEDZ