Karakterek beszúrása probléma delphiben, van rá megoldás?
A segítségeteket szeretném kérni,mert elakadtam benne. Olyan progit kell írnom,ami két db számérték beírásakor, azaz 122 esetén egy "-" jelet ír a textboxba egy enter lenyomása után, 123 esetén pedig "+" jelet és ezt ismételgeti így a végtelenségbe, ebben a formában pl:
122-123+122-123+122-123+122-123+ stb...
vagy
123+122-123+122-123+122-123+122-123+ stb...
3 számjegyig sikerült megoldanom,de aztán sajnos rendesen elakadtam és bele is fáradtam sajnos.Azt feltételezem,hogy biztos nem lehet azért ördöngösség megoldani,de jelenleg fogalmam nincs miképpen lehetséges és mit hagytam figyelmen kívül.Az én megoldásom biztosan pocsék, ezért szeretném kérni hogy segítsetek benne,mert elfogyott a türelmem vele szórakozni.:))
Előre is köszi!
Az eddigi próbálkozásom:
unit karakterbeszur;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
var s:string;
implementation
{$R *.dfm}
function RepeatString(const s: string; count: cardinal): string;
var i:integer;
begin
for i := 1 to count do
Result := Result + s;
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var x:integer;
var y:integer;
begin
if key=#13 then begin
x:=length(edit1.text)+2;
y:=length(edit1.text)-2;
{x:=edit1.SelStart+2;
y:=edit1.selstart-2;}
if pos('123',edit1.text)>0 then begin
edit1.selText:=repeatstring('+',1);
s:=edit1.text;
delete(s,x+y,1);
edit1.Text:=s;
edit1.SelStart:=x-y div 4;
end;
if pos('122',edit1.text)>0 then begin
edit1.selText:=repeatstring('-',1);
s:=edit1.text;
delete(s,x-1,1);
edit1.Text:=s;
edit1.SelStart:=y+x * 4;
end;
end;
end;
A második módszer esetén ez a kód müködik :
procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
Var _ Hossz : longint ;
_ _ _ Darab : string ;
begin
_ _ if Key=13 then begin
_ _ _ _ Hossz:=length (Form1.Edit1.Text);
_ _ _ _ Darab:='';
_ _ _ _ if Hossz>=3 then Darab:=copy (Form1.Edit1.Text,Hossz-2,3);
_ _ _ _ if Darab='122' then begin
_ _ _ _ _ _ Form1.Edit1.Text:=Form1.Edit1.Text+'-';
_ _ _ _ _ _ Form1.Edit1.SelLength:=0;
_ _ _ _ _ _ Form1.Edit1.SelStart:=Hossz+1;
_ _ _ _ end ;
_ _ _ _ if Darab='123' then begin
_ _ _ _ _ _ Form1.Edit1.Text:=Form1.Edit1.Text+'+';
_ _ _ _ _ _ Form1.Edit1.SelLength:=0;
_ _ _ _ _ _ Form1.Edit1.SelStart:=Hossz+1;
_ _ _ _ end ;
_ _ end ;
end;
De ez is csak akkor müködik "tökéletesen" ha mindig az editor ablak végére irod be a számokat és nyomod az enter. Há átmész javitó üzemmódba ( pl. : 123+122-124122- és a 124-ét átjavitod 122-re vagy 123-ra (plusz Enter)) akkor nem müködik, mivel akkor nem teszi be a matemetikai jelet.
Sok sikert.
üdv.
Sajna továbbra sem működik jól:(
Tehát az a lényeg hogyha bármelyik számmal kezdem el a beírást,akkor azt is tudja követni a program
Beírom mondjuk
123
akkor írja utána hogy "+"
ha ezután a "+"-jel után beírom, hogy 122,
akkor írjon minuszt, ha megínt beírom, hogy 123
akkor utána megint írjon "+" jelet a 123 után.
Ha pedig ugyanezt a 122-vel kezdem el, akkor azt annak megfelelően írja ki, tehát
122
utána írjon "-"-jelet és ha
beírom, hogy 123, akkor írjon "+" jelet és ha megint beírom, hogy 122, akkor pedig írjon "-" jelet és így tovább. Az a lényeg bárhogy kezdem el a beírást, mindkét módszerrrel jól működjön. Az általam készített szemléltető forráskódban, ahol az edit2.text-ben mutatja be, hogy a program jól és miként működik, azon egyértelműen látszik, hogy mit szeretnék elérni.
Köszi:-)
Tehát nem egy tömeges számbevitel után írja jól ki a dolgokat, hanem egyesével.
Beütöm egyszer valamelyik számsort > ír műveleti jel, beütöm másik számsor > ír másik műveleti jel és így tovább, egymás után. Bepötyögök valami mást, nem ír semmilyen műveleti jelet, ami nem egyezik 122-vel, vagy 123-al.Erre szeretnék megoldást kérni.
AZ előző kód is igy müködik, legalább is nállam.
Miért nállad mit csinál ? Az az hogyan müködik ?
Mert az, hogy "Sajna továbbra sem működik jól:(" ebből nem tudom meg, hogy miért is nem jól müködik.
Mindegy.
Módositottam az első kódon most már javitó üzemmódban is is jól dolgozik (legalább is szerintem).
Kipróbáltam, ezeket irtam be (E=Enter) :
122 E > 122-
123 E > 122-123+
Kitöröltem az összeset és beirtam :
123 E > 123+
122 E > 123+122-
Elvileg igy kellene neki müködni-e nem ?
Itt a kód :
procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
Var _ Hossz : longint ;
_ _ _ I _ _ : longint ;
_ _ _ Darab1: string ;
_ _ _ Darab2: Char ;
begin
_ _ if Key=13 then begin
_ _ _ _ Hossz:=length (Form1.Edit1.Text);
_ _ _ _ I:=0;
_ _ _ _ while I<=Hossz do begin
_ _ _ _ _ _ I:=I+1;
_ _ _ _ _ _ Darab1:='';
_ _ _ _ _ _ Darab2:=#0;
_ _ _ _ _ _ if I>=3 then Darab1:=copy (Form1.Edit1.Text,I-2,3);
_ _ _ _ _ _ if I<=Hossz-1 then Darab2:=Form1.Edit1.Text[I+1];
_ _ _ _ _ _ if (I>=3) and (Darab1='122') and (not ((Darab2='-') or (Darab2='+'))) then begin
_ _ _ _ _ _ _ _ Form1.Edit1.Text:=copy (Form1.Edit1.Text,1,I)+'-'+copy (Form1.Edit1.Text,I+1,Hossz-1);
_ _ _ _ _ _ _ _ I:=I+1;
_ _ _ _ _ _ _ _ Form1.Edit1.SelLength:=0;
_ _ _ _ _ _ _ _ Form1.Edit1.SelStart:=I;
_ _ _ _ _ _ end ;
_ _ _ _ _ _ if (I>=3) and (Darab1='123') and (not ((Darab2='-') or (Darab2='+'))) then begin
_ _ _ _ _ _ _ _ Form1.Edit1.Text:=copy (Form1.Edit1.Text,1,I)+'+'+copy (Form1.Edit1.Text,I+1,Hossz-1);
_ _ _ _ _ _ _ _ I:=I+1;
_ _ _ _ _ _ _ _ Form1.Edit1.SelLength:=0;
_ _ _ _ _ _ _ _ Form1.Edit1.SelStart:=I;
_ _ _ _ _ _ end ;
_ _ _ _ _ _ Hossz:=length (Form1.Edit1.Text);
_ _ _ _ end ;
_ _ end ;
end;
Sok sikert.
üdv.
Elnézést, elleptek a lány unokáim, mindjárt megnézem, de kezdetnek:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['1'..'3', #8, #13]) then Key := #0;
end;
amivel kiszürjük az érvénytelen karaktereket.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!