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
 21/95 A kérdező kommentje:
Tudom.Majd rajta leszek:)
2015. szept. 30. 20:29
 22/95 SimkoL ***** válasza:

Ehhez mit szólsz ?


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

begin

if not (Key in ['1'..'3', #8, #13]) then Key := #0;

end;


procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word;

Shift: TShiftState);

begin

if Key = 13 then

begin

Edit1.Text := StringReplace(Edit1.Text, '-', '', [rfReplaceAll]);

Edit1.Text := StringReplace(Edit1.Text, '+', '', [rfReplaceAll]);

Edit1.Text := StringReplace(Edit1.Text, '122', '122-', [rfReplaceAll]);

Edit1.Text := StringReplace(Edit1.Text, '123', '123+', [rfReplaceAll]);

Edit1.SelStart := Length(Edit1.Text);

end;

end;

2015. szept. 30. 20:34
Hasznos számodra ez a válasz?
 23/95 A kérdező kommentje:

Na ez zsír!!!:) és még rövidebb is sokkal.:)

A "StringReplace" paranccsal én is próbáltam, de tisztán látszik ide kell a KeyUp ahova be kell illeszteni ezek szerint én meg csak a Keypress-ben próbáltam mindent megcsinálni sajnos, ami hiba:(

2015. szept. 30. 20:42
 24/95 A kérdező kommentje:
Nagyon köszönöm a gyors segítséget!!! :) Nem jöttem volna rá egyedül még világ és két nap sem.:))
2015. szept. 30. 20:45
 25/95 SimkoL ***** válasza:
Néha jó az öreg a háznál :)
2015. szept. 30. 20:55
Hasznos számodra ez a válasz?
 26/95 A kérdező kommentje:
Ez így van! Csak az idősebbektől lehet tanulni és jó utakon haladni.Biztos elvacakolhattam volna vele még heteket, hónapokat is mire rájöttem volna,hogy két különböző eljárás kell hozzá mindenképpen és persze az sem mindegy,mit hova kell illeszteni.
2015. szept. 30. 21:06
 27/95 SimkoL ***** válasza:
A karakter szűrést csak amiatt írtam bele, hogy ne legyen nagyon 'szemetes' a bevitel. Pár sorral megoldható lenne az is, hogy kidobjuk ami nem 122 és 123, de gondolom ez nem feladat :)
2015. szept. 30. 21:10
Hasznos számodra ez a válasz?
 28/95 A kérdező kommentje:
Igen értem.Az nem része a feladatnak.Meg az sem,hogy kiértékelje a végeredményt.Az már amúgy sem 3-4 sor lenne:))
2015. szept. 30. 21:26
 29/95 SimkoL ***** válasza:

De legyen itt a 'takarítós' verzió is :)


procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);

var i: byte;

begin

if Key = 13 then

begin

Edit1.Text := StringReplace(Edit1.Text, '-', '', [rfReplaceAll]);

Edit1.Text := StringReplace(Edit1.Text, '+', '', [rfReplaceAll]);

Edit1.Text := StringReplace(Edit1.Text, '122', '122-', [rfReplaceAll]);

Edit1.Text := StringReplace(Edit1.Text, '123', '123+', [rfReplaceAll]);

Edit1.Text := StringReplace(Edit1.Text, '122-', '###-', [rfReplaceAll]);

Edit1.Text := StringReplace(Edit1.Text, '123+', '###+', [rfReplaceAll]);

for i := 1 to 3 do Edit1.Text := StringReplace(Edit1.Text, IntToStr(i), '', [rfReplaceAll]);

Edit1.Text := StringReplace(Edit1.Text, '###-', '122-', [rfReplaceAll]);

Edit1.Text := StringReplace(Edit1.Text, '###+', '123+', [rfReplaceAll]);

Edit1.SelStart := Length(Edit1.Text);

end;

end;

2015. szept. 30. 21:26
Hasznos számodra ez a válasz?
 30/95 SimkoL ***** válasza:

... de ehhez meg kell tartani a karakter szűrést.

Össze is adjam neked a sort ? :)

2015. szept. 30. 21:29
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2025, 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!