Podział na litery i liczby tekstu w trakcie dzialania programu

0

Witam

Prawie osiągnąłem zamierzony cel, jest tylko mała nie prawidłowość, którą cieżko opisać. Mógłby ktoś spojrzeć na ten kod ? Z góry dzięki.

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Edit3: TEdit;
    Label2: TLabel;
    Label3: TLabel;
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
implementation

{$R *.dfm}

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin

if (key ='1') or
(key ='2') or
(key ='3') or
(key ='4') or
(key ='5') or
(key ='6') or
(key ='7') or
(key ='8') or
(key ='9') or
(key ='0') or
(key =' ') then edit2.text:=edit1.text else  edit3.text:=edit1.text
end;

end.
 

Dla lepszego obrazu kopia całego projectu do pobrania w załączniku.

2

Nagraj filmik, postaraj się opisać problem (dane wejściowe, spodziewane wyjście, otrzymane wyjście). Nie będę odpalał Delphi, żeby Ci pomóc.

Stawiam, że trzeba zmienić linijkę:

(key =' ') then edit2.text:=edit1.text else  edit3.text:=edit1.text

na coś w stylu:

(key =' ') then edit2.text:=edit2.text + Key else  edit3.text:=edit3.text + Key

Ale to nie uwzględnia zmiany tekstu w edit1. Musisz zrobić, żeby po wciśnięciu przycisku w edit1 algorytm usuwał zawartość edit2 i edit3 i potem przelatywał przez wszystkie literki w edit1 wstawiając je odpowiednio do edit2 lub edit3.

dodanie znaczników <code class="delphi"> - @furious programming

0

Zamiast drabinki orów wykorzystaj zbiory.
Plus nie zapomnij o tym, że przecież można zmienić pozycję kursora. Wtedy nie + key, tylko insert.
Plus jeszcze backspace.
Plus wklejanie ze schowka.

0

Kiedyś robiłem podobne rzeczy w pascalu, czy nawet w delphi konsolowym, w obiektowym jest trudniej, zwłaszcza jak program ma być wrażliwy na zmiany...

Także wiem co trzeba zrobić, ale jakich komend użyć i jak to napisać ..

0

Przede wszystkim brakuje wyzerowania parametru Key, jeśli podany w nim znak jest niedozwolony; No i samo przypisanie też jest złe, bo nie obejmuje nowo podanego znaku w Edit1;

Powinno być to zrealizowane mniej więcej w taki sposób:

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
const
  SUPPORTED_KEYS: set of Char = [' ', '0' .. '9'];
begin
  if Key in SUPPORTED_KEYS then
    Edit2.Text := Edit1.Text + Key
  else
    Key := #0;
end;

Dodatkowo dochodzi obsługa schowka, o czym wspomniał @Patryk27;

Tyle że nadal nie podałeś informacji na temat tych dodatkowych pól edycyjnych, czyli Edit2 i Edit3; Nie wiadomo do czego służą, jaką rolę spełniają i w ogóle po co one istnieją; Twój kod @Renewerek sugeruje, że do Edit2 ląduje zawartość Edit1 z obsługiwanym znakiem, a do Edit3 zawartość Edit1 z nieobsługiwanym znakiem;

Jeżeli przeznaczenie tych dwóch pól jest inne, to napisz do czego są one potrzebne.

1 użytkowników online, w tym zalogowanych: 0, gości: 1