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
 11/95 coopper ***** válasza:

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.

2015. szept. 30. 19:40
Hasznos számodra ez a válasz?
 12/95 A kérdező kommentje:

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:-)

2015. szept. 30. 19:49
 13/95 A kérdező kommentje:

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.

2015. szept. 30. 19:58
 14/95 coopper ***** válasza:

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.

2015. szept. 30. 19:59
Hasznos számodra ez a válasz?
 15/95 A kérdező kommentje:
Viszont megnéztem és abban a formában, amiben te gondoltad és feltételezted abban tökéletesen működik valóban,csak itt az egyesével történő beírás lenne a lényeg.
2015. szept. 30. 20:01
 16/95 A kérdező kommentje:
Ez viszont tökéletes :-) Nagyon köszi!!! Azt hittem egyszerűbb megoldani a feladatot,de nem is olyan gyereksarok egyáltalán legalább is nekem nem tűnik annak.
2015. szept. 30. 20:09
 17/95 SimkoL ***** válasza:

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.

2015. szept. 30. 20:10
Hasznos számodra ez a válasz?
 18/95 A kérdező kommentje:
"A lányok angyalok!" meg főleg ha alszanak:-) Kíváncsivá tettél,jól jöhet egy másik, vagy legalább is számomra felfoghatóbb megoldás is.Cooperét is kezdem értelmezni,de neki is jó pár sorba beletelt mire megértettük egymást :)) szegény.Tényleg azt gondoltam 2 sor vagy max 3 sor lehet az egész és valamit elírtam, de közel sem erről van szó:-) elég kacifántos azért.
2015. szept. 30. 20:20
 19/95 A kérdező kommentje:
Bocsánat Copper!! Nem mindegy hogy réz vagy kádár.:(
2015. szept. 30. 20:22
 20/95 anonim ***** válasza:
Ez tiszta matek!Amiben írtad éppen nem vagy zseni:))) Pedig a programozáshoz elengedhetetlen a nemcsak némi matek tudás.
2015. szept. 30. 20:26
Hasznos számodra ez a válasz?

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!