Что нового

Как можно вставить картинку в Edit (или подобные контролы)

sss

Продвинутый
Сообщения
332
Репутация
96
Всем доброго времени суток. Столкнулся с небольшой проблемой.
Делаю чат между 2 компами. Основу уже сделал, все работает, шифровку прикрутил, все супер. Но теперь хочу украсить, создать нормальный интерфейс, прибамбасы... Хочу вставить смайлы. Как в контрол подобный Edit'у вставить картинку? Конечно, это все необязательно, но хочется приукрасить немного... Заранее спасибо!
 
Автор
sss

sss

Продвинутый
Сообщения
332
Репутация
96
Хорошая идея! Только я с объектами икогда раньше не работал... Можешь пример показать?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Sky-WaLkeR
Посмотрите пример к функции _GUICtrlRichEdit_CanPaste. В нем в RichEdit bmp картинка вставляется.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Fever [?]
вместо едита используй обьект експлорера и картинку прикручивай с помощью html
Предупреждение За нарушение общих правил (пункт В.8):
Так как эта конференция называется "Русское сообщество AutoIt", язык общения на ней - Русский. Названия фирм или программных продуктов, аббревиатуры и т.д. должны быть написаны так, как они пишутся в оригинале, например не следует писать УСБ вместо USB. На форуме крайне не рекомендуется намеренно искажать русский язык и использовать "сетевой жаргон" на подобии "Аффтар выпей йадау!".


С уважением, Администратор форума.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Sky-WaLkeR [?]
Как в контрол подобный Edit'у вставить картинку?
Никак.

Воспользуйтесь UDF GuiRichEdit.au3
Код:
#include <GuiRichEdit.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$Form1 = GUICreate("Form1", 633, 454, 192, 114)
$hRichEdit = _GUICtrlRichEdit_Create($Form1, "", 7, 12, 619, 397, _
            BitOR($ES_MULTILINE, $WS_VSCROLL, $ES_AUTOVSCROLL))
$Button1 = GUICtrlCreateButton("Insert image", 546, 420, 75, 25, 0)
GUISetState(@SW_SHOW)

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
	Case $GUI_EVENT_CLOSE
		GUIDelete()
		Exit
	Case $Button1
		_GUICtrlRichEdit_AppendText($hRichEdit, "Привет! ")
		_GUICtrlRichEdit_AppendText($hRichEdit, ReadBmpToRtf(FindFirstBMP()))
		_GUICtrlRichEdit_AppendText($hRichEdit, @CR)
			
	EndSwitch
WEnd

Func ReadBmpToRtf($sBmpFilspc)
    Local $hFile, $sRtf
    $hFile = FileOpen($sBmpFilspc, 16)
    If FileRead($hFile, 2) <> "0x424D" Then Return SetError(1, 0, "")
    FileRead($hFile, 12)
    $sRtf = '{\rtf1{\pict\dibitmap ' & Hex(FileRead($hFile)) & '}}'
    FileClose($hFile)
    Return $sRtf
EndFunc   ;==>ReadBmpToRtf

Func FindFirstBMP($sPath = @ScriptDir)
    Local $hFind, $sBmpFilspc
    $hFind = FileFindFirstFile($sPath & "\*.bmp")
    $sBmpFilspc = FileFindNextFile($hFind)
    FileClose($hFind)
    Return $sPath & "\" & $sBmpFilspc
EndFunc   ;==>FindFirstBMP




Добавлено:
Сообщение автоматически объединено:

madmasles :shok:ops:
Опоздал :smile:
 

VladUs

Скриптер
Сообщения
621
Репутация
181
Sky-WaLkeR [?]
Хорошая идея! Только я с объектами икогда раньше не работал... Можешь пример показать?
Вот примерчик работы с объектом (анимация (.avi))
Код:
#include <GUIConstantsEx.au3>

$Gui = GUICreate("Form",400,300,Default,Default)
$oObject = ObjCreate("MSComCtl2.Animation.2")
$oObjectCtrl = GUICtrlCreateObj($oObject,4,3, 100,100)
$oObject.Open ("C:\Program Files\AutoIt3\Examples\GUI\sampleAVI.avi")
$oObject.Play

GUISetState()

While GUIGetMsg() <> $GUI_EVENT_CLOSE
WEnd
 
Автор
sss

sss

Продвинутый
Сообщения
332
Репутация
96
Garret
Супер, то, что я и хотел! Я так понимаю что только bmp можно? Хотя это неважно, вообще супер, спасибо огромное!
VladUs
Спасибо, легкий для восприятия пример работы с объектом. А как узнать имя нужного объекта? А как быть с текстовыми файлами? А с музыкой, а с ... А это уже тема другая, что-то разошелся я )
madmasles
Спасибо, полезная функция, пойду разбираться что еще можно прикрутить )
Всем огромное спасибо, тему считаю решенной абсолютно )
 

VladUs

Скриптер
Сообщения
621
Репутация
181
Sky-WaLkeR [?]
А как узнать имя нужного объекта?
Sky-WaLkeR
В справке имеется очень подробный материал по работе Autoit c COM - объектами. В том числе и как определить имя объекта.
(Просто не хочется пересказывать справку.)
 
Автор
sss

sss

Продвинутый
Сообщения
332
Репутация
96
Благодарю, полезная ссылка.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Garrett
Я немного изменил Ваш код.
Код:
#include <GuiRichEdit.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$fYes = False

$hGui = GUICreate('Test', 633, 454)
$hRichEdit = _GUICtrlRichEdit_Create($hGui, '', 7, 12, 619, 397, _
		BitOR($ES_MULTILINE, $WS_VSCROLL, $ES_AUTOVSCROLL))
$nButton = GUICtrlCreateButton('Insert image', 546, 420, 75, 25, 0)
GUISetState()

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			GUIDelete()
			Exit
		Case $nButton
			$fYes = Not $fYes
			If $fYes Then
				_GUICtrlRichEdit_AppendText($hRichEdit, 'Привет! ')
				_GUICtrlRichEdit_AppendText($hRichEdit, _RichEdit_smiley())
			Else
				_GUICtrlRichEdit_AppendText($hRichEdit, 'И тебе привет! ')
				_GUICtrlRichEdit_AppendText($hRichEdit, _RichEdit_wink())
			EndIf
			_GUICtrlRichEdit_AppendText($hRichEdit, @CR)
	EndSwitch
WEnd

Func _RichEdit_smiley()
	Local $bImage = '{\rtf1{\pict\dibitmap '
	$bImage &= '2800000014000000140000000100180000000000B00400000000000000000000'
	$bImage &= '0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF'
	$bImage &= 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF'
	$bImage &= 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F2EFC9D2D47E99A33A667714'
	$bImage &= '495F14495F3A66777E99A3C9D2D4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF'
	$bImage &= 'FFFFFFFFFFFFFFFFFFFFFFFFE3E5E47C98A2084D690A769E0B90BE0CA2D50B9F'
	$bImage &= 'D4098ABB076F9A084B687C98A2E3E5E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF'
	$bImage &= 'FFFFFFFFFFD0D7D83361730A6D8F10ACD912B7E214BBE514BBE512B7E210B0DE'
	$bImage &= '0DA7D80999CE076489315F72CFD6D7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8DD'
	$bImage &= 'DD1E53670E8FB614BCE517C5EB19CCEF1ACFF11ACFF119CCEF17C6EB14BCE510'
	$bImage &= 'AFDD0BA1D5077DAD1C5066D8DDDDFFFFFFFFFFFFFFFFFFF2F1EE6385920D82A6'
	$bImage &= '16C2E91ACEF01DD6F510344310344310344310344310344310344316C2E911B2'
	$bImage &= 'DF0BA1D507709B638592F2F1EEFFFFFFFFFFFFC5CFD109546F16BFE61BD1F21E'
	$bImage &= 'DBF810344321E4FE22E5FE22E5FE21E4FE20E1FC1FDBF910344316C2E910AFDE'
	$bImage &= '0A9BD0074E6CC4CED0FFFFFFFFFFFF7A96A10F86A81ACFF11FDBF910344322E5'
	$bImage &= 'FF22E6FF22E6FF22E6FF22E6FF22E5FF21E2FD1FDBF910344314BCE60DA7D907'
	$bImage &= '719B78959FFFFFFFFFFFFF3C677815B0D31DD7F600000022E5FF22E6FF22E6FF'
	$bImage &= '22E6FF22E6FF22E6FF22E6FF22E5FF20E1FC1DD7F600000010B1DE098CBD3B66'
	$bImage &= '78FFFFFFFFFFFF1D506518C4E71EDBF821E4FE22E6FF22E6FF22E6FF22E6FF22'
	$bImage &= 'E6FF22E6FF22E6FF22E6FF21E4FE1EDBF819CCEF13B7E20B9ACD1D5065FFFFFF'
	$bImage &= 'FFFFFF1D506519C7E91FDDFA22E5FE22E6FF22E6FF22E6FF22E6FF22E6FF22E6'
	$bImage &= 'FF22E6FF22E6FF22E5FE1FDDFA1ACFF114BAE40B9DCE1D5065FFFFFFFFFFFF3C'
	$bImage &= '677817B7D81FDDFA22E5FE22E6FF22E6FF10344322E6FF22E6FF22E6FF103443'
	$bImage &= '22E6FF22E5FE1FDDFA1ACFF114BAE40B92C03C6778FFFFFFFFFFFF7B97A1128F'
	$bImage &= 'AD1EDBF821E4FE22E6FF22E6FF10344322E6FF22E6FF22E6FF10344322E6FF21'
	$bImage &= 'E4FE1EDBF819CCEF12B7E20A769E7A96A1FFFFFFFFFFFFC7D0D20A566F1DD4F3'
	$bImage &= '20E1FC22E5FF22E6FF10344322E6FF22E6FF22E6FF10344322E5FF20E1FC1DD7'
	$bImage &= 'F617C6EB10AEDB08506DC5CFD1FFFFFFFFFFFFF3F2EF6586931293B01FDBF921'
	$bImage &= 'E2FD22E5FF22E6FF22E6FF22E6FF22E6FF22E5FF21E2FD1FDBF91ACFF114BCE6'
	$bImage &= '0B7CA2638592F2F1EEFFFFFFFFFFFFFFFFFFD8DDDD20556915A4C21EDBF820E1'
	$bImage &= 'FC21E4FE22E5FE22E5FE21E4FE20E1FC1EDBF81BD1F216C2E90E8DB4205469D8'
	$bImage &= 'DDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD1D8D8366375107E9A1CD1EF1EDBF8'
	$bImage &= '1FDDFA1FDDFA1EDBF81DD6F51ACEF016BCE40C7292366375D1D8D8FFFFFFFFFF'
	$bImage &= 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3E5E47C98A20A536C118AA716B2D21A'
	$bImage &= 'CCEE19C9EC14AACD0F83A409506A7C98A2E3E5E4FFFFFFFFFFFFFFFFFFFFFFFF'
	$bImage &= 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F2EFCCD4D5849EA7406A7B194D62194D'
	$bImage &= '623F697A819BA5CAD3D4F4F2EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF'
	$bImage &= 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF'
	$bImage &= 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF}}'
	Return $bImage
EndFunc   ;==>_RichEdit_smiley

Func _RichEdit_wink()
	Local $bImage = '{\rtf1{\pict\dibitmap '
	$bImage &= '2800000014000000140000000100080000000000900100000000000000000000'
	$bImage &= '000100000000000022E5FE001EDBF80020E1FC001FDBF9001ACFF10021E4FE00'
	$bImage &= '22E5FF00315F7200CFD6D7007996A00012B7E200D8DDDD0021E2FD0019CCEF00'
	$bImage &= '1FDDFA00E2E5E400F4F2EF00C9D2D40016C2E90014BCE500174C6100F2F1EE00'
	$bImage &= '1DD7F6001ACEF0001BD1F20014BAE40014495F001DD6F5000A759C00C5CFD100'
	$bImage &= '10B0DE001D506500809BA4001FDEFA003E697A0017C5EB0017C6EB0065869300'
	$bImage &= '0BA1D5003C6778007F9AA400098CBD00164B60000B9BCE000E90B7001DD5F400'
	$bImage &= '076E98001BCCED00084F6B0010ACD9000B90BD0016C0E7003663750010AFDC00'
	$bImage &= '0C73940016A8C600077CAC0013BAE400C4CED0000B9FD4000B58710009546F00'
	$bImage &= '16BDE4000F87A90014BCE6000B92C0001C5267007B97A100128FAD00084C6800'
	$bImage &= '0F85A60078959F000CA2D50014AACD000DA7D800084E6A000DA7D9000999CE00'
	$bImage &= '10AFDE000B799E007A96A1007D99A30007658B0018B9D9003B6678001CD1EF00'
	$bImage &= '107F9B00118DAB001D5267000A546E00076F9A000D82A50011B2DF0064869200'
	$bImage &= '19CAED000A9BD1000B9CCE000989BA0010AFDD001F5469006889950038647600'
	$bImage &= '16B3D70009516B001ACDEF001291AE00F3F2EF000E90B8001ACAEB00C7D0D200'
	$bImage &= '3D687900074E6B001D546800076E990016B2D2000A6E91001034430022E6FF00'
	$bImage &= 'C0C0C000FFFFFF00000000000000000000000000000000000000000000000000'
	$bImage &= '0000000000000000000000000000000000000000000000000000000000000000'
	$bImage &= '0000000000000000000000000000000000000000000000000000000000000000'
	$bImage &= '0000000000000000000000000000000000000000000000000000000000000000'
	$bImage &= '0000000000000000000000000000000000000000000000000000000000000000'
	$bImage &= '0000000000000000000000000000000000000000000000000000000000000000'
	$bImage &= '0000000000000000000000000000000000000000000000000000000000000000'
	$bImage &= '0000000000000000000000000000000000000000000000000000000000000000'
	$bImage &= '0000000000000000000000000000000000000000000000000000000000000000'
	$bImage &= '0000000000000000000000000000000000000000000000000000000000000000'
	$bImage &= '0000000000000000000000000000000000000000000000000000000000000000'
	$bImage &= '0000000000000000000000000000000000000000000000000000000000000000'
	$bImage &= '0000000000000000000000000000000000000000000000000000000000000000'
	$bImage &= '0000000000000000000000000000000000000000000000000000000000000000'
	$bImage &= '0000000000000000000000000000000000000000000000000000000000000000'
	$bImage &= '0000000000000000000000000000000000000000000000000000000000000000'
	$bImage &= '0000000000000000000000000000000000000000000000000000000000000000'
	$bImage &= '0000000000000000777777777777777777777777777777777777777777777777'
	$bImage &= '77101128271A1A272811107777777777777777770F094B1C32483B612E45090F'
	$bImage &= '77777777777777080773310A19190A1E4A4D52070877777777770B422C13230D'
	$bImage &= '04040D2313622638580B777777155D5B12171B017474747417125C2671251577'
	$bImage &= '773A3D3318030274000005027418124E5F6F1D7777473F04030C747575757506'
	$bImage &= '0C0304404C5A4377773466167474757575757575060216241E295477772A6C03'
	$bImage &= '05757575757575757505010D0A2B1F7777142F21007575757575757575000E04'
	$bImage &= '19601F7777655321007575757575757475000E0439416E777750440305757474'
	$bImage &= '747575747505010D0A1C5177771D3C2D02067575757575740602162435306D77'
	$bImage &= '77152569030C0675757575060C0304134F646A7777770B703701020500000502'
	$bImage &= '0118126B630B777777777708075655010E0E011B173E36070877777777777777'
	$bImage &= '0F09595772685E494667090F7777777777777777771011202214142220111077'
	$bImage &= '777777777777777777777777777777777777777777777777}}'
	Return $bImage
EndFunc   ;==>_RichEdit_wink
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
madmasles :ok:

P.S. IMHO, хорошо бы было, вообще обойтись без таких сложных манипуляций, и вставлять картинки в control, просто указывая путь к ней, по аналогии с html. :smile:
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Garrett [?]
IMHO, хорошо бы было, вообще обойтись без таких сложных манипуляций
А что здесь сложного:
Код:
$iLen = 64

$sFile = FileOpenDialog('Выберите файл', @ScriptDir & '\', 'Рисунок (*.bmp)', 1)
If Not $sFile Then Exit
$hFile = FileOpen($sFile, 16)
$sText = FileRead($hFile)
FileClose($hFile)
$sText = Hex($sText)
$sText = StringTrimLeft($sText, 28)
$iBytes = StringLen($sText)
$iInt = Int($iBytes / $iLen)
$iEnd = Mod($iBytes, $iLen)
$sFuncName = '_RichEdit' & '_' & StringRegExpReplace(StringReplace($sFile, '-', '_'), '.*\\|\.[^.]*$', '')
$bResult = "Func " & $sFuncName & "()" & @LF
$bResult &= @TAB & "Local $bImage = '{\rtf1{\pict\dibitmap '" & @LF
For $i = 1 To $iInt
	$bResult &= @TAB & "$bImage &= '" & StringLeft($sText, $iLen) & "'" & @LF
	$sText = StringTrimLeft($sText, $iLen)
Next
$bResult &= @TAB & "$bImage &= '" & StringLeft($sText, $iEnd) & "}}'" & @LF
$bResult &= @TAB & "Return $bImage" & @LF & "EndFunc   ;==>" & $sFuncName
$sFileNew = @ScriptDir & '\' & StringRegExpReplace($sFile, '.*\\|\.[^.]*$', '') & '.au3'
$hFileNew = FileOpen($sFileNew, 2)
FileWrite($hFileNew, $bResult)
FileClose($hFileNew)
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
madmasles отличный пример! :ok:
Но, я имел в виду что-то в этом роде:
Код:
$sFile = @ScriptDir & "\wink.bmp"
_GUICtrlRichEdit_AppendText($hRichEdit, $sFile)
 
Автор
sss

sss

Продвинутый
Сообщения
332
Репутация
96
madmasles
Классный пример! Спасибо за код который картинки в функцию переделывает!
Garret
Garrett сказал(а):
Но, я имел в виду что-то в этом роде
Спасибо, это то, что я искал! Но madmasles показал более необычное решение, и мне оно очень понравилось - не нужна картинка как файл.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Sky-WaLkeR
Может быть, это не совсем правильно, но я делаю так:
- преобразую смайл в .bmp;
- закрашиваю фон тем цветом, который будет фоновым в RichEdit;
- пропускаю картинку через скрипт.
 
Верх