Ĺadny brzuch
Mam napisac program w delphi, który zamienia zwykły tekst na hex. Otóz, mam zrobic dwa pola tekstowe, w jednym polu wpisujemy tekst, a w drugim ma się on zamienic na hex i jeżeli wpiszemy w polu hex to zamienia się od razu zawartośc pola tekstowego. Nie wiem jak zrobic aby jakbym wpisywał coś jako tekst to by się w drugim polu wpisywało jako hexy. Z góry dziękuje za pomoc
Mam napisac program w delphi, który zamienia zwykły tekst na hex. Otóz, mam zrobic dwa pola tekstowe, w jednym polu wpisujemy tekst, a w drugim ma się on zamienic na hex i jeżeli wpiszemy w polu hex to zamienia się od razu zawartośc pola tekstowego. Nie wiem jak zrobic aby jakbym wpisywał coś jako tekst to by się w drugim polu wpisywało jako hexy. Z góry dziękuje za pomoc Wlasciwosc onkeydown komponentu Edit?
Z tego co piszesz wnioskuje ze umiesz zamieniac, wiec wystarczy ze wstawisz odpowiedni kod w to zdarzenie.
Ja to bym zrobił tak: zaznacz Edit1 i w Object Inspektorze w zakładce Events znajdź onchange,wygeneruj nową metode,stwórz jakąś funkcje której jako argument przekarzesz tekst z Edit1 i będzie zwracała tekst zamieniony na hexa i w procedurze która sie domyślnie wygenerowała wpisz coś takiego Edit2.Text:=nazwa_funkcji(Edit1.Text);.Powinno zadziałać.Jak zadziała to napisz.Jak nie to daj znać może coś wymyśle innego.
Użytkownik Kamil1990 edytował ten post 08 styczeń 2007, 15:31
Wlasciwosc onkeydown komponentu Edit?
Z tego co piszesz wnioskuje ze umiesz zamieniac, wiec wystarczy ze wstawisz odpowiedni kod w to zdarzenie.
Właśnie za bardzo nie umiem zamieniac :/ ale wiem tylko teoretycznie jak to zrobic. Jak ktoś by to objaśnił jak dla początkującego to byłbym wdzięczny.
IntToHex(StrToInt(Edit1.text), length(Edit1.text) * 2);
powinno dzialac (pisane z glowy). No i oczywiscie proba wpisania jakiegokolwiek stringa skonczy sie bledem ;]
no dzięki, ale ktoś by powiedział gdzie je powklejac to byłbym wdzięczny. A z tego co tu piszecie to za dużo nie wiem :P Aj troszq źle się wyraziłem. Te pola to nie pola edit, ale mają byc memo i może byc wpisana większa porcja tekstu, a nie że 1 literka.
Użytkownik jajo87 edytował ten post 08 styczeń 2007, 16:08
kamil1990 ci napisal gdzie.
ok, zrobiłem to że jak wpisze do jednego okienka to wyświetla sie w drugim i odwrotnie. I jak by to zrobic żeby funkcja zamieniała z textu na hex i odwrotnie? Prosze o proste wytłumaczenie
Użytkownik jajo87 edytował ten post 09 styczeń 2007, 19:39
ok, zrobiłem to że jak wpisze do jednego okienka to wyświetla sie w drugim i odwrotnie. I jak by to zrobic żeby funkcja zamieniała z textu na hex i odwrotnie? Prosze o proste wytłumaczenie
Migajek w poście 7 napisał tobie o tym jak zamienić łańcuch na hex
IntToHex(StrToInt(Edit1.text), length(Edit1.text) * 2);
powinno dzialac (pisane z glowy). No i oczywiscie proba wpisania jakiegokolwiek stringa skonczy sie bledem ;]
Nie działa. Gdy próbuje wpisac obojętnie co, wyświetla się że nie jest to integer. Żadnej funkcji nie tworzyłem.
Użytkownik jajo87 edytował ten post 10 styczeń 2007, 18:58
Nie działa. Gdy próbuje wpisac obojętnie co, wyświetla się że nie jest to integer.
Dziala prawie idealnie. Polecam jednak zmienic to: length(Edit1.text) * 2 na cos innego bo nie potrzebujemy 6 znakow w hexie dla <100; 255> ;).
Migajek przecież napisał(nawet przytoczyłeś jego cytat), że wpisanie jakiegokolwiek stringa kończy się błędem :)
Przeciez wlasnie ma to byc jako tekst. Mają to byc pola, które można dowolnie edytowac, ich tekst i hexów i tekstu.
Użytkownik jajo87 edytował ten post 10 styczeń 2007, 19:04
Omg... A może zanim przypiszesz wartość Edit1.Text zamienisz Hex na String, co?... Ręce o(d)padają...
Poza tym, jak Ty chcesz wyświetlić wartość heksadycemalną (dobrze napisałem? :)) z jakiegoś tekstu? Można wyświetlić ją z jakiejś liczby, ale nie z tekstu...*
____
* - no wiem, że można znaki ASCII zamieniać na hex, ale to chyba nie o to chodzi...
Użytkownik pbnan edytował ten post 10 styczeń 2007, 19:07
pseudokod:
while i:=0 do edit1.text.length begin edit2.text := edit2.text + inttohex( int(edit1.text[i])/*niepamiętam jak sie rzutuje w delphi*/, 2/*długość tekstu 2 , bo z chara (256 wartości) więcej nie wyciśnie*/) end;
jakaś mieszanka delphi c/c++ (dawno nie kodziłem), ale moim zdaniem tak powinno to wyglądać
@pbnan: po pierwsze: hex to jest string!!!! :),
a po drugie: każdy znak ansi to jest liczba :)
a po trzecie: heksadecymalną
Użytkownik Radek edytował ten post 10 styczeń 2007, 19:36
pseudokod:
while i:=0 do edit1.text.length begin edit2.text := edit2.text + inttohex( int(edit1.text[i])/*niepamiętam jak sie rzutuje w delphi*/, 2/*długość tekstu 2 , bo z chara (256 wartości) więcej nie wyciśnie*/) end;
jakaś mieszanka delphi c/c++ (dawno nie kodziłem), ale moim zdaniem tak powinno to wyglądać
@pbnan: po pierwsze: hex to jest string!!!! :),
a po drugie: każdy znak ansi to jest liczba :)
a po trzecie: heksadecymalną
Dobrze, ale można dokładniej, ktoś kto sie zna plz, bo ten kodzik co podałes to nie wiem. To jak to najpierw zamienic na asci, a potem na hex, takie coś. zamienia tekst z lewej strony na asci i wyświetla to jako hex po prawej, takie coś.
Użytkownik jajo87 edytował ten post 12 styczeń 2007, 10:49
to > int(edit1.text[i]) zamienia na hmm "asci" - czyli litery na wartości int (czyba, że rzutuje się inaczej, ale ja nie pamiętam zobacz w helpie)
to > int(edit1.text[i]) zamienia na hmm "asci" - czyli litery na wartości int (czyba, że rzutuje się inaczej, ale ja nie pamiętam zobacz w helpie)
A nie chodzilo Ci o StrToInt(...) ?
Nie, nie chodzi mi o strtoint ponieważ strtoint zamieni tylko "znaki liczb" na int, a nie pobierze wartości binarnej ("asci") tego znaku:
Czyli strtoint "1" zamieni na 01h, a gdy podamy jako parametr "B" to wywali błąd, bo to nie liczba :D
Natomiast int("1") zostanie (mam nadzieje) zamienione na 31h (49 dziesiętnie) tak jak w tej tablicy
Użytkownik Radek edytował ten post 13 styczeń 2007, 08:34
const EMPTY_ERR= 1; HEX_ERR= 2; BIN_ERR= 100; procedure TForm1.HexToInteger(AString: string; var AValue, AError: integer); begin AError:=EMPTY_ERR; if length(AString)>1 then if LowerCase(AString[length(AString)])='h' then begin AString:='$'+copy(AString, 1, length(AString)-1); val(AString , AValue, AError); if AError<>0 then AError:=HEX_ERR; end; end; procedure TForm1.BinToInteger(AString: string; var AValue, AError: integer); var i: integer; ch: char; begin AError:=EMPTY_ERR; if length(AString)>1 then if LowerCase(AString[length(AString)])='b' then begin i:=1; AError:=0; AValue:=0; while (i<length(AString)) and (AError=0) do begin ch:=AString[length(AString)-i]; if ch='1' then AValue:=AValue + (1 shl (i-1)) else if ch<>'0' then AError:=BIN_ERR + i; inc(i); end; end; end; procedure TForm1.Button1Click(Sender: TObject); const n='jaka fala'; var v, e: integer; s: string; ch: char; begin s:=Edit1.Text; v:=0; if s<>'' then begin ch:=LowerCase(s)[length(s)]; if ch='b' then BinToInteger(s, v, e) else if ch='h' then HexToInteger(s, v, e) else begin val(s, v, e); if e<>0 then e:=-1; end; end; if e=0 then Label1.Caption:=IntToStr(v) else Label1.Caption:='blad '+ IntToStr(e); end;
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Mam napisac program w delphi, który zamienia zwykły tekst na hex. Otóz, mam zrobic dwa pola tekstowe, w jednym polu wpisujemy tekst, a w drugim ma się on zamienic na hex i jeżeli wpiszemy w polu hex to zamienia się od razu zawartośc pola tekstowego. Nie wiem jak zrobic aby jakbym wpisywał coś jako tekst to by się w drugim polu wpisywało jako hexy. Z góry dziękuje za pomoc Wlasciwosc onkeydown komponentu Edit?
Z tego co piszesz wnioskuje ze umiesz zamieniac, wiec wystarczy ze wstawisz odpowiedni kod w to zdarzenie.
Ja to bym zrobił tak: zaznacz Edit1 i w Object Inspektorze w zakładce Events znajdź onchange,wygeneruj nową metode,stwórz jakąś funkcje której jako argument przekarzesz tekst z Edit1 i będzie zwracała tekst zamieniony na hexa i w procedurze która sie domyślnie wygenerowała wpisz coś takiego Edit2.Text:=nazwa_funkcji(Edit1.Text);.Powinno zadziałać.Jak zadziała to napisz.Jak nie to daj znać może coś wymyśle innego.
Użytkownik Kamil1990 edytował ten post 08 styczeń 2007, 15:31
Wlasciwosc onkeydown komponentu Edit?
Z tego co piszesz wnioskuje ze umiesz zamieniac, wiec wystarczy ze wstawisz odpowiedni kod w to zdarzenie.
Właśnie za bardzo nie umiem zamieniac :/ ale wiem tylko teoretycznie jak to zrobic. Jak ktoś by to objaśnił jak dla początkującego to byłbym wdzięczny.
IntToHex(StrToInt(Edit1.text), length(Edit1.text) * 2);
powinno dzialac (pisane z glowy). No i oczywiscie proba wpisania jakiegokolwiek stringa skonczy sie bledem ;]
no dzięki, ale ktoś by powiedział gdzie je powklejac to byłbym wdzięczny. A z tego co tu piszecie to za dużo nie wiem :P Aj troszq źle się wyraziłem. Te pola to nie pola edit, ale mają byc memo i może byc wpisana większa porcja tekstu, a nie że 1 literka.
Użytkownik jajo87 edytował ten post 08 styczeń 2007, 16:08
kamil1990 ci napisal gdzie.
ok, zrobiłem to że jak wpisze do jednego okienka to wyświetla sie w drugim i odwrotnie. I jak by to zrobic żeby funkcja zamieniała z textu na hex i odwrotnie? Prosze o proste wytłumaczenie
Użytkownik jajo87 edytował ten post 09 styczeń 2007, 19:39
ok, zrobiłem to że jak wpisze do jednego okienka to wyświetla sie w drugim i odwrotnie. I jak by to zrobic żeby funkcja zamieniała z textu na hex i odwrotnie? Prosze o proste wytłumaczenie
Migajek w poście 7 napisał tobie o tym jak zamienić łańcuch na hex
IntToHex(StrToInt(Edit1.text), length(Edit1.text) * 2);
powinno dzialac (pisane z glowy). No i oczywiscie proba wpisania jakiegokolwiek stringa skonczy sie bledem ;]
Nie działa. Gdy próbuje wpisac obojętnie co, wyświetla się że nie jest to integer. Żadnej funkcji nie tworzyłem.
Użytkownik jajo87 edytował ten post 10 styczeń 2007, 18:58
Nie działa. Gdy próbuje wpisac obojętnie co, wyświetla się że nie jest to integer.
Dziala prawie idealnie. Polecam jednak zmienic to: length(Edit1.text) * 2 na cos innego bo nie potrzebujemy 6 znakow w hexie dla <100; 255> ;).
Migajek przecież napisał(nawet przytoczyłeś jego cytat), że wpisanie jakiegokolwiek stringa kończy się błędem :)
Przeciez wlasnie ma to byc jako tekst. Mają to byc pola, które można dowolnie edytowac, ich tekst i hexów i tekstu.
Użytkownik jajo87 edytował ten post 10 styczeń 2007, 19:04
Omg... A może zanim przypiszesz wartość Edit1.Text zamienisz Hex na String, co?... Ręce o(d)padają...
Poza tym, jak Ty chcesz wyświetlić wartość heksadycemalną (dobrze napisałem? :)) z jakiegoś tekstu? Można wyświetlić ją z jakiejś liczby, ale nie z tekstu...*
____
* - no wiem, że można znaki ASCII zamieniać na hex, ale to chyba nie o to chodzi...
Użytkownik pbnan edytował ten post 10 styczeń 2007, 19:07
pseudokod:
while i:=0 do edit1.text.length begin edit2.text := edit2.text + inttohex( int(edit1.text[i])/*niepamiętam jak sie rzutuje w delphi*/, 2/*długość tekstu 2 , bo z chara (256 wartości) więcej nie wyciśnie*/) end;
jakaś mieszanka delphi c/c++ (dawno nie kodziłem), ale moim zdaniem tak powinno to wyglądać
@pbnan: po pierwsze: hex to jest string!!!! :),
a po drugie: każdy znak ansi to jest liczba :)
a po trzecie: heksadecymalną
Użytkownik Radek edytował ten post 10 styczeń 2007, 19:36
pseudokod:
while i:=0 do edit1.text.length begin edit2.text := edit2.text + inttohex( int(edit1.text[i])/*niepamiętam jak sie rzutuje w delphi*/, 2/*długość tekstu 2 , bo z chara (256 wartości) więcej nie wyciśnie*/) end;
jakaś mieszanka delphi c/c++ (dawno nie kodziłem), ale moim zdaniem tak powinno to wyglądać
@pbnan: po pierwsze: hex to jest string!!!! :),
a po drugie: każdy znak ansi to jest liczba :)
a po trzecie: heksadecymalną
Dobrze, ale można dokładniej, ktoś kto sie zna plz, bo ten kodzik co podałes to nie wiem. To jak to najpierw zamienic na asci, a potem na hex, takie coś. zamienia tekst z lewej strony na asci i wyświetla to jako hex po prawej, takie coś.
Użytkownik jajo87 edytował ten post 12 styczeń 2007, 10:49
to > int(edit1.text[i]) zamienia na hmm "asci" - czyli litery na wartości int (czyba, że rzutuje się inaczej, ale ja nie pamiętam zobacz w helpie)
to > int(edit1.text[i]) zamienia na hmm "asci" - czyli litery na wartości int (czyba, że rzutuje się inaczej, ale ja nie pamiętam zobacz w helpie)
A nie chodzilo Ci o StrToInt(...) ?
Nie, nie chodzi mi o strtoint ponieważ strtoint zamieni tylko "znaki liczb" na int, a nie pobierze wartości binarnej ("asci") tego znaku:
Czyli strtoint "1" zamieni na 01h, a gdy podamy jako parametr "B" to wywali błąd, bo to nie liczba :D
Natomiast int("1") zostanie (mam nadzieje) zamienione na 31h (49 dziesiętnie) tak jak w tej tablicy
Użytkownik Radek edytował ten post 13 styczeń 2007, 08:34
const EMPTY_ERR= 1; HEX_ERR= 2; BIN_ERR= 100; procedure TForm1.HexToInteger(AString: string; var AValue, AError: integer); begin AError:=EMPTY_ERR; if length(AString)>1 then if LowerCase(AString[length(AString)])='h' then begin AString:='$'+copy(AString, 1, length(AString)-1); val(AString , AValue, AError); if AError<>0 then AError:=HEX_ERR; end; end; procedure TForm1.BinToInteger(AString: string; var AValue, AError: integer); var i: integer; ch: char; begin AError:=EMPTY_ERR; if length(AString)>1 then if LowerCase(AString[length(AString)])='b' then begin i:=1; AError:=0; AValue:=0; while (i<length(AString)) and (AError=0) do begin ch:=AString[length(AString)-i]; if ch='1' then AValue:=AValue + (1 shl (i-1)) else if ch<>'0' then AError:=BIN_ERR + i; inc(i); end; end; end; procedure TForm1.Button1Click(Sender: TObject); const n='jaka fala'; var v, e: integer; s: string; ch: char; begin s:=Edit1.Text; v:=0; if s<>'' then begin ch:=LowerCase(s)[length(s)]; if ch='b' then BinToInteger(s, v, e) else if ch='h' then HexToInteger(s, v, e) else begin val(s, v, e); if e<>0 then e:=-1; end; end; if e=0 then Label1.Caption:=IntToStr(v) else Label1.Caption:='blad '+ IntToStr(e); end;