|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Вывод текста в заданном формате |
|
|
[решено] Вывод текста в заданном формате
|
Новый участник Сообщения: 6 |
Профиль | Отправить PM | Цитировать В общем надо чтобы при вводе текста в Input/edit введенный текст отображался в заданном формате в частности через _StringAddThousandsSep, т.е
я ввожу "123456789", а СРАЗУ выводится "123 456 789"("123,456,789"), или ввожу "абв" а выводится "АААБББВВВ" и т.п. Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam) #forceref $hWnd, $iMsg Local $hWndFrom, $iIDFrom, $iCode $hWndFrom = $ilParam $iIDFrom = BitAND($iwParam, 0xFFFF) ; Low Word $iCode = BitShift($iwParam, 16) ; Hi Word Switch $iIDFrom Case $input1 Switch $iCode Case $EN_CHANGE $a=GUICtrlRead($input1) GUICtrlSetData($input1, _StringAddThousandsSep($a)) EndSwitch EndSwitch Return $GUI_RUNDEFMSG EndFunc ;==>WM_COMMAND Хелп плз. |
|
Отправлено: 23:47, 04-05-2009 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата san45:
#include <GuiConstantsEx.au3> #include <WindowsConstants.au3> #include <EditConstants.au3> #include <String.au3> GUICreate("Input Changed Demo GUI", 300, 140) $Input_1 = GUICtrlCreateInput("Input 1", 20, 20, 260, 20) $Exit = GUICtrlCreateButton("Exit", 20, 110, 60, 20) GUISetState() GUIRegisterMsg($WM_COMMAND, "WM_COMMAND") While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE, $Exit ExitLoop EndSwitch WEnd Func WM_COMMAND($hWnd, $msg, $wParam, $lParam) Local $nNotifyCode = BitShift($wParam, 16) Local $nID = BitAND($wParam, 0xFFFF) Local $hCtrl = $lParam Switch $nID Case $Input_1 Switch $nNotifyCode Case $EN_CHANGE, $EN_UPDATE Local $sInput_Read = GUICtrlRead($Input_1) If $sInput_Read == "абв" Then Local $aChars = StringSplit($sInput_Read, "") $sInput_Read = "" For $i = 1 To $aChars[0] $sInput_Read &= $aChars[$i] & $aChars[$i] & $aChars[$i] Next GUICtrlSetData($Input_1, StringUpper($sInput_Read)) ElseIf StringRegExp($sInput_Read, "\d+") Then GUICtrlSetData($Input_1, _StringAddThousandsSep($sInput_Read)) EndIf EndSwitch EndSwitch Return $GUI_RUNDEFMSG EndFunc |
|
------- Отправлено: 01:05, 05-05-2009 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 307
|
Профиль | Отправить PM | Цитировать Вот, пример:
#include <String.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> $hGui = GUICreate("Form", 320, 40, 192, 185) $Input = GUICtrlCreateInput("", 8, 8, 249, 21,$ES_UPPERCASE) $Ok_Button = GUICtrlCreateButton("Ok", 264, 7, 49, 23) GUISetState(@SW_SHOW) GUIRegisterMsg($WM_COMMAND, "WM_COMMAND") While 1 $msg = GUIGetMsg() Select Case $msg = $GUI_EVENT_CLOSE Exit Case $msg = $Ok_Button $R=GUICtrlRead($Input) GUIDelete($hGui) MsgBox(0,"Результат",$R) Exit EndSelect WEnd Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam) #forceref $hWnd, $iMsg Local $hWndFrom, $iIDFrom, $iCode $hWndFrom = $ilParam $iIDFrom = BitAND($iwParam, 0xFFFF) ; Low Word $iCode = BitShift($iwParam, 16) ; Hi Word Switch $iIDFrom Case $Input Switch $iCode Case $EN_CHANGE $a=GUICtrlRead($Input) if StringIsDigit(StringRegExpReplace($a,"(.).*","\1")) then $a1=StringRegExpReplace($a,Chr(160),"") GUICtrlSetData($input,_StringAddThousandsSep($a1)) else $c=StringRegExpReplace($a,"(.*)(.)","$1$2$2$2") GUICtrlSetData($input,$c) endif EndSwitch EndSwitch Return $GUI_RUNDEFMSG EndFunc ;==>WM_COMMAND |
------- Последний раз редактировалось beve, 05-05-2009 в 22:03. Причина: Исправлено Отправлено: 02:54, 05-05-2009 | #3 |
Новый участник Сообщения: 6
|
Профиль | Отправить PM | Цитировать Большое спасибо за оперативные ответы.
Цитата Creat0R:
GUICtrlSetData($Input_1, _StringAddThousandsSep($sInput_Read)) но это не работает: при вводе 123456789 он выдает 1,23456789 Спасибо beve, я понял в чем была обшибка. _StringAddThousandsSep не правильно обрабатывает строку с пробелами(которые сам и ставил), т.е "1 2345" превращались "1,2345". Надо было просто каждый раз убирать пробелы. Цитата beve:
|
||
Отправлено: 07:41, 05-05-2009 | #4 |
Старожил Сообщения: 307
|
Профиль | Отправить PM | Цитировать Цитата san45:
А там в моем примере StringRegExpReplase заменяет не пробел(хотя оно и выглядит как пробел)... Там не пробел, а то что в параметре "sThousand", по адресу:[HKEY_CURRENT_USER\Control Panel\International] А что оно, пока не знаю...если бы кто объяснил... P.S. или это только в меня этот глюк в системе, везде пишут, что там в реестре именно пробел, и выглядит оно как пробел, но если ставить пробел в функции $a1=StringRegExpReplace($a,"*","") - не работает, а если значение из реестра, то Гуд... Вот, значение из реестра, при копировании сюда на форум заменяется звездочкой почемуто... |
||
------- Последний раз редактировалось beve, 05-05-2009 в 13:11. Отправлено: 12:23, 05-05-2009 | #5 |
Старожил Сообщения: 215
|
Профиль | Отправить PM | Цитировать Это символ с порядковым номером 160 (A0, 00A0)
У обычного пробела порядковый номер 32 (20, 0020) |
Отправлено: 15:36, 05-05-2009 | #6 |
Старожил Сообщения: 307
|
Профиль | Отправить PM | Цитировать Цитата Sylver Dragon:
|
|
------- Отправлено: 16:21, 05-05-2009 | #7 |
Старожил Сообщения: 215
|
Профиль | Отправить PM | Цитировать $S = Chr(160)
StringRegExpReplace($a, $S,"") Ну или сразу функцию на место вставить. |
------- Отправлено: 19:54, 05-05-2009 | #8 |
Старожил Сообщения: 307
|
Профиль | Отправить PM | Цитировать Цитата Sylver Dragon:
|
|
------- Отправлено: 22:05, 05-05-2009 | #9 |
Новый участник Сообщения: 6
|
Профиль | Отправить PM | Цитировать Да там не совсем пробел, вначале тоже поставило в тупик. Короче поставил тысячным разделителем ",". Мне нужен был input-калькулятор, вто что вышло
#include <String.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <array.au3> $hGui = GUICreate("Form", 320, 40, 192, 185) $Input = GUICtrlCreateInput("", 8, 8, 249, 21,BitOR($ES_RIGHT,$ES_AUTOHSCROLL)) $Ok_Button = GUICtrlCreateButton("Ok", 264, 7, 49, 23) GUISetState(@SW_SHOW) GUIRegisterMsg($WM_COMMAND, "WM_COMMAND") While 1 $msg = GUIGetMsg() Select Case $msg = $GUI_EVENT_CLOSE Exit Case $msg = $Ok_Button $z=GUICtrlRead($Input) GUICtrlSetData($input,Execute(StringReplace($z,",",""))) EndSelect WEnd Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam) #forceref $hWnd, $iMsg Local $hWndFrom, $iIDFrom, $iCode $hWndFrom = $ilParam $iIDFrom = BitAND($iwParam, 0xFFFF) ; Low Word $iCode = BitShift($iwParam, 16) ; Hi Word Switch $iIDFrom Case $Input Switch $iCode Case $EN_CHANGE $str=GUICtrlRead($Input) If StringRegExp($str, ".*\.\z") Then ContinueCase ; если введена десятичная точка, не обрабатывать через _StringAddThousandsSep, иначе он ее уберет $x=StringRegExp($str, "[0-9,.]+\z", 1) If @error=0 Then $str=StringReplace($str, $x[0], _StringAddThousandsSep(StringReplace($x[0],",",""),",",".")) GUICtrlSetData($input, $str) EndIf EndSwitch EndSwitch Return $GUI_RUNDEFMSG EndFunc ;==>WM_COMMAND |
Последний раз редактировалось san45, 07-05-2009 в 00:58. Отправлено: 07:43, 06-05-2009 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] вывод текста на экран | antoniospb | Скриптовые языки администрирования Windows | 6 | 23-04-2010 13:40 | |
Офис и Текст - Подскажите прогу для печати текста в формате брошюры | Grey_rnd | Программное обеспечение Windows | 7 | 26-01-2009 16:16 | |
CMD/BAT - [решено] возможен ли вывод текста с форматированием по цвету | akrav | Скриптовые языки администрирования Windows | 3 | 06-02-2008 10:59 | |
JavaScript: вывод текста из текстового поля | Jekamajor | Вебмастеру | 5 | 10-08-2005 12:43 | |
Вывод текста по колличеству слов PHP | Ginger | Вебмастеру | 19 | 10-12-2004 11:59 |
|