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;
Szia.
Hát tényleg nem bonyolult, csak az "utóélete" lehet bonyolult, (csak akkor, ha enter megnyomásara nem csinál semmit csak berakja a számok után a jeleket, akkor két enter megnyomása esetén pl. mindenhol duplák lesznek a jelek, mivel a jelek kiszedéséről nem gondoskodik a program)
Én ezt hoztam össze :
procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
Var Hossz : longint ;
_ _ I _ _ : longint ;
_ _ Darab : string ;
begin
_ _ if Key=13 then begin
_ _ _ _ Hossz:=length (Form1.Edit1.Text);
_ _ _ _ I:=0;
_ _ _ _ while I<=Hossz do begin
_ _ _ _ _ _ I:=I+1;
_ _ _ _ _ _ if I>=3 then Darab:=copy (Form1.Edit1.Text,I-2,3);
_ _ _ _ _ _ if (I>=3) and (Darab='122') then begin
_ _ _ _ _ _ _ _ Form1.Edit1.Text:=copy (Form1.Edit1.Text,1,I)+'-'+copy (Form1.Edit1.Text,I+1,Hossz-1);
_ _ _ _ _ _ _ _ I:=I+1;
_ _ _ _ _ _ end ;
_ _ _ _ _ _ if (I>=3) and (Darab='123') then begin
_ _ _ _ _ _ _ _ Form1.Edit1.Text:=copy (Form1.Edit1.Text,1,I)+'+'+copy (Form1.Edit1.Text,I+1,Hossz-1);
_ _ _ _ _ _ _ _ I:=I+1;
_ _ _ _ _ _ end ;
_ _ _ _ _ _ Hossz:=length (Form1.Edit1.Text);
_ _ _ _ end ;
_ _ end ;
end;
Sok sikert.
üdv.
Sajnos az előző code sajnos nem működik jól. Betettem KeYup-ba, Keydown-ba, Enterbe és Keypressbe is, de ott sem úgy működött ahogy kell mert a 123+ után visszalépett a sor elejére és várta, hogy beírjam a következő értékeket és ezért nem sorban írta aszámokat egymás után a műveleti jelekkel együtt. Minden esetre köszönöm szépen:)
123+122-123+122-123+122-123+122-...
Pedig látszik ezen a példán, hogy működne jól, de eltörli a textboxot, miután bármelyik számot beírom a mezőbe.:(
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var s1,s2,x,y:string;
begin
x:=edit1.text;
y:=edit1.text;
if key=#13 then begin;
if pos('123',x)>0 then begin
s1:='+';
edit1.Text:=s1;
end;
if pos('122',y)>0 then begin
s2:='-';
edit1.Text:=s2;
end;
end;
end;
end.
Ez a source viszont tökéletesen működik, pl egy másik beírómezőbe történő kiirtással.
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var s1,s2,x,y,a,b:string;
begin
x:=edit1.text;
y:=edit1.text;
if key=#13 then begin;
a:='123';
if pos(a,x)>0 then begin
s1:='+';
edit1.Text:=s1;
edit2.selText:=a+s1;
end;
b:='122';
if pos(b,y)>0 then begin
s2:='-';
edit1.Text:=s2;
edit2.selText:=b+s2;
end;
end;
end;
end.
Szia.
Ha csak annyi a baj, hogy a kurzor a sor elejére ugrik enter benyomása után azt lehet orvosolni, viszont akkor még azt szeretném tudni, hogy hogyan is irom be a számokat :
122123122123 és Enter -> 122-123+122-123+ (ez lesz belőle)
vagy
122 Enter -> 122- aztán 122-123 Enter -> 122-123+ stb,stb
Mert nem mindegy szerintem.
Az Editorban a kurzor a következő módon mozgatható :
Form1.Edit1.SelLength:=0; // Nem biztos hogy kell mivel az editor ablakban történő kijelölés hosszát határozza meg
Form1.Edit1.SelStart:=I; // I a kurzor poziciója.
És az általam irt rutin, az általam felvetett első módszer esetén (123122123 + Enter) müködik (abban igazad van, hogy az enter megnyomása után a szöveg elejére ugrik) De ha beirod a következőt akkor jó lesz :
_ _ _ _ _ _ Hossz:=length (Form1.Edit1.Text);
_ _ _ _ end ;
_ _ _ _ Form1.Edit1.SelLength:=0;
_ _ _ _ Form1.Edit1.SelStart:=Hossz;
_ _ end ;
end;
Viszont mint már emlitettem ha a második módszerrel irom be számokat (123 Enter 122 Enter 123 Enter) akkor máshogyan kell megirni a programrészt, mivel igy a ruitin duplán fogja irni a matematikai jeleket (- és + jel)
Sok sikert.
Üdv.
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!