Что нового

[Окна, Диалоги] [Окна, Диалоги] миниатюрная подсказка (утилита)

damien2008

Осваивающий
Сообщения
178
Репутация
34
всем привет
подскажите с такой ситуацией.

нужна утилита ~ <= 2-3 кб., по аналогии (
Код:
ToolTip()

autoit не подходит, т.к. файл получается 600 кб...

7 параметров: ([необязательный] - может быть указан при запуске, или отсутствовать)
текст (с переносами),
[необязательный] х,у,
[необязательный] иконка (0 = без иконки, 1 = иконка "информация", 2 = иконка "предупреждение", 3 = иконка "ошибка"),
[необязательный] время отображения,
[необязательный] заголовок,
[необязательный] 1 = центрировать подсказку по координатам x,y (по умолчанию это координаты левого верхнего угла подсказки).

может кто-то может сделать на чем-то другом кроме autoit'а... :smile:
если можно, с исходником )
 

Prog

Продвинутый
Сообщения
537
Репутация
65
Re: [Окна, Диалоги] миниатюрная подсказка (утилита)

damien2008 [?]
нужна утилита ~ <= 2-3 кб
Если не секрет зачем такая мелкая?

Передавать параметры нужно через командную строку exe файла?
 
Автор
damien2008

damien2008

Осваивающий
Сообщения
178
Репутация
34
Re: [Окна, Диалоги] миниатюрная подсказка (утилита)

не секрет.
можно и 5 кб.

сообщение выводить после завершения всяких процессов: установки, удаления, переименования, просто сервисное сообщение

да. через ком. строку
 

СН3СН2ОН

Знающий
Сообщения
78
Репутация
12
Re: [Окна, Диалоги] миниатюрная подсказка (утилита)

Вам нужен объект Internet.HHCtrl,
Код на vbs
Код:
Set Hh = CreateObject("Internet.HHCtrl")
Hh.TextPopup "Привет, Скрипт-кодинг!" & vbCrLf & _
"Контрол справки", "Lucida Console,8", 1, 1, 1, 1
WScript.Sleep 3000
Set Hh = Nothing
параметры прекрасно передаются через командную строку. Это не решение а направление.
 

Prog

Продвинутый
Сообщения
537
Репутация
65
Re: [Окна, Диалоги] миниатюрная подсказка (утилита)

damien2008 [?]
Как заказывали - 5 КБ. :smile:
Основной вес приходится на строковые функции и если их заменить скажем на функции из MSVCRT.dll, то вполне можно уменьшить размер до 3, а может и до 2 КБ.
Исходник.
Код:
EnableExplicit

#TTF_TRACK = $20

Structure Parameters
  Title.s
  Text.s
  x.l
  y.l
  Time.l
  Icon.b
EndStructure

Procedure GetParam(*Param.Parameters)
  Protected Count, i,Pos , Param.s
  Protected Cmd.s, Val.s, Cursor.POINT
  
  *Param\x=-1
  *Param\y=-1
  
  Count = CountProgramParameters()
  For i=0 To Count
    Param = LCase(ProgramParameter(i))
    Pos = FindString(Param, "=", 1)
    If Pos>0
      Cmd = Left(Param, Pos-1)
      Val = Right(Param, Len(Param)-Pos)
      If Cmd<>"" And Val<>""
        Select Cmd
          Case "x" : *Param\x=Val(Val)
          Case "y" : *Param\y=Val(Val)
          Case "title" : *Param\Title = Val
          Case "text" : *Param\Text = Val
          Case "time" : *Param\Time = Val(Val)
          Case "icon" : *Param\Icon = Val(Val)
        EndSelect
      EndIf
    EndIf
  Next i
  
  If *Param\x=-1 Or *Param\y=-1
    GetCursorPos_(@Cursor)
    If *Param\x=-1
      *Param\x=Cursor\x
    EndIf
    If *Param\y=-1
      *Param\y=Cursor\y
    EndIf
  EndIf
  
  If *Param\Time = 0
    *Param\Time = 10 ; Время по умолчанию.
  EndIf
  
EndProcedure

Procedure ShowToolTip(*Param.Parameters)
  Protected hWnd, Type
  Protected Balloon.TOOLINFO, msg.MSG
  
  Type=#TTS_NOPREFIX | #TTS_ALWAYSTIP
  
  hWnd=CreateWindowEx_(0,"ToolTips_Class32",0,Type,#CW_USEDEFAULT,#CW_USEDEFAULT,#CW_USEDEFAULT,#CW_USEDEFAULT, 0,0,0,0)
  
  Balloon\cbSize=SizeOf(TOOLINFO)
  Balloon\uFlags= #TTF_TRACK
  Balloon\lpszText=@*Param\Text
  
  SendMessage_(hWnd, #TTM_ADDTOOL, 0, @Balloon)
  SendMessage_(hWnd, #TTM_TRACKACTIVATE, 1, @Balloon)
  
  If *Param\Title
    SendMessage_(hWnd, #TTM_SETTITLE, *Param\Icon, @*Param\Title)
  EndIf
  
  SendMessage_(hWnd, #TTM_TRACKPOSITION, 0, (*Param\y<<16)|(*Param\x&$FFFF))
  SendMessage_(hWnd, #TTM_TRACKACTIVATE, #True, @Balloon)
  
  SetTimer_(hWnd, 1234, *Param\Time, 0)
    
  While GetMessage_(msg, 0, 0, 0)
    If msg\message = #WM_TIMER And msg\wParam = 1234
      Break
    EndIf
  Wend
  
EndProcedure

InitCommonControls_()
Define Param.Parameters

GetParam(@Param)
If Param\Time>0 And (Param\Title<>"" Or Param\Text<>"")
  ShowToolTip(@Param)
EndIf


End

; Команды для линкера, необходимые для уменьшения размера исполняемого файла.

Import "/merge:.text=.code" : EndImport
Import "/merge:.data=.code" : EndImport
Import "/merge:.rsrc=.code" : EndImport
Import "/merge:.bss=.code"  : EndImport
Import "/merge:.edata=.code" : EndImport
Import "/merge:.idata=.code" : EndImport
Import "/merge:.reloc=.code" : EndImport
Но мне кажется что будет удобнее работать с dll чем с exe. :smile:

Формат командной строки.
x=200 y=100 title=Заголовок text=Текст time=2000 icon=2
Если в тексте есть пробелы, то блок текста необходимо взять в кавычки, т. е. как это обычно производится в командной строке.

Прога собрана в ascii. Можно собрать с поддержкой юникода, но размер исполняемого файла немного увеличится.
 

Вложения

  • миниатюрная подсказка.zip
    4.4 КБ · Просмотры: 6
Автор
damien2008

damien2008

Осваивающий
Сообщения
178
Репутация
34
Re: [Окна, Диалоги] миниатюрная подсказка (утилита)

СН3СН2ОН, спасибо, есть аналогичное решение с помощью MSHTA. не очень корректно работает(, upd 1кб.

Prog :laugh:
that's it. спасибо)
надо начинать учить PureBasic :smile:

UPD.
Prog, а можно как-то расширить, что-бы текст не нужно было переводить в cp1251? :rolleyes:
 

Prog

Продвинутый
Сообщения
537
Репутация
65
Собрал прогу с поддержкой юникода. Возможно это поможет.
Теперь должна отображать символы всех народов. Китайские иероглифы отображает.
 

Вложения

  • миниатюрная подсказка.zip
    4.6 КБ · Просмотры: 4
Верх