Toon posts:

[Delphi] Talstelsel omzetter gemaakt :-)

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb met Delphi6 een programma gemaakt waarmee je een getal om kan zetten naar een ander talstelsel
bv:

Hexadecimaal: E4F5.2A2 => Octaal: 162365.1242

Binair: 1101011.10110 => Decimaal: 107.6875

het is mogelijk om talstelsels te kiezen van 2 tot 36
en (wat Windows-Calculator niet kan) cijfers achter de komma kunnen gebruikt worden :)

ik ben maar een beginner... maar wat vinden jullie ervan en wat kan er nog verbeterd worden? en doet hij het goed?

Download: hier het programma van ~450KB :)

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Zit een typfout in. :) Sorry, kon het niet laten.

Er staat "Windows 2000 of Windows XP is heirbij vereist"

"The shell stopped unexpectedly and Explorer.exe was restarted."


  • _JGC_
  • Registratie: Juli 2000
  • Laatst online: 01:41
Ik zie aan mn hex-editor dat je em met Delphi geschreven heb :)

Kan je voorkomen door volgende keer ff UPX erover te halen, wordt je exe een tiende van wat ie nu is :)
http://upx.sourceforge.net/

edit:

Titel lezen is moeilijk ja :P

  • Steven
  • Registratie: December 2000
  • Laatst online: 14-09 10:15
Stille hint: Maak het niet mogelijk om de transparency op 100% te zetten... Dan ben je het programma namelijk kwijt :P

  • Klippy
  • Registratie: Oktober 2000
  • Laatst online: 22:03

Klippy

Still Game

Ja leuk.

Niet echt spectaculair, maar wel oke :)

Delphi werk kan iedereen doen, maar heb je zelf die functies geschreven of ergens vandaan gehaald?

Steam | SXQncyBhbGwgZ29vZCwgbWFuISDwn5iO


Verwijderd

Op donderdag 06 december 2001 19:41 schreef MPdave het volgende:
het is mogelijk om talstelsels te kiezen van 2 tot 36
en (wat Windows-Calculator niet kan) cijfers achter de komma kunnen gebruikt worden :)

ik ben maar een beginner... maar wat vinden jullie ervan en wat kan er nog verbeterd worden? en doet hij het goed?
Jep, hij doet 't goed.
Maar om de dingen te kunnen die de Win-calculator wel aankan en jouw progje niet, heb je nog wel een uitdaging... :)
- Negatieve getallen
- Getallen groter dan $7FFFFFFF (het maximum van een Int64, de Win-calculator gaat tot $FFFFFFFFFFFFFFFF)
Maar da's meer iets voor een specifieke bin/oct/hex calculator denk ik, niet zozeer voor een NBase versie.

Voor de meelezers die benieuwd zijn naar zo'n NBase conversie heb ik dit voorzetje geschreven (integer only, geen negatieve getallen, en 't moet binnen een Int64 passen):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
const
  ZERO = Ord('0');

function NBaseIntToString(AInt: Int64; ABase: byte): string;
var
  Quotient: Int64;
  Remainder: byte;
  c: char;
begin
  if AInt = 0 then begin
    Result := '0';
    Exit;
  end;
  Result := '';
  Quotient := AInt;
  while Quotient <> 0 do begin
    Remainder := Quotient mod ABase;
    c := chr(ZERO + Remainder);
    if c > '9' then Inc(c, 7); // skip gap between 9 and A
    Result := c + Result;
    Quotient := Quotient div ABase;
  end;
end;

function NBaseStringToInt(AString: string; ABase: byte): Int64;
var
  i: integer;
  digit: byte;
begin
  Result := 0;
  for i := 1 to Length(AString) do begin
    digit := Ord(AString[i]) - ZERO;
    if digit > 9 then Dec(digit, 7); // skip gap between A and 9
    Result := (Result * ABase) + digit;
  end;
end;

O ja, nergens wordt gecheckt of de Base wel klopt (2-36) en of de string wel geldig is. Zoals gezegd, is een opzetje... :)

Verwijderd

Topicstarter
Op donderdag 06 december 2001 20:08 schreef jelmervos het volgende:
Zit een typfout in. :) Sorry, kon het niet laten.

Er staat "Windows 2000 of Windows XP is heirbij vereist"
okee, mijn fout... wordt aangepast.
-------------------------------------------
Op donderdag 06 december 2001 20:14 schreef _JGC_ het volgende:
Ik zie aan mn hex-editor dat je em met Delphi geschreven heb :)

Kan je voorkomen door volgende keer ff UPX erover te halen, wordt je exe een tiende van wat ie nu is :)
http://upx.sourceforge.net/

edit:

Titel lezen is moeilijk ja :P
okee, ik ga is ff kijken of ik hem kleiner kan maken...
aja... is gelukt... hij's nu nog maar 180Kb :):)
------------------------------------------
Op donderdag 06 december 2001 20:21 schreef Steven_NL het volgende:
Stille hint: Maak het niet mogelijk om de transparency op 100% te zetten... Dan ben je het programma namelijk kwijt :P
ja.. ik kan die transparantie e.v.t. ook weglaten... heeft toch niet echt een boeiende functie...
-----------------------------------------
Op donderdag 06 december 2001 20:23 schreef LiquidSilver het volgende:
Ja leuk.

Niet echt spectaculair, maar wel oke :)

Delphi werk kan iedereen doen, maar heb je zelf die functies geschreven of ergens vandaan gehaald?
ik heb zelf die functies geschreven... m.b.v. een boek van School, want ja... je moet toch weten hoe.
-----------------------------------------
Op donderdag 06 december 2001 22:45 schreef Afterlife het volgende:

[..]

Jep, hij doet 't goed.
Maar om de dingen te kunnen die de Win-calculator wel aankan en jouw progje niet, heb je nog wel een uitdaging... :)
- Negatieve getallen (1)
- Getallen groter dan $7FFFFFFF (het maximum van een Int64, de Win-calculator gaat tot $FFFFFFFFFFFFFFFF)(2)
Maar da's meer iets voor een specifieke bin/oct/hex calculator denk ik, niet zozeer voor een NBase versie.

Voor de meelezers die benieuwd zijn naar zo'n NBase conversie heb ik dit voorzetje geschreven (integer only, geen negatieve getallen, en 't moet binnen een Int64 passen):

<CODE>

O ja, nergens wordt gecheckt of de Base wel klopt (2-36) en of de string wel geldig is. Zoals gezegd, is een opzetje... :)(3)
(1) gaat mischien ook toegevoegd worden.
(2) mja... kijk nog wel of ik daar nog wat mee doe... haha.. als ik tijd _over_ heb ;)
(3) mja kan ook nog toegevoegd worden...
------------------------------------------

thnx voor de reacties tot nu toe :)

Verwijderd

Topicstarter
b.t.w:

is het in Delphi eigenlijk ook mogelijk dat in een Editbox maar een aantal karakters worden toegelaten... dat je dus b.v. kan filteren op bapaalde toetsen???

[edit]
nieuwe versie is beschikbaar, maar nog lang niet af...
nieuwe versie

[edit]
nu is invoer mogelijk tot 32 bit geheel, en 32 bit decimaal

dus hex = 4 bit per cijfer => 32/4 = 8 cijfers mogelijk (8×.8×)
en binair zijn er 32 cijfers mogelijk (32×.32×)

Verwijderd

Op vrijdag 07 december 2001 18:50 schreef MPdave het volgende:
is het in Delphi eigenlijk ook mogelijk dat in een Editbox maar een aantal karakters worden toegelaten... dat je dus b.v. kan filteren op bapaalde toetsen???
Bij een TEdit kun je standaard alleen de MaxLength en de CharCase beinvloeden. Een TMaskEdit heeft met z'n EditMask al een hoop meer mogelijkheden, maar ook nog niet alles wat je nodig hebt.
In jouw geval kun je denk ik 't beste de boel zelf regelen via het OnKeyPress en OnChange event van de TEdit. (Die laatste omdat een TEdit ook gevuld kan worden via bv. copy/paste, en dan wordt OnKeyPress niet getriggerd.)

Verwijderd

Topicstarter
Op vrijdag 07 december 2001 20:21 schreef Afterlife het volgende:

[..]

Bij een TEdit kun je standaard alleen de MaxLength en de CharCase beinvloeden. Een TMaskEdit heeft met z'n EditMask al een hoop meer mogelijkheden, maar ook nog niet alles wat je nodig hebt.
In jouw geval kun je denk ik 't beste de boel zelf regelen via het OnKeyPress en OnChange event van de TEdit. (Die laatste omdat een TEdit ook gevuld kan worden via bv. copy/paste, en dan wordt OnKeyPress niet getriggerd.)
aaja, ik ga zo is ff kijke... ik had al geprobeert om als hij verandert dat hij dan controleert of er ongeldige karakters inzitten, maar als dat dan aangepast is gaat hij (met de cursor) in de TEdit naar het begin van de string, terwijl hij dan in principe aan 't einde zou moeten staan.. zodat het volgende karakter ingevoerd kan worden...snapje?

daar zit ik nog een beetje mee...

Verwijderd

Wanneer je OnKeyPress gebruikt, blijft de cursor netjes staan waar 'ie staat.
Door bij niet toegestane karakters Key op #0 te zetten, verandert er niks, en wordt dus ook 't OnChange event niet aangeroepen.

En wanneer je in het OnChange event de cursor aan 't eind wilt hebben, doe je dit door SelLength op 0 te zetten en SelStart op Length(Text).

Zoiets (niet zo zinvol, maar misschien wel wat verhelderend):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
var
  ValidKeyPressed: boolean = False;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if Key >= ' ' then // allow for control chars
    if Pos(Key, '.0123456789')=0 then
    Key := #0
    else
    ValidKeyPressed := True;
end;

procedure TForm1.Edit1Change(Sender: TObject);
var
  bValidKeyPressed: boolean;
begin
  bValidKeyPressed := ValidKeyPressed;
  ValidKeyPressed := False; // reset static var
  if not bValidKeyPressed then begin
    Beep;
    with TEdit(Sender) do begin
    Text := 'Boe!';
    SelLength := 0;
    SelStart := Length(Text);
    end;
  end;
end;

Verwijderd

Topicstarter
Op vrijdag 07 december 2001 21:07 schreef Afterlife het volgende:
Wanneer je OnKeyPress gebruikt, blijft de cursor netjes staan waar 'ie staat.
Door bij niet toegestane karakters Key op #0 te zetten, verandert er niks, en wordt dus ook 't OnChange event niet aangeroepen.

En wanneer je in het OnChange event de cursor aan 't eind wilt hebben, doe je dit door SelLength op 0 te zetten en SelStart op Length(Text).

Zoiets (niet zo zinvol, maar misschien wel wat verhelderend):

<code>
OOOO, zo kan het dus ook... is best wel simpel zo te zien,

ik wist niet dat dat kon, ik heb ook echter wel een componentje gevonden op internet, wat net zo functioneert als een TEdit, maar dat je ook een string kan opgeven met karakters die gebruikt mogen worden. -- werkt hetzelfde als dat jij nu beschrijft (ook met key:=#0 als hij niet mag komen)

ok thnx :):)

Verwijderd

Is ook best wel simpel, al heb ik 't wel voor elkaar gekregen om in 5 regels code nog een bug te introduceren... :)

<knip> Was geen bug...

't Is trouwens wel handig om hiervoor een van TEdit afgeleid component te gebruiken, omdat je dan o.a. die ValidKeyPressed variabele in het component kunt opnemen i.p.v. als static variabele in de unit. In jouw geval, met maar 1 TEdit component die wat met die variabele doet, maakt 't niet uit, maar 't is gewoon netter en veiliger om dat soort dingen binnen de classes zelf te houden.

Verwijderd

Topicstarter
Op donderdag 06 december 2001 22:45 schreef Afterlife het volgende:

[..]
- Getallen groter dan $7FFFFFFF (het maximum van een Int64, de Win-calculator gaat tot $FFFFFFFFFFFFFFFF)
Hij kan nu getallen (hex) tot 15 cijfers voor en 15 achter de komma :) das dus FFFFFFFFFFFFFFF.FFFFFFFFFFFFFFF
er zijn totaal 60 bit beschikbaar (hex = 4 bit) dus 60/4 = 15 karakters.
octaal dus 20.20 karakters
binair dus 60.60 karakters

en heb inmiddels ook die keypress functie ingebouwd,
hij werkt nu dan met een "Case key of"
en die werkt wel goed geloof ik...

nieuwe versie met deze verbeteringen hier. :) :)

iemand nog meer leuke ideeën/suggesties/verbeteringen?

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 06-11-2025

kvdveer

Z.O.Z.

tof ding...

Optie-request:
het instellen van de digit-string. momenteel is die
'0123456789abcdefghijklmnopqrstuvwxyz'

Als je die instelbaar maakt kun je vast nog meer onzinnige dingen doen.
maximale base wordt dan length(digitstring)

Localhost, sweet localhost


  • Onno
  • Registratie: Juni 1999
  • Niet online
Op donderdag 06 december 2001 19:41 schreef MPdave het volgende:
en (wat Windows-Calculator niet kan) cijfers achter de komma kunnen gebruikt worden :)
Alleen is dat net niet zo nuttig, omdat die notaties vrijwel nooit gebruikt worden. :)

Verwijderd

Topicstarter
Op zaterdag 08 december 2001 23:14 schreef kvdveer het volgende:
tof ding...

Optie-request:
het instellen van de digit-string. momenteel is die
'0123456789abcdefghijklmnopqrstuvwxyz'

Als je die instelbaar maakt kun je vast nog meer onzinnige dingen doen.
maximale base wordt dan length(digitstring)
ja... ehm, kan geregeld worden... 't kost misschien wat tijd.. maar ik kijk wel een keertje... ik post hier wel weer een reactie als 't zover is :)

-----------------------------------------------------------
Zaterdag 23:21 schreef Onno -1 (Flamebait) het volgende:

[..]

Alleen is dat net niet zo nuttig, omdat die notaties vrijwel nooit gebruikt worden. :)
... never mind :z ...
-----------------------------------------------------------

ok bedankt voor jullie reacties (op 1 na)

ik ga nu slape :Z

Verwijderd

Topicstarter
Op Saturday 08 December 2001 23:14 schreef kvdveer het volgende:

tof ding...

Optie-request:
het instellen van de digit-string. momenteel is die
'0123456789abcdefghijklmnopqrstuvwxyz'
is ingevoerd, ik weet niet oftie helemaal goed doet, maar das ook niet echt belangrijk ;) ... in principe zou hij het goed moeten doen... hier download

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 06-11-2025

kvdveer

Z.O.Z.

Niet helemaal wat ik bedoelde:
stel ik wil het base 10 getal 100042 omrekenen naar een base 39 getal...

Localhost, sweet localhost


Verwijderd

Topicstarter
Op maandag 10 december 2001 09:15 schreef kvdveer het volgende:
Niet helemaal wat ik bedoelde:
stel ik wil het base 10 getal 100042 omrekenen naar een base 39 getal...
ooh, op zo'n fiets... zal eens ff kijke

[edit]
'k heb em ff aangepast... uiteraard download hier

Verwijderd

Op zondag 09 december 2001 01:00 schreef MPdave het volgende:
ok bedankt voor jullie reacties (op 1 na)
Onno had wel een beetje (boel) gelijk...
De meeste mensen die niet-10-tallig rekenen nodig hebben, gebruiken dat meestal voor gehele getallen. Dan is 't interessanter om te kunnen kiezen voor bytes, words, dwords, qwords, etc. (en ook meteen maar hun signed broertjes) dan voor cijfers achter de komma.

Misschien leuk om als optie toe te voegen? 't Zit niet voor niks al in die MS calculator... :)

Verwijderd

Topicstarter
ja, ok ik weet ook wel dat die getallen achter de komma niet veel gebruikt wordt, maar dat hoef je dan nog niet zo te zeggen ;)


even tussendoor:
verdere ontwikkeling is voorlopig gestaakt i.v.m. school en huiswerk en projecten enzo...
Pagina: 1