Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Вывод текста в заданном формате

Ответить
Настройки темы
[решено] Вывод текста в заданном формате

Новый участник


Сообщения: 6
Благодарности: 1

Профиль | Отправить 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

 

Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата san45:
надо чтобы при вводе текста в Input/edit введенный текст отображался в заданном формате »
Код: Выделить весь код
#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

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 01:05, 05-05-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для beve

Старожил


Сообщения: 307
Благодарности: 137

Профиль | Отправить 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
Благодарности: 1

Профиль | Отправить PM | Цитировать


Большое спасибо за оперативные ответы.

Цитата Creat0R:
Creat0R »
Вы по сути предложили то же, что я делал

GUICtrlSetData($Input_1, _StringAddThousandsSep($sInput_Read))

но это не работает: при вводе 123456789 он выдает 1,23456789

Спасибо beve, я понял в чем была обшибка. _StringAddThousandsSep не правильно обрабатывает строку с пробелами(которые сам и ставил), т.е "1 2345" превращались "1,2345". Надо было просто каждый раз убирать пробелы.

Цитата beve:
Вот, в прикрепленном файле пример, а то как я не старался, при копировании на форум, скрипт стает, нерабочий... »
Спасибо.

Отправлено: 07:41, 05-05-2009 | #4


Аватара для beve

Старожил


Сообщения: 307
Благодарности: 137

Профиль | Отправить PM | Цитировать


Цитата san45:
я понял в чем была обшибка. _StringAddThousandsSep не правильно обрабатывает строку с пробелами(которые сам и ставил), т.е "1 2345" превращались "1,2345". Надо было просто каждый раз убирать пробелы. »
Думаеш, причина в пробелах? Нет, там не пробел. Сам намучался, попробуй, набери число этак знаков 12, там где ты просто будеш заменять пробел, увидиш...
А там в моем примере 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


Аватара для SyDr

Старожил


Сообщения: 215
Благодарности: 62

Профиль | Отправить PM | Цитировать


Это символ с порядковым номером 160 (A0, 00A0)

У обычного пробела порядковый номер 32 (20, 0020)

Отправлено: 15:36, 05-05-2009 | #6


Аватара для beve

Старожил


Сообщения: 307
Благодарности: 137

Профиль | Отправить PM | Цитировать


Цитата Sylver Dragon:
Это символ с порядковым номером 160 (A0, 00A0) »
Тогда подскажи как в этой функции: StringRegExpReplace($a,"*",""), чтоб можно было на форум вставить, вместо * вставить этот символ "A0", и чтоб функциональность функции не потерялась при копировании с форума и вставлении в Редактор.

-------
Не в кількості знань полягає освіта, а в повному розумінні і вмілому використанні того, що знаєш.


Отправлено: 16:21, 05-05-2009 | #7


Аватара для SyDr

Старожил


Сообщения: 215
Благодарности: 62

Профиль | Отправить PM | Цитировать


$S = Chr(160)
StringRegExpReplace($a, $S,"")

Ну или сразу функцию на место вставить.

-------

"Что мы думаем, знаем или во что верим в конце концов не так уж и важно.
Важно лишь то, что мы делаем."
Джон Раскин

Это сообщение посчитали полезным следующие участники:

Отправлено: 19:54, 05-05-2009 | #8


Аватара для beve

Старожил


Сообщения: 307
Благодарности: 137

Профиль | Отправить PM | Цитировать


Цитата Sylver Dragon:
Ну или сразу функцию на место вставить »
Все работает, пример свой исправил.

-------
Не в кількості знань полягає освіта, а в повному розумінні і вмілому використанні того, що знаєш.


Отправлено: 22:05, 05-05-2009 | #9


Новый участник


Сообщения: 6
Благодарности: 1

Профиль | Отправить 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



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Вывод текста в заданном формате

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход