Kezdőoldal » Számítástechnika » Programozás » Karakterek beszúrása probléma...

Karakterek beszúrása probléma delphiben, van rá megoldás?

Figyelt kérdé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;



2015. szept. 30. 15:32
1 2 3 4 5 6 7 8 9 10 ❯❯
 1/95 A kérdező kommentje:
Próbálgattam még a repatstring funkció helyett az Insert paranccsal és a copyval is, de sajnos azzal sem jártam eredménnyel.Cserélgettem össze-vissza minden számértéket és változót "+"-ról "-"-ra, osztottam, szoroztam, de mindezek után sem tudtam megoldani a feladatot sajnos.Legalább 2 napja gyötrődöm vele és nem jutok eredményre.Matematikailag pedig egyáltalán nem vagyok zseni hozzá.:(
2015. szept. 30. 15:49
 2/95 coopper ***** válasza:

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.

2015. szept. 30. 17:03
Hasznos számodra ez a válasz?
 3/95 SimkoL ***** válasza:
Azt is vizsgálni, felügyelni kell, hogy csak 122-őt és 123-at 'üthessen' be?
2015. szept. 30. 17:30
Hasznos számodra ez a válasz?
 4/95 A kérdező kommentje:

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-...

2015. szept. 30. 18:09
 5/95 A kérdező kommentje:
Kedves Simkol. Nem ez egyáltalán nem fontos, sőt az eredmények egymás után történő kiértékelése sem a feladat tárgya szerencsére:)) Köszönöm kérdésed.
2015. szept. 30. 18:11
 6/95 A kérdező kommentje:

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.

2015. szept. 30. 19:00
 7/95 A kérdező kommentje:
Viszont a műveleti karaktereket legalább jól írná ki egymás után az látszik.
2015. szept. 30. 19:02
 8/95 A kérdező kommentje:

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.

2015. szept. 30. 19:16
 9/95 A kérdező kommentje:
Csak sajna nem ez a feladat:(
2015. szept. 30. 19:18
 10/95 coopper ***** válasza:

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.

2015. szept. 30. 19:26
Hasznos számodra ez a válasz?
1 2 3 4 5 6 7 8 9 10 ❯❯

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!