Что нового

Вывод на печать содержимого окна по нажатию кнопки внутри этого окна

Степан

Новичок
Сообщения
7
Репутация
0
Сделал программу для расчёта, в $Input1 ввожу данные, по нажатию $Button1 в 4х $Edit отображаются посчитанные данные. В углу хочу сделать $Button2, по нажатию которой должно распечататься либо всё окно либо значения четырёх $Edit, но не знаю как это реализовать. Сам я инж-констр. от программирования далёк, прогу писал с интернетом, инструкцией и матом. Но очень надо её добить.
 

axlwor

Скриптер
Сообщения
657
Репутация
147
OffTopic:
я бы для этого использовал электронные таблицы. Ввод одного (и более) значения. Расчет. Печать


в autoit... печатай содержимое активного окна :laugh:
 
Автор
С

Степан

Новичок
Сообщения
7
Репутация
0
с помощью какой функции? Что написать в значении button2 ?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Степан,
Попробуйте так:
Код:
#include <GUIConstantsEx.au3>
#include <EditConstants.au3>
#include <File.au3>

Dim $aInput[5] = [4]
GUICreate('Test', 200, 200)
$nInput = GUICtrlCreateInput('', 10, 10, 180, 20)
GUICtrlSetTip(-1, 'Введите число')
For $i = 1 To $aInput[0]
	$aInput[$i] = GUICtrlCreateInput('', 10, 40 + ($i - 1) * 30, 180, 20, $ES_READONLY)
	GUICtrlSetTip(-1, 'число x ' & $i + 1)
Next
$nButton_Count = GUICtrlCreateButton('Считать', 10, 160, 85, 30)
$nButton_Print = GUICtrlCreateButton('Печать', 105, 160, 85, 30)
GUICtrlSetState(-1, $GUI_DISABLE)
GUISetState()

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $nButton_Count
			$iNum = Number(GUICtrlRead($nInput))
			If $iNum Then
				For $i = 1 To $aInput[0]
					GUICtrlSetData($aInput[$i], $iNum * ($i + 1))
				Next
				GUICtrlSetState($nButton_Print, $GUI_ENABLE)
			EndIf
		Case $nButton_Print
			$sTempFile = _TempFile(@TempDir, '~', '.txt')
			$sText = 'Число = ' & $iNum & @CRLF & 'Результат расчетов:' & @CRLF
			For $i = 1 To $aInput[0]
				$sText &= $iNum & ' x ' & $i + 1 & ' = ' & GUICtrlRead($aInput[$i]) & @CRLF
			Next
			$hFile = FileOpen($sTempFile, 2)
			FileWrite($hFile, $sText)
			FileClose($hFile)
			ShellExecuteWait($sTempFile, '', '', 'print', @SW_HIDE)
			FileDelete($sTempFile)
			GUICtrlSetData($nInput, '')
			For $i = 1 To $aInput[0]
				GUICtrlSetData($aInput[$i], '')
			Next
			GUICtrlSetState($nButton_Print, $GUI_DISABLE)
	EndSwitch
WEnd
 
Автор
С

Степан

Новичок
Сообщения
7
Репутация
0
Ваш вариант конечно хорош, но наверное слишком непонятен для меня (у меня опыта мало пока). выкладываю кусочек того что есть у меня . Вопрос в том нельзя ли к кнопке 3 прикрепить какое то выражение что бы по её нажатию всё шло на принтер. В том что вы написали я не могу выделить (ума не хватает) кусок нужный мне. Помогите.

Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$Form1 = GUICreate("Расчёт ", 526, 312, 192, 121)
GUISetBkColor(0x0BC0FD)


$Button1 = GUICtrlCreateButton("H6", 6, 105, 55, 25)
$Button2 = GUICtrlCreateButton("H7", 63, 105, 55, 25)
$Button3 = GUICtrlCreateButton("Печать", 150, 105, 55, 25)


$Group1 = GUICtrlCreateGroup("Исходные данные", 16, 8, 121, 75)
$Group7 = GUICtrlCreateGroup("Dном", 32, 27, 89, 49)

$Input1 = GUICtrlCreateInput("", 40, 43, 57, 21)
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUICtrlCreateGroup("", -99, -99, 1, 1)

$Group2 = GUICtrlCreateGroup("Размеры ", 184, 8, 321, 75)
$Group3 = GUICtrlCreateGroup("Dпр", 192, 27, 73, 49)

$Edit1 = GUICtrlCreateEdit("", 200, 43, 57, 25, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_WANTRETURN))
GUICtrlSetData(-1, "")
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group4 = GUICtrlCreateGroup("Dне", 269, 27, 73, 49)

$Edit2 = GUICtrlCreateEdit("", 277, 43, 57, 25, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_WANTRETURN))
GUICtrlSetData(-1, "")
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group5 = GUICtrlCreateGroup("Пред. откл.", 346, 27, 73, 49)

$Edit3 = GUICtrlCreateEdit("", 354, 43, 57, 25, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_WANTRETURN))
GUICtrlSetData(-1, "")
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group6 = GUICtrlCreateGroup("Изнош. пр.", 423, 27, 73, 49)

$Edit4 = GUICtrlCreateEdit("", 431, 43, 57, 25, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_WANTRETURN))
GUICtrlSetData(-1, "")
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUISetState(@SW_SHOW)


While 1
   $sInput1 = GUICtrlRead($Input1)
   
Switch GUIGetMsg()
   Case $GUI_EVENT_CLOSE
		Exit 
  Case $Button1
	Switch $sInput1
	
	Case 0.1 To 3  	
	$b=GUICtrlRead($Input1)+0.0015
	$z=GUICtrlRead($Input1)+0.0065
	$f=-0.0012
	$g=GUICtrlRead($Input1)-1+0.9990
	
	GUICtrlSetData($Edit1, $b)
	GUICtrlSetData($Edit2, $z)
	GUICtrlSetData($Edit3, $f)
	GUICtrlSetData($Edit4, $g)
	
	Case 3 To 6
	$b=GUICtrlRead($Input1)+0.0025
	$z=GUICtrlRead($Input1)+0.0085
	$f=-0.0015
	$g=GUICtrlRead($Input1)-1+0.9990
    
	GUICtrlSetData($Edit1, $b)
	GUICtrlSetData($Edit2, $z)
	GUICtrlSetData($Edit3, $f)
	GUICtrlSetData($Edit4, $g)
	
	Case 6 To 10  	
	$b=GUICtrlRead($Input1)+0.0025
	$z=GUICtrlRead($Input1)+0.0095
	$f=-0.0015
	$g=GUICtrlRead($Input1)-1+0.9990
    
	GUICtrlSetData($Edit1, $b)
	GUICtrlSetData($Edit2, $z)
	GUICtrlSetData($Edit3, $f)
	GUICtrlSetData($Edit4, $g)	
	
	Case 10 To 18
	$b=GUICtrlRead($Input1)+0.0030
	$z=GUICtrlRead($Input1)+0.0120
	$f=-0.0020
	$g=GUICtrlRead($Input1)-1+0.9985
    
	GUICtrlSetData($Edit1, $b)
	GUICtrlSetData($Edit2, $z)
	GUICtrlSetData($Edit3, $f)
	GUICtrlSetData($Edit4, $g)	
		
	Case 18 To 30  	
	$b=GUICtrlRead($Input1)+0.0035
	$z=GUICtrlRead($Input1)+0.0140
	$f=-0.0025
	$g=GUICtrlRead($Input1)-1+0.9985
    
	GUICtrlSetData($Edit1, $b)
	GUICtrlSetData($Edit2, $z)
	GUICtrlSetData($Edit3, $f)
	GUICtrlSetData($Edit4, $g)	
		
	Case 30 To 50
	$b=GUICtrlRead($Input1)+0.0040
	$z=GUICtrlRead($Input1)+0.0170
	$f=-0.0025
	$g=GUICtrlRead($Input1)-1+0.9980
    
	GUICtrlSetData($Edit1, $b)
	GUICtrlSetData($Edit2, $z)
	GUICtrlSetData($Edit3, $f)
	GUICtrlSetData($Edit4, $g)	
		
	Case 50 To 80  	
	$b=GUICtrlRead($Input1)+0.0040
	$z=GUICtrlRead($Input1)+0.0205
	$f=-0.0030
	$g=GUICtrlRead($Input1)-1+0.9980
    
	GUICtrlSetData($Edit1, $b)
	GUICtrlSetData($Edit2, $z)
	GUICtrlSetData($Edit3, $f)
	GUICtrlSetData($Edit4, $g)	
		
	Case Else
	GUICtrlSetData($Edit1, "Ошибка" )
	GUICtrlSetData($Edit2, "Ошибка" )
	GUICtrlSetData($Edit3, "Ошибка" )
	GUICtrlSetData($Edit4, "Ошибка" )
	
EndSwitch


  Case $Button2
	Switch $sInput1
	
	Case 0 To 3  	
	$b=GUICtrlRead($Input1)+0.0025
	$z=GUICtrlRead($Input1)+0.0110
	$f=-0.0020
	$g=GUICtrlRead($Input1)-1+0.9985
    
	GUICtrlSetData($Edit1, $b)
	GUICtrlSetData($Edit2, $z)
	GUICtrlSetData($Edit3, $f)
	GUICtrlSetData($Edit4, $g)	
		
	Case 3 To 6
	$b=GUICtrlRead($Input1)+0.0035
	$z=GUICtrlRead($Input1)+0.0130
	$f=-0.0025
	$g=GUICtrlRead($Input1)-1+0.9985
    
	GUICtrlSetData($Edit1, $b)
	GUICtrlSetData($Edit2, $z)
	GUICtrlSetData($Edit3, $f)
	GUICtrlSetData($Edit4, $g)	
			
	Case 6 To 10  	
	$b=GUICtrlRead($Input1)+0.0035
	$z=GUICtrlRead($Input1)+0.0160
	$f=-0.0025
	$g=GUICtrlRead($Input1)-1+0.9985
    
	GUICtrlSetData($Edit1, $b)
	GUICtrlSetData($Edit2, $z)
	GUICtrlSetData($Edit3, $f)
	GUICtrlSetData($Edit4, $g)	
		
	
	    
		Case Else
	GUICtrlSetData($Edit1, "Ошибка" ) 
	GUICtrlSetData($Edit2, "Ошибка" )
	GUICtrlSetData($Edit3, "Ошибка" )
	GUICtrlSetData($Edit4, "Ошибка" )
	
  EndSwitch
  
 Case $Button3
EndSwitch
WEnd
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Степан,
Попробуйте так:
Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <File.au3>

$Form1 = GUICreate("Расчёт ", 526, 312)
GUISetBkColor(0x0BC0FD)

$Button1 = GUICtrlCreateButton("H6", 6, 105, 55, 25)
$Button2 = GUICtrlCreateButton("H7", 63, 105, 55, 25)
$Button3 = GUICtrlCreateButton("Печать", 150, 105, 55, 25)
GUICtrlSetState(-1, $GUI_DISABLE)

$Group1 = GUICtrlCreateGroup("Исходные данные", 16, 8, 121, 75)
$Group7 = GUICtrlCreateGroup("Dном", 32, 27, 89, 49)

$Input1 = GUICtrlCreateInput("", 40, 43, 57, 21)
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUICtrlCreateGroup("", -99, -99, 1, 1)

$Group2 = GUICtrlCreateGroup("Размеры ", 184, 8, 321, 75)
$Group3 = GUICtrlCreateGroup("Dпр", 192, 27, 73, 49)

$Edit1 = GUICtrlCreateEdit("", 200, 43, 57, 25, BitOR($ES_AUTOVSCROLL, $ES_AUTOHSCROLL, $ES_WANTRETURN))
GUICtrlSetData(-1, "")
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group4 = GUICtrlCreateGroup("Dне", 269, 27, 73, 49)

$Edit2 = GUICtrlCreateEdit("", 277, 43, 57, 25, BitOR($ES_AUTOVSCROLL, $ES_AUTOHSCROLL, $ES_WANTRETURN))
GUICtrlSetData(-1, "")
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group5 = GUICtrlCreateGroup("Пред. откл.", 346, 27, 73, 49)

$Edit3 = GUICtrlCreateEdit("", 354, 43, 57, 25, BitOR($ES_AUTOVSCROLL, $ES_AUTOHSCROLL, $ES_WANTRETURN))
GUICtrlSetData(-1, "")
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group6 = GUICtrlCreateGroup("Изнош. пр.", 423, 27, 73, 49)

$Edit4 = GUICtrlCreateEdit("", 431, 43, 57, 25, BitOR($ES_AUTOVSCROLL, $ES_AUTOHSCROLL, $ES_WANTRETURN))
GUICtrlSetData(-1, "")
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUISetState(@SW_SHOW)

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button1
			$sH = 'H6'
			$fPrint = True
			$iInput1 = Number(GUICtrlRead($Input1))
			Switch $iInput1
				Case 0.1 To 3
					$b = $iInput1 + 0.0015
					$z = $iInput1 + 0.0065
					$f = -0.0012
					$g = $iInput1 - 1 + 0.9990
					GUICtrlSetData($Edit1, $b)
					GUICtrlSetData($Edit2, $z)
					GUICtrlSetData($Edit3, $f)
					GUICtrlSetData($Edit4, $g)
				Case 3 To 6
					$b = $iInput1 + 0.0025
					$z = $iInput1 + 0.0085
					$f = -0.0015
					$g = $iInput1 - 1 + 0.9990
					GUICtrlSetData($Edit1, $b)
					GUICtrlSetData($Edit2, $z)
					GUICtrlSetData($Edit3, $f)
					GUICtrlSetData($Edit4, $g)
				Case 6 To 10
					$b = $iInput1 + 0.0025
					$z = $iInput1 + 0.0095
					$f = -0.0015
					$g = $iInput1 - 1 + 0.9990
					GUICtrlSetData($Edit1, $b)
					GUICtrlSetData($Edit2, $z)
					GUICtrlSetData($Edit3, $f)
					GUICtrlSetData($Edit4, $g)
				Case 10 To 18
					$b = $iInput1 + 0.0030
					$z = $iInput1 + 0.0120
					$f = -0.0020
					$g = $iInput1 - 1 + 0.9985
					GUICtrlSetData($Edit1, $b)
					GUICtrlSetData($Edit2, $z)
					GUICtrlSetData($Edit3, $f)
					GUICtrlSetData($Edit4, $g)
				Case 18 To 30
					$b = $iInput1 + 0.0035
					$z = $iInput1 + 0.0140
					$f = -0.0025
					$g = $iInput1 - 1 + 0.9985
					GUICtrlSetData($Edit1, $b)
					GUICtrlSetData($Edit2, $z)
					GUICtrlSetData($Edit3, $f)
					GUICtrlSetData($Edit4, $g)
				Case 30 To 50
					$b = $iInput1 + 0.0040
					$z = $iInput1 + 0.0170
					$f = -0.0025
					$g = $iInput1 - 1 + 0.9980
					GUICtrlSetData($Edit1, $b)
					GUICtrlSetData($Edit2, $z)
					GUICtrlSetData($Edit3, $f)
					GUICtrlSetData($Edit4, $g)
				Case 50 To 80
					$b = $iInput1 + 0.0040
					$z = $iInput1 + 0.0205
					$f = -0.0030
					$g = $iInput1 - 1 + 0.9980
					GUICtrlSetData($Edit1, $b)
					GUICtrlSetData($Edit2, $z)
					GUICtrlSetData($Edit3, $f)
					GUICtrlSetData($Edit4, $g)
				Case Else
					GUICtrlSetData($Edit1, "Ошибка")
					GUICtrlSetData($Edit2, "Ошибка")
					GUICtrlSetData($Edit3, "Ошибка")
					GUICtrlSetData($Edit4, "Ошибка")
					$fPrint = False
			EndSwitch
			If $fPrint Then
				GUICtrlSetState($Button3, $GUI_ENABLE)
			Else
				GUICtrlSetState($Button3, $GUI_DISABLE)
			EndIf
		Case $Button2
			$sH = 'H7'
			$fPrint = True
			$iInput1 = Number(GUICtrlRead($Input1))
			Switch $iInput1
				Case 0 To 3
					$b = $iInput1 + 0.0025
					$z = $iInput1 + 0.0110
					$f = -0.0020
					$g = $iInput1 - 1 + 0.9985
					GUICtrlSetData($Edit1, $b)
					GUICtrlSetData($Edit2, $z)
					GUICtrlSetData($Edit3, $f)
					GUICtrlSetData($Edit4, $g)
				Case 3 To 6
					$b = $iInput1 + 0.0035
					$z = $iInput1 + 0.0130
					$f = -0.0025
					$g = $iInput1 - 1 + 0.9985
					GUICtrlSetData($Edit1, $b)
					GUICtrlSetData($Edit2, $z)
					GUICtrlSetData($Edit3, $f)
					GUICtrlSetData($Edit4, $g)
				Case 6 To 10
					$b = $iInput1 + 0.0035
					$z = $iInput1 + 0.0160
					$f = -0.0025
					$g = $iInput1 - 1 + 0.9985
					GUICtrlSetData($Edit1, $b)
					GUICtrlSetData($Edit2, $z)
					GUICtrlSetData($Edit3, $f)
					GUICtrlSetData($Edit4, $g)
				Case Else
					GUICtrlSetData($Edit1, "Ошибка")
					GUICtrlSetData($Edit2, "Ошибка")
					GUICtrlSetData($Edit3, "Ошибка")
					GUICtrlSetData($Edit4, "Ошибка")
					$fPrint = False
			EndSwitch
			If $fPrint Then
				GUICtrlSetState($Button3, $GUI_ENABLE)
			Else
				GUICtrlSetState($Button3, $GUI_DISABLE)
			EndIf
		Case $Button3
			$sText = $sH & ': Dном = ' & $iInput1 & @CRLF
			$sText &= '---------------' & @CRLF
			$sText &= 'Dпр = ' & GUICtrlRead($Edit1) & @CRLF
			$sText &= 'Dне = ' & GUICtrlRead($Edit2) & @CRLF
			$sText &= 'Пред. откл. = ' & GUICtrlRead($Edit3) & @CRLF
			$sText &= 'Изнош. пр. = ' & GUICtrlRead($Edit4) & @CRLF
			$sText &= '---------------'
			$sTempFile = _TempFile(@TempDir, '~', '.txt')
			$hFile = FileOpen($sTempFile, 2)
			FileWrite($hFile, $sText)
			FileClose($hFile)
			ShellExecuteWait($sTempFile, '', '', 'print', @SW_HIDE)
			FileDelete($sTempFile)
			GUICtrlSetData($Edit1, '')
			GUICtrlSetData($Edit2, '')
			GUICtrlSetData($Edit3, '')
			GUICtrlSetData($Edit4, '')
			GUICtrlSetState($Button3, $GUI_DISABLE)
	EndSwitch
WEnd
Код можно значительно сократить за счет использования массивов. Если надо, могу попробовать. :smile:

Надо бы еще поменять:
Код:
;...
Case 3 To 6
	;...
Case 6 To 10
	;...
;на, например,:
;...
Case 3 To 6
	;...
Case 6.1 To 10
	;...
В Вашем варианте будет срабатывать первое условие. Вводимые числа сколько знаков после запятой должны иметь?
 
Автор
С

Степан

Новичок
Сообщения
7
Репутация
0
Один знак после запятой. Менять не надо. И так работает норм. При 6 одно значение при 6.1 уже значение второго case. Массивы это конечно хорошо но вроде и так работает а загружать вас по мелочам не буду. Большое спасибо за помощь , чуть под себя скорректировал Ваш код и всё заработало. Ещё раз ОГРОМНОЕ спасибо!!!
 
Автор
С

Степан

Новичок
Сообщения
7
Репутация
0
Ну раз уж пошла такая пьянка ещё спрошу: При case 3 to 6 должна показываться одна картинка при case 6 to 10 другая, ну это понятно, а как сделать что бы они ещё и в отчёте печатались? Понимаю что в Case $Button3 нужно подставить ещё и вывод картинки но то как я это делаю не получается. Подскажите как правильно?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Степан [?]
а как сделать что бы они ещё и в отчёте печатались
Блокнот вроде изображения не поддерживает. ИМХО, можно в Word сделать шаблон, а потом вставлять в него нужные данные и картинки или сделать шаблон в Excel с нужными картинками на разных листах. Сделайте шаблон, дайте картинки, попробую.

Небольшие изменения в коде. На ввод в $Input1 ограничения: только числа от 0 до 80, потом они округляются до 1 знака после запятой, запятая автоматически меняется на точку.
Код:
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <File.au3>

Dim $aH6[7][4] = [[0.0015, 0.0065, -0.0012, -0.0010],[0.0025, 0.0085, -0.0015, -0.0010], _
		[0.0025, 0.0095, -0.0015, -0.0010],[0.0030, 0.0120, -0.0020, -0.0015], _
		[0.0035, 0.0140, -0.0025, -0.0015],[0.0040, 0.0170, -0.0025, -0.0020], _
		[0.0040, 0.0205, -0.0030, -0.0020]]

Dim $aH7[3][4] = [[0.0025, 0.0110, -0.0020, -0.0015],[0.0035, 0.0130, -0.0025, -0.0015], _
		[0.0035, 0.0160, -0.0025, -0.0015]]

Dim $aEdit[5][2] = [[4],['Dпр'],['Dне'],['Пред. откл'],['Изнош. пр.']]

$hGui = GUICreate('Расчёт ', 526, 312)
GUISetBkColor(0x0BC0FD)
$nButton_H6 = GUICtrlCreateButton('H6', 6, 105, 55, 25)
$nButton_H7 = GUICtrlCreateButton('H7', 63, 105, 55, 25)
$nButton_Print = GUICtrlCreateButton('Печать', 150, 105, 55, 25)
GUICtrlSetState(-1, $GUI_DISABLE)
GUICtrlCreateGroup('Исходные данные', 16, 8, 121, 75)
GUICtrlCreateGroup('Dном', 32, 27, 89, 49)
$Input1 = GUICtrlCreateInput('', 40, 43, 57, 21)
GUICtrlCreateGroup('', -99, -99, 1, 1)
GUICtrlCreateGroup('', -99, -99, 1, 1)
$Group2 = GUICtrlCreateGroup('Размеры ', 184, 8, 321, 75)
For $i = 1 To $aEdit[0][0]
	$aEdit[$i][1] = GUICtrlCreateEdit('', 200 + ($i - 1) * 77, 43, 57, 25, $ES_READONLY)
	GUICtrlCreateGroup($aEdit[$i][0], 192 + ($i - 1) * 77, 27, 73, 49)
	GUICtrlCreateGroup('', -99, -99, 1, 1)
Next
GUICtrlCreateGroup('', -99, -99, 1, 1)
GUISetState()
GUIRegisterMsg($WM_COMMAND, 'WM_COMMAND')

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
		Case $nButton_H6
			$sH = 'H6'
			$fPrint = True
			$iInput1 = GUICtrlRead($Input1)
			If Not $iInput1 Then ContinueLoop
			$iInput1 = Number(StringFormat('%.1f', $iInput1))
			GUICtrlSetData($Input1, StringFormat('%.1f', $iInput1))
			Switch $iInput1
				Case 0.1 To 3
					$iIndex = 0
				Case 3.1 To 6
					$iIndex = 1
				Case 6.1 To 10
					$iIndex = 2
				Case 10.1 To 18
					$iIndex = 3
				Case 18.1 To 30
					$iIndex = 4
				Case 30.1 To 50
					$iIndex = 5
				Case 50.1 To 80
					$iIndex = 6
				Case Else
					$fPrint = False
			EndSwitch
			If $fPrint Then
				For $i = 1 To $aEdit[0][0]
					If $i = 3 Then
						GUICtrlSetData($aEdit[$i][1], StringFormat('%.4f', $aH6[$iIndex][$i - 1]))
					Else
						GUICtrlSetData($aEdit[$i][1], StringFormat('%.4f', $iInput1 + $aH6[$iIndex][$i - 1]))
					EndIf
				Next
				GUICtrlSetState($nButton_Print, $GUI_ENABLE)
			Else
				For $i = 1 To $aEdit[0][0]
					GUICtrlSetData($aEdit[$i][1], 'Ошибка')
				Next
				GUICtrlSetState($nButton_Print, $GUI_DISABLE)
			EndIf
		Case $nButton_H7
			$sH = 'H7'
			$fPrint = True
			$iInput1 = GUICtrlRead($Input1)
			If Not $iInput1 Then ContinueLoop
			$iInput1 = Number(StringFormat('%.1f', $iInput1))
			GUICtrlSetData($Input1, StringFormat('%.1f', $iInput1))
			Switch $iInput1
				Case 0 To 3
					$iIndex = 0
				Case 3.1 To 6
					$iIndex = 1
				Case 6.1 To 10
					$iIndex = 2
				Case Else
					$fPrint = False
			EndSwitch
			If $fPrint Then
				For $i = 1 To $aEdit[0][0]
					If $i = 3 Then
						GUICtrlSetData($aEdit[$i][1], StringFormat('%.4f', $aH7[$iIndex][$i - 1]))
					Else
						GUICtrlSetData($aEdit[$i][1], StringFormat('%.4f', $iInput1 + $aH7[$iIndex][$i - 1]))
					EndIf
				Next
				GUICtrlSetState($nButton_Print, $GUI_ENABLE)
			Else
				For $i = 1 To $aEdit[0][0]
					GUICtrlSetData($aEdit[$i][1], 'Ошибка')
				Next
				GUICtrlSetState($nButton_Print, $GUI_DISABLE)
			EndIf
		Case $nButton_Print
			$sText = $sH & ': Dном = ' & GUICtrlRead($Input1) & @CRLF
			$sText &= '---------------' & @CRLF
			For $i = 1 To $aEdit[0][0]
				$sText &= $aEdit[$i][0] & ' = ' & GUICtrlRead($aEdit[$i][1]) & @CRLF
			Next
			$sText &= '---------------'
			$sTempFile = _TempFile(@TempDir, '~', '.txt')
			$hFile = FileOpen($sTempFile, 2)
			FileWrite($hFile, $sText)
			FileClose($hFile)
			ShellExecuteWait($sTempFile, '', '', 'print', @SW_HIDE)
			FileDelete($sTempFile)
			For $i = 1 To $aEdit[0][0]
				GUICtrlSetData($aEdit[$i][1], '')
			Next
			GUICtrlSetState($nButton_Print, $GUI_DISABLE)
	EndSwitch
WEnd

Func WM_COMMAND($hWnd, $imsg, $iwParam, $ilParam)
	Local $nNotifyCode, $nID, $sString
	$nNotifyCode = BitShift($iwParam, 16)
	$nID = BitAND($iwParam, 0xFFFF)
	Switch $nID
		Case $Input1
			Switch $nNotifyCode
				Case $EN_CHANGE
					$sString = GUICtrlRead($Input1)
					If StringInStr($sString, ',') Then
						$sString = StringReplace($sString, ',', '.')
						GUICtrlSetData($Input1, $sString)
					EndIf
					If Not StringIsDigit($sString) And Not _StringIsFloat($sString) Then
						GUICtrlSetData($Input1, StringTrimRight($sString, 1))
					EndIf
					If Number($sString) > 80 Then
						GUICtrlSetData($Input1, '80')
					EndIf
			EndSwitch
	EndSwitch
	Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_COMMAND

Func _StringIsFloat($vString)
	Return StringRegExp($vString, '\A(\d+\.\d*|\d*\.\d+)\z')
EndFunc   ;==>_StringIsFloat
 
Автор
С

Степан

Новичок
Сообщения
7
Репутация
0
Прошлый код я понимал. Новый как китайская грамота. Мне нужно время что бы его осмыслить. Вводить числа с более чем одним знаком после запятой и не требуется. Шаблон сделаю. Но в принципе любая картинка в любом месте. Потом она выводится рядом с отчётом тоже в любом месте. Спасибо за помощь.

PS: А может есть способ сделать проще, может пустить в печать само окно программы? Вот как прога отображается так и печатать. Или нет такой функции?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Степан, Если Вы вставите это:
Код:
#include <ScreenCapture.au3>

;...
Case $nButton_Print
	$sTempFileScreen = _TempFile(@TempDir, '~', '.jpg')
	_ScreenCapture_CaptureWnd($sTempFileScreen, $hGui, 0, 0, -1, -1, False)
	ShellExecute($sTempFileScreen)
;...

То получите скриншот окна, но как его распечатать я не знаю.

Прошлый код я понимал. Новый как китайская грамота.
Вы сделайте шаблон, дайте картинки, а я, когда буду писать код, буду комментировать его.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Если по простому, то распечатать можно с помощью этой UDF.

:smile:
 
Автор
С

Степан

Новичок
Сообщения
7
Репутация
0
Всем большое спасибо за помощь. Насобирал из кусков и вроде получилось то что нужно.

Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <File.au3>
#include <ScreenCapture.au3>
#include <IE.au3>


$Form1 = GUICreate("Пробы", 520, 212, 192, 121)
GUISetBkColor(0x0BC0FD)

$Button1 = GUICtrlCreateButton("H6", 6, 105, 40, 25)
$Button2 = GUICtrlCreateButton("H7", 48, 105, 40, 25)
$Button28 = GUICtrlCreateButton("Печать", 458, 186, 55, 25)

GUICtrlSetState(-1, $GUI_DISABLE)


GUICtrlSetState(-1, $GUI_DISABLE)

$Group1 = GUICtrlCreateGroup("Исходные данные", 16, 8, 150, 75)
$Group7 = GUICtrlCreateGroup("Dном", 32, 27, 105, 49)

$Input1 = GUICtrlCreateInput("", 40, 43, 45, 21)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Edit5 = GUICtrlCreateEdit("", 90, 43, 35, 21, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_WANTRETURN,$ES_READONLY))
	

$Group2 = GUICtrlCreateGroup("Размеры рабочего калибра", 184, 8, 321, 75)
$Group3 = GUICtrlCreateGroup("Dпр", 192, 27, 73, 49)

$Edit1 = GUICtrlCreateEdit("", 200, 43, 57, 25, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_WANTRETURN,$ES_READONLY))
GUICtrlSetData(-1, "")
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group4 = GUICtrlCreateGroup("Dне", 269, 27, 73, 49)

$Edit2 = GUICtrlCreateEdit("", 277, 43, 57, 25, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_WANTRETURN,$ES_READONLY))
GUICtrlSetData(-1, "")
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group5 = GUICtrlCreateGroup("Пред. откл.", 346, 27, 73, 49)

$Edit3 = GUICtrlCreateEdit("", 354, 43, 57, 25, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_WANTRETURN,$ES_READONLY))
GUICtrlSetData(-1, "")
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group6 = GUICtrlCreateGroup("Изнош. пр.", 423, 27, 73, 49)

$Edit4 = GUICtrlCreateEdit("", 431, 43, 57, 25, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_WANTRETURN,$ES_READONLY))
GUICtrlSetData(-1, "")
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUISetState(@SW_SHOW)
GUICtrlCreateLabel ("ФГУП НИИМаш",  8, 196, 100, 12)
GUICtrlCreateLabel ("КБ-ОГТ 2011",  405, 196, 50, 12)
	
While 1
   $sInput1 = GUICtrlRead($Input1)
   
Switch GUIGetMsg()
   Case $GUI_EVENT_CLOSE
		Exit 
  Case $Button1
	$sH = "H6"
	$fPrint = True	
	GUICtrlSetData($Edit5, $sH)
	Switch $sInput1
	
	Case 0.1 To 3  	
	$b=GUICtrlRead($Input1)+0.0015
	$z=GUICtrlRead($Input1)+0.0065
	$f=-0.0012
	$g=GUICtrlRead($Input1)-1+0.9990
	
	GUICtrlSetData($Edit1, $b)
	GUICtrlSetData($Edit2, $z)
	GUICtrlSetData($Edit3, $f)
	GUICtrlSetData($Edit4, $g)
	
	Case 3 To 6
	$b=GUICtrlRead($Input1)+0.0025
	$z=GUICtrlRead($Input1)+0.0085
	$f=-0.0015
	$g=GUICtrlRead($Input1)-1+0.9990
    
	
	GUICtrlSetData($Edit1, $b)
	GUICtrlSetData($Edit2, $z)
	GUICtrlSetData($Edit3, $f)
	GUICtrlSetData($Edit4, $g)
	
	Case 6 To 10  	
	$b=GUICtrlRead($Input1)+0.0025
	$z=GUICtrlRead($Input1)+0.0095
	$f=-0.0015
	$g=GUICtrlRead($Input1)-1+0.9990
    
	GUICtrlSetData($Edit1, $b)
	GUICtrlSetData($Edit2, $z)
	GUICtrlSetData($Edit3, $f)
	GUICtrlSetData($Edit4, $g)	
	
	
	Case Else
	GUICtrlSetData($Edit1, "Ошибка" )
	GUICtrlSetData($Edit2, "Ошибка" )
	GUICtrlSetData($Edit3, "Ошибка" )
	GUICtrlSetData($Edit4, "Ошибка" )
	$fPrint = False
EndSwitch
            If $fPrint Then
                GUICtrlSetState($Button28, $GUI_ENABLE)
            Else
                GUICtrlSetState($Button28, $GUI_DISABLE)
            EndIf


  Case $Button2
	$sH = "H7"
	$fPrint = True	
	GUICtrlSetData($Edit5, $sH)
	Switch $sInput1
	
	Case 0.1 To 3  	
	$b=GUICtrlRead($Input1)+0.0025
	$z=GUICtrlRead($Input1)+0.0110
	$f=-0.0020
	$g=GUICtrlRead($Input1)-1+0.9985
    
	GUICtrlSetData($Edit1, $b)
	GUICtrlSetData($Edit2, $z)
	GUICtrlSetData($Edit3, $f)
	GUICtrlSetData($Edit4, $g)	
		
	Case 3 To 6
	$b=GUICtrlRead($Input1)+0.0035
	$z=GUICtrlRead($Input1)+0.0130
	$f=-0.0025
	$g=GUICtrlRead($Input1)-1+0.9985
    
	GUICtrlSetData($Edit1, $b)
	GUICtrlSetData($Edit2, $z)
	GUICtrlSetData($Edit3, $f)
	GUICtrlSetData($Edit4, $g)	
			
	Case 6 To 10  	
	$b=GUICtrlRead($Input1)+0.0035
	$z=GUICtrlRead($Input1)+0.0160
	$f=-0.0025
	$g=GUICtrlRead($Input1)-1+0.9985
    
	GUICtrlSetData($Edit1, $b)
	GUICtrlSetData($Edit2, $z)
	GUICtrlSetData($Edit3, $f)
	GUICtrlSetData($Edit4, $g)	
		
	Case Else
	GUICtrlSetData($Edit1, "Ошибка" ) 
	GUICtrlSetData($Edit2, "Ошибка" )
	GUICtrlSetData($Edit3, "Ошибка" )
	GUICtrlSetData($Edit4, "Ошибка" )
	$fPrint = False
EndSwitch

            If $fPrint Then
                GUICtrlSetState($Button28, $GUI_ENABLE)
            Else
                GUICtrlSetState($Button28, $GUI_DISABLE)
            EndIf
			
    Case $Button28
		
	
$q=GUICreate("Результаты",350, 212, 192, 121) 

GUICtrlSetState(-1,$GUI_FOCUS)     


$Edit6 = GUICtrlCreateInput("", 40, 43, 45, 21, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_WANTRETURN,$ES_READONLY))
$Edit5 = GUICtrlCreateEdit("", 90, 43, 35, 21, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_WANTRETURN,$ES_READONLY))
$Edit1 = GUICtrlCreateEdit("", 30, 130, 57, 25, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_WANTRETURN,$ES_READONLY))
GUICtrlSetData(-1, "")
$Edit2 = GUICtrlCreateEdit("", 108, 130, 57, 25, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_WANTRETURN,$ES_READONLY))
GUICtrlSetData(-1, "")
$Edit3 = GUICtrlCreateEdit("", 185, 130, 57, 25, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_WANTRETURN,$ES_READONLY))
GUICtrlSetData(-1, "")


$Edit4 = GUICtrlCreateEdit("", 262, 130, 57, 25, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_WANTRETURN,$ES_READONLY))
GUICtrlSetData(-1, "")
GUICtrlSetData($Edit1, $b)
GUICtrlSetData($Edit2, $z)
GUICtrlSetData($Edit3, $f)
GUICtrlSetData($Edit4, $g)
GUICtrlSetData($Edit5, $sH)
GUICtrlSetData($Edit6, $sInput1)
GUISetState ()

    
	Switch $Edit6
	  Case   $sH = "H6" 
		  Switch $sInput1
		  Case 0.1 To 6  	
          GUICtrlCreatePic("pic\Prb-1.gif",180,18,160,65)
          Case Else
	      GUICtrlCreatePic("pic\Prb-2.gif",180,18, 160,65)
	      EndSwitch	
      Case   $sH = "H7" 
		  Switch $sInput1
		  Case 0.1 To 6  	
          GUICtrlCreatePic("pic\Prb-1.gif",180,18,160,65)
          Case Else
	      GUICtrlCreatePic("pic\Prb-2.gif",180,18, 160,65)
	      EndSwitch	
      
	  
	EndSwitch	

    $sTempFileScreen = _TempFile(@TempDir, 'Имя', '.jpg')
	_ScreenCapture_CaptureWnd($sTempFileScreen, $q, 0, 0, -1, -1, False)
	ShellExecute($sTempFileScreen,'', '', 'print', @SW_HIDE )
	Exit
EndSwitch	

WEnd
 
Верх