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;
Bocs, - erős a törköly felénk - egy ciklus:
procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
var honnan, i: integer;
seged, kell : string;
begin
if Key = 13 then
begin
seged := Edit1.Text;
Edit1.Text := '';
honnan := 1;
while honnan - 3 < Length(seged) do
begin
kell := '';
kell := Copy(seged, honnan, 3);
if (kell = '122') or (kell = '123') then
begin
honnan := honnan + 2;
if kell = '122' then Edit1.Text := Edit1.Text + kell + '-' else Edit1.Text := Edit1.Text + kell + '+';
end;
Inc(honnan);
end;
Edit1.SelStart := Length(Edit1.Text);
end;
end;
Szia #67-es hozzászóló :
A foráskódból kisebb átalakitással meg lehet valósitani azt, hogy 123 alatti illetve felett számokra irja a jeleket, azt hogy kalkulátor legyen belőle, ahhoz viszont már egy nagyobb lélegzetű átalakitás kell.
Mindegy nézzük a 123 as alatti feletti módositást :
Mivel több számról beszélünk (nem egy vagy kettőről), igy szövegel nem lehet összehasonlitani, ezért át kell alakitani számmá a darabot : Val (Darab1,Szam,Hiba).
Aztán a feltételben a Szam-ot kell vizsgálni és annak függvényében irni a jeleket.
Itt a foráskód a 122-nél kisebb számokra "-"-jelet ir a 123-nál nagyobb számokra "+" jelet ir.
A hátránya az, hogy nincs szürés - tehát csak számokat irhatsz be (SimkoL módszerével megoldható : #22 hozzászólás : procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['0'..'9', #8, #13]) then Key := #0;
end;
illetve mindig három karakterként kell beirni egy számot (tehát 1-et 001-ként kell beirni).
Kalkulátorkénti megoldásként, ha csak a + és - jelek játszanak zárójelek nélkül akkor végig kell menni a Edit1.Text-en kiszedni az első számot majd a műveleti jelet majd a második számot és elvégezni a műveletet.
Itt van ez is : [link]
Ahogy kipróbáltam müködött, de biztos van benne hiba.
Sok sikert.
üdv.
@SimkoL
Két ciklusban, nem, de egy ciklusban már kiegyezek veled (mivel egy ciklusban, kb azt irtad meg amit én is megirtam - nem néztem meg tüzetesebben - de gondolom nem nagy eltérés lehet a két megoldás között)
Ebből is következik, hogy nincs új a nap alatt.
Az hogy most segéd változóba pakolod a dolgokat, vagy Edit1.Text részét használom, mindenki ahogy szereti, Én igy Te úgy.
Üdv.
koszonom Coopper!van itt mit atnezni es tanulmanyozni kezdok szamara az biztos. :-) ugyanakkor SimkoL legutobbi peldajaba meg annyira sem tudtam kozben belekontarkodni mint a tiedbe.mintha versenyeznetek ki tudja furabban es bonyolultabban korulirni a kodot. SimkoL peldajanak a vege fele egy edit-be szerettem volna beletenni egy s valtozoval a 122-ot es akarhogy varialtam a "kell-el" es a "seged-del" igy pl, hogy
s:=edit1.text;
if s='122' then ....
vagy
s:=kell;
if s='122' then...
vagy
s:=seged;
if s='122' then...
es meg ossze-vissza vacakoltam a kisebb,nagyobb,nem egyenlo, kisebb-egyenlo, nagyobb egyenlo operatorokkal,meg a sztringbe eredetileg berogzitett '122'-es erteket sem tudtam szimulalni vele sehogy, csak ugy, ha
s:='122'-erteket irtam bele az s valtozoba
es a "kell-t" tettem egyenlove az "s"-el if kell=s modon. amilyen egyszeru olyan gyilkos ez a feladat az en laikus elmemnek.
azt nem ertem mitol ennyire erthetetlen szamomra.
adott ez a feladat tehat:
ha beirasra kerul egy textboxba,hogy 122,vagy alatti ertek + enter lenyomasa utan irjon a 122 utan egy "-" jelet,ha pedig 123 vagy feletti irjon "+" jelet, tehat
elmeletben...
s:=edit1.text;
if s<='122' then edit1.text:=s+'-';
if s>='123' then edit1.text:=s+'+';
if (s=0) or (s<0) then edit1.text:='';
igen am, csak hogy kozben teljes keresest kell vegezni az editboxban,hogy lekezelje azt vegtelen hosszusagban, ezt a pos,strpos,vagy posex fuggvennyel lehet mondjuk elso nekifutasra megoldani.tehat barhol szerepel a 122,vagy a 123, akkor irja utana a megfelelo jelet egy enter lenyomasaval.csakhogy figyelni kell azt is,hogy hol van a sor vege, hol a sor eleje, hol volt a sor vege es hol volt a sor eleje az aktualkis kurzortol szamitva es azt hogy a beirt ertek hosszusaga mennyi. talan pos, insert es delete fuggvenyekkel jobban ertheto lenne, mint a copyval, bar mar elbizonytalanodtam kisse.
Én vágólapra akarom másolni a szöveget majd azt beilleszteni, így oldjátok meg azt is. Ugyan úgy csak az a 2 szám szerepelhessen, + és - jelek legyenek beillesztve.
(Elsősorban a kód szépségére kell optimalizálni, majd ha az adott feladathoz lassú a program akkor elemezni és felturbózni)
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!