Skocz do zawartości
  • 0

Powielanie liczby w oknie edit


Pytanie

Witam mam pytanie jak powielić liczbę w oknie Edit ? Próbuję napisać kalkulator, ale nie do końca wiem jak zrobić żeby w jego "wyświetlaczu" czyli okienku edit po naciśnięciu przycisku 1 (w Gui a nie na klawiaturze) na ekranie pojawiło się tyle jedynek ile razy nacisnę klawisz.  Proszę o pomoc :}

 

 

$Button1 = GUICtrlCreateButton("1", 32, 64, 49, 49)
$Edit1 = GUICtrlCreateEdit("", 24, 8, 297, 41, BitOR($ES_RIGHT,$ES_READONLY))
GUICtrlSetData(-1, $wynik)
GUICtrlSetFont(-1, 15, 400, 0, "MS Sans Serif")

 

Edytowano przez panneryv

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

5 odpowiedzi na to pytanie

Polecane posty

  • 0

Trochę dziwne, że chcesz do tego używać kontrolki "Edit". Nie lepiej było by użyć "Input"?

Tak jak w poniższym przykładzie kalkulatora do przeliczania liczb binarnych:

#include <GUIConstantsEx.au3>

;tworzenie okna głównego
GUICreate("Przeliczanie liczb binarnych", 400, 300)
GUISetBkColor(0xbbbbbb)                               ;tło okna w kolorze ciemno szarym

;tworzenie kontrolek
GUICtrlCreateGroup ("", 95, 30, 255, 40)              ;wykorzystujemy funkcję do narysowania ramki
GUICtrlCreateGroup ("BIN", 95, 30, 216, 40)
$hLab1 = GUICtrlCreateLabel("0", 106, 46, 192, 15, 2) ;okienko na liczbę binarną, wyrównanie do prawej
GUICtrlSetBkColor(Default, 0xeeeeee)                  ;kolor tła okienka liczby binarnej
GUICtrlSetColor(Default, 0xff0000)                    ;kolor czcionki w okienku liczby binarnej
GUICtrlCreateGroup ("", 100, 135, 200, 40)            ;kolejna ramka
$hLab2 = GUICtrlCreateLabel("0", 120, 152, 160, 15,2)  ;okienko na wynik, wyrównanie do prawej
GUICtrlCreateGroup ("Przelicz na", 100, 85, 200, 50)  ;tworzymy grupę z trzech przełączników RADIO
$hRadio_oct = GUICtrlCreateRadio("OCT", 120, 105)
$hRadio_dec = GUICtrlCreateRadio("DEC", 180, 105)
GUICtrlSetState(-1, $GUI_CHECKED)                     ;ustawiamy status przełącznika "DEC" na zaznaczony
$hRadio_hex = GUICtrlCreateRadio("HEX", 240, 105)
$hButton_0 = GUICtrlCreateButton("0", 100, 190, 40, 40) ;kolejno wszystkie 5 klawiszy
$hButton_1 = GUICtrlCreateButton("1", 150, 190, 40, 40)
$hButton_back = GUICtrlCreateButton("<- Backspace", 200, 190, 100, 40)
$hButton_end = GUICtrlCreateButton("Koniec", 100, 245, 200, 25)
$hButton_clr = GUICtrlCreateButton("CLR", 312, 40, 34, 24)

GUISetState()          ;wywołanie GUI na ekran
$sStrBin="0"           ;deklaracja zmiennej przechowującej liczbę binarną

While 1                ;pętla obsługi GUI
   $msg = GUIGetMsg()  ;odczytanie ID zdarzenia jakie zaszło w GUI
   Switch $msg
      case $GUI_EVENT_CLOSE, $hButton_end
         ExitLoop
      case $hButton_0
         If StringLen($sStrBin)<31 Then $sStrBin &= "0"       ;ograniczenie liczby binarnej do 31 cyfr
         ;wykorzystujemy wyrażenie regularne do pozbycia się zer na początku liczby binarnej
         $sStrBin = StringRegExpReplace($sStrBin, "^0*(.+)$", "$1")
         GUICtrlSetData($hLab1, $sStrBin)               ;aktualizacja danych w okienku liczby binarnej
      case $hButton_1
         If StringLen($sStrBin)<31 Then $sStrBin &= "1"
         $sStrBin = StringRegExpReplace($sStrBin, "^0*(.+)$","$1")
         GUICtrlSetData($hLab1, $sStrBin)               ;aktualizacja danych w okienku liczby binarnej
      case $hButton_back
         If $sStrBin<>"0" Then $sStrBin = StringTrimRight($sStrBin, 1)
         GUICtrlSetData($hLab1, $sStrBin)
      case $hButton_clr
         $sStrBin = " 0"
         GUICtrlSetData($hLab1, $sStrBin)
   EndSwitch
   If $msg<>0 Then
      $iPar =  (GUICtrlRead($hRadio_oct)=$GUI_CHECKED)
      $iPar += (GUICtrlRead($hRadio_dec)=$GUI_CHECKED)*2
      $iPar += (GUICtrlRead($hRadio_hex)=$GUI_CHECKED)*4
      GUICtrlSetData($hLab2, oblicz($iPar, $sStrBin))         ;aktualizacja danych w okienku wyników
   endif
WEnd


;funkcja przeliczająca liczby w zapisie binarnym na liczby ósemkowe, dziesiętne lub szesnastkowe
;do zamiany liczby dwójkowej na dziesiętną piszemy własną procedurę (między For ... Next)
;gdyż w AutoIt nie ma stosownej funkcji
;do zamiany liczby dziesiętnej na ósemkową i szesnastkową wykorzystujemy funkcję formatującą
;StringFormat (opis w rozdziale "Napisy (stringi)")

Func oblicz($iP,$sSbin)
   Local $iLen=StringLen($sSbin), $iLicz=0, $i, $j, $a
   ;zmiana liczby dwójkowej na dziesiętną
   For $i=$iLen to 1 Step -1
      $j = $iLen-$i
      $a = StringMid($sSbin, $i, 1)
      $iLicz += Number($a)*2^$j
   Next
   Switch $iP
      case 1
         Return StringFormat("%o",$iLicz) ;zmiana na liczbę ósemkową
      case 2
         Return $iLicz
      case 4
         Return StringFormat("%X",$iLicz) ;zmiana na liczbę szesnastkową
   EndSwitch
EndFunc

Przykład pochodzi z mojego podręcznika do Autoit'a: https://pl.wikibooks.org/wiki/AutoIt

https://pl.wikibooks.org/wiki/AutoIt/GUI#Kontrolki_GUI_i_ich_obsługa

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0

Dzięki, przeczytałem ten poradnik i udało mi się zrobić coś co działa dobrze tylko mam jeszcze jeden kłopot kiedy chcę wpisać do kalkulatora 0.2+0.2 to te pierwsze 0 jest usuwane przez komendę               $x = StringRegExpReplace($x, "^0*(.+)$","$1") która dopisana jest do każdej cyfry. Można coś z tym zrobić ? Kalkulator liczy dobrze, ale wizualnie nie jest to zbyt ładne.

Edytowano przez panneryv

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0

Możesz po prostu usunąć tę linię kodu i nic nie będzie usuwane.

 

Możesz też podejrzeć jak zrealizowałem klawiaturę ekranową w popełnionym przeze mnie parę lat temu kalkulatorze graficznym.

Pliki w załączniku.

Kalkulator.zip

Edytowano przez wasta

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
  • 0
12 godzin temu, wasta napisał:

Możesz po prostu usunąć tę linię kodu i nic nie będzie usuwane.

 

Możesz też podejrzeć jak zrealizowałem klawiaturę ekranową w popełnionym przeze mnie parę lat temu kalkulatorze graficznym.

Pliki w załączniku.

Kalkulator.zip

@wasta prosiłbym o dodanie skanu pliku w ciągu 12h, w innym przypadku będą go musiał niestety usunąć.

Temat zostanie zamknięty po dodaniu skanu pliku.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się
  • Kto przegląda   0 użytkowników

    Brak zalogowanych użytkowników przeglądających tę stronę.

×
Okienko zamknie się za 5 sekund...