Вверх ↑
Этот топик читают: Гость
Ответов: 95
Рейтинг: 4
#1: 2022-01-08 13:23:19 ЛС | профиль | цитата
Возможно это дубликат уже существующей темы...ну ладно.
Как получить иконку программы (для использования в окошках "о программе", например), и при этом не создать новый ресурс внутри её?
карма: 0

0
vip
#1.1контекстная реклама от партнеров
Ответов: 685
Рейтинг: 142
#2: 2022-01-08 13:47:06 ЛС | профиль | цитата
TheRenat писал(а):
Как получить иконку программы (для использования в окошках "о программе", например), и при этом не создать новый ресурс внутри её?


Add(MainForm,2953706,168,224)
{
Point(Handle)
link(onCreate,3238259:doWinInfo,[(207,244)(207,265)(158,265)(158,293)])
}
Add(WinInfo,3238259,168,287)
{
Point(Icon)
link(onWinInfo,7797333:doBitmap,[])
link(Handle,2953706:Handle,[])
}
Add(Image,3245731,308,273)
{
Left=65
Top=65
Width=65
Height=70
}
Add(Icon,7797333,252,273)
{
Point(doBitmap)
Point(onBitmap)
link(FileName,3238259:Icon,[(258,264)(244,264)(244,327)(188,327)])
link(onBitmap,3245731:doLoad,[])
}

карма: 15

0
Ответов: 95
Рейтинг: 4
#3: 2022-01-09 01:44:08 ЛС | профиль | цитата
Gunta, а без WinInfo никак?
Спрашиваю потому что вроде есть способ это сделать тупо в исходнике какой-нибудь формы Дельфи (или где-то в коде).
карма: 0

0
Разработчик
Ответов: 26061
Рейтинг: 2120
#4: 2022-01-09 02:10:46 ЛС | профиль | цитата
Писец моему посту из-за глюка форума. Ну, да ладно, напишу снова.
TheRenat писал(а):
Спрашиваю потому что вроде есть способ это сделать тупо в исходнике какой-нибудь формы Дельфи (или где-то в коде).

Да, есть такой способ, но в вопросе ничего не было про добавление такого функционала.
Gunta, у тебя в схеме ошибка, ты подаешь затолкать иконку на точку FileName. И WinInfo почему-то не отображает иконки, по крайней мере, в Win10x64. Точнее, иконки выдаются, но они ничем в HiAsm не понимаются.
Схема

Add(MainForm,9336585,371,140)
{
Icon=[ZIP7E03000078DA63606004420101062029C190C1CCC020C6C0C0A001C44021060506883808383033D01DEC5E3A2DD9D31482D27C2DE06C5C08A8FEC6F68547E7366EEACE07324E2EEFDFD65B882C02615C5AD9B36F463550FD81D573FEFFFB07448766D5FEFDF5E3EF8FAF40C6EF4F6F7E7F7CB57F5AE5AF97777FBF7A0014F9F5E0FC95BDEB90D59F5FDAFEFFCFEF7F3F7F9C5DDCFAF7CB7BA07A2003A818A805C8F8F9F0125CFDD5F5D38026002D058A03CD8433381D5EB39A5E062226ED1D1011A0FA139B9740CC0772E10CA0C3FE7DFFA21EF9054802ED026AF9F5ECF685435B91D5034D4030FEFC066AF1AFF80672E1F72F40F54087C1D5E3724FE1E4DF402D405B800E038A00D5E0720F9AC3800C60883DB871091841D8DD83EA3068887D7A0334FFD5AA6E207AB9BCFDC592A6E70B6A9FCD2C01A2A793B39EF4253FE98C79DC1CFCA8D6FB61A5EB8352FB3B45D6E7B2AD808AFFBE79F8FFF50320FAF7F21E10FD7D7EFBC79A5620FAB6B41A197D9D5708518F69F8BD9ED45B2D514074B5DC0B82802A2188D4F4F91F0A402C5231080000FFD6D18E]
Point(PHandle)
Point(Handle)
link(onCreate,3309684:doEvent1,[(410,160)(410,132)(302,132)(302,244)])
}
Add(Image,3245731,588,224)
{
Left=20
Top=10
Width=128
Height=128
Color=12632256
}
Add(Icon,7797333,532,224)
{
Point(onBitmap)
Point(doLoadIcon)
Point(doBitmap)
link(onBitmap,3245731:doLoad,[])
}
Add(Hub,3183704,490,238)
{
link(onEvent1,7797333:doLoadIcon,[])
link(onEvent2,7797333:doBitmap,[])
}
Add(InlineCode,14610609,357,301)
{
WorkPoints=#6:doIcon|
EventPoints=#6:onIcon|
DataPoints=#7:PHandle|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|17: Icon: PIcon;|9: public|24: PHandle: THI_Event;|23: onIcon: THI_Event;|0:|20: constructor Create;|33: destructor Destroy; override;|51: procedure doIcon(var _Data:TData; Index:word);|5: end;|0:|14:implementation|0:|31:constructor THiAsmClass.Create;|5:begin|18: Icon := NewIcon;|4:end;|0:|31:destructor THiAsmClass.Destroy;|5:begin|12: Icon.free;|4:end;|0:|29:procedure THiAsmClass.doIcon;|3:var|21: sControl: PControl;|12: di: TData;|5:begin|48: sControl := PControl(ToIntegerEvent(PHandle));|38: if not Assigned(sControl) then exit;|31: Icon.Handle := sControl.Icon;|21: dtIcon(di, Icon); |26: _hi_onEvent(onIcon, di);|4:end;|0:|4:end.|
link(onIcon,11399916:doEvent1,[])
link(PHandle,9336585:PHandle,[(363,180)(377,180)])
}
Add(WinInfo,663474,378,238)
{
Point(Icon)
link(onWinInfo,14733343:doData,[])
link(Handle,9336585:Handle,[])
}
Add(DoData,14733343,434,238)
{
link(onEventData,3183704:doEvent1,[])
link(Data,663474:Icon,[(440,229)(426,229)(426,278)(398,278)])
}
Add(Image,10203477,588,287)
{
Left=160
Top=10
Width=128
Height=128
Color=12632256
}
Add(Icon,14127813,532,287)
{
Point(onBitmap)
Point(doLoadIcon)
Point(doBitmap)
link(onBitmap,10203477:doLoad,[])
}
Add(Hub,11399916,490,301)
{
link(onEvent1,14127813:doLoadIcon,[])
link(onEvent2,14127813:doBitmap,[])
}
Add(Hub,3309684,322,238)
{
link(onEvent1,663474:doWinInfo,[])
link(onEvent2,14610609:doIcon,[(347,251)(347,307)])
}

Редактировалось 5 раз(а), последний 2022-01-09 03:57:24
карма: 22

0
Разработчик
Ответов: 26061
Рейтинг: 2120
#5: 2022-01-09 03:37:10 ЛС | профиль | цитата
Я добавил на форму метод получения его текущей иконки. Обновление на SVN.
Вот пример возможности читать иконки разных форм внутри приложения на HiAsm-е после обновления:
Пример

Add(MainForm,2953706,602,168)
{
Icon=[ZIPBE10000078DAED57310AC3300CBCEE1932958E193C74EC133AFA317E449E9067E497AE843DA4450E2A82D883142E884BAC03F9B01170A36759C06FEC337007F0241085370ACFB1CE68C54408845705E78F0BB8A9EA739E085B05E7F1022E14F99CBF812DFF849593346A1F46D44F420D1327699CF43F0A354C9CA4513DD9DD7FDAFDB2ECB5FC5FD9FF01F593C593DAB527FD8F164F6AD78EEC3FFD1962F149DB7F9DF5FF38C32C3E6DFB4F7F86597CEAFE73FFB9FFFCFEF5FBD7E70F9F3F0EDF8250C3C4491A87F9B75BAC1DC1BDF9007AA728F3]
Point(doGetIcon)
Point(onGetIcon)
link(onCreate,2953706:doGetIcon,[(641,188)(641,216)(592,216)(592,202)])
link(onGetIcon,7910794:doEvent1,[])
}
Add(Icon,6856602,693,175)
{
Point(onBitmap)
Point(doLoadIcon)
Point(doBitmap)
link(onBitmap,13948443:doLoad,[])
}
Add(Image,13948443,742,175)
{
Left=135
Top=25
Width=128
Height=128
}
Add(ChildFormEx,12566875,602,224)
{
}
BEGIN_SDK
Add(EditMultiEx,9804552,21,21)
{
}
Add(MainForm,176861,70,77)
{
Left=35
Top=105
Icon=[ZIP7E03000078DA63606004420101062029C190C1CCC020C6C0C0A001C44021060506883808383033D01DEC5E3A2DD9D31482D27C2DE06C5C08A8FEC6F68547E7366EEACE07324E2EEFDFD65B882C02615C5AD9B36F463550FD81D573FEFFFB07448766D5FEFDF5E3EF8FAF40C6EF4F6F7E7F7CB57F5AE5AF97777FBF7A0014F9F5E0FC95BDEB90D59F5FDAFEFFCFEF7F3F7F9C5DDCFAF7CB7BA07A2003A818A805C8F8F9F0125CFDD5F5D38026002D058A03CD8433381D5EB39A5E062226ED1D1011A0FA139B9740CC0772E10CA0C3FE7DFFA21EF9054802ED026AF9F5ECF685435B91D5034D4030FEFC066AF1AFF80672E1F72F40F54087C1D5E3724FE1E4DF402D405B800E038A00D5E0720F9AC3800C60883DB871091841D8DD83EA3068887D7A0334FFD5AA6E207AB9BCFDC592A6E70B6A9FCD2C01A2A793B39EF4253FE98C79DC1CFCA8D6FB61A5EB8352FB3B45D6E7B2AD808AFFBE79F8FFF50320FAF7F21E10FD7D7EFBC79A5620FAB6B41A197D9D5708518F69F8BD9ED45B2D514074B5DC0B82802A2188D4F4F91F0A402C5231080000FFD6D18E]
Point(onGetIcon)
Point(doGetIcon)
link(onCreate,176861:doGetIcon,[(109,97)(109,69)(60,69)(60,111)])
link(onGetIcon,10721551:doEvent1,[])
}
Add(Icon,12125612,168,84)
{
Point(onBitmap)
Point(doLoadIcon)
Point(doBitmap)
link(onBitmap,16108708:doLoad,[])
}
Add(Image,16108708,217,84)
{
Left=135
Top=25
Width=128
Height=128
}
Add(Hub,10721551,133,98)
{
link(onEvent1,12125612:doLoadIcon,[])
link(onEvent2,12125612:doBitmap,[])
}
END_SDK
Add(Hub,7910794,658,189)
{
link(onEvent1,6856602:doLoadIcon,[])
link(onEvent2,6856602:doBitmap,[])
}


--- Добавлено в 2022-01-09 04:32:01

Я разобрался, почему WinInfo не отображает иконки приложений HiAsm. Для нормального отображения иконок в WinInfo необходимо классу формы присвоить иконку методом API -- SetClassLong(Ptr) (любое присвоение иконки этим методом хэндлу окна любой формы, присвоит иконку всему классу формы), но у нас это нигде не делается, и если делать, то только для главной формы. Вот поэтому WinInfo не подходит для извлечения иконки из приложений HiAsm, и не только для них, но и для многих других.

Редактировалось 9 раз(а), последний 2022-01-09 04:54:08
карма: 22

0
Разработчик
Ответов: 26061
Рейтинг: 2120
#6: 2022-01-09 13:44:00 ЛС | профиль | цитата
Я добавил присвоение иконки классу окна главной формы и немного оптимизировал код doGetIcon. Теперь WinInfo будет показывать иконку MainForm на любой форме приложения, тк у них один класс.

Редактировалось 2 раз(а), последний 2022-01-09 13:44:47
карма: 22

0
Ответов: 685
Рейтинг: 142
#7: 2022-01-10 06:50:50 ЛС | профиль | цитата
nesco писал(а):
у тебя в схеме ошибка

Упсс..Поторопился. В последнее время что-то стало зрение подводить. Старею
карма: 15

0
Ответов: 245
Рейтинг: 4
#8: 2022-01-10 14:33:37 ЛС | профиль | цитата
nesco писал(а):
Я добавил на форму метод получения его текущей иконки. Обновление на SVN.
Вот пример возможности читать иконки разных форм внутри приложения на HiAsm-е после обновления:
Пример

--- Добавлено в 2022-01-09 04:32:01

Я разобрался, почему WinInfo не отображает иконки приложений HiAsm. Для нормального отображения иконок в WinInfo необходимо классу формы присвоить иконку методом API -- SetClassLong(Ptr) (любое присвоение иконки этим методом хэндлу окна любой формы, присвоит иконку всему классу формы), но у нас это нигде не делается, и если делать, то только для главной формы. Вот поэтому WinInfo не подходит для извлечения иконки из приложений HiAsm, и не только для них, но и для многих других.

Редактировалось 9 раз(а), последний 2022-01-09 04:54:08

Вот теперь понятно почему не работало, были мысли что что то делаю не так и забил на WinInfo. благодарствую за разьеснение.
карма: 1

0
Ответов: 95
Рейтинг: 4
#9: 2022-01-19 23:38:46 ЛС | профиль | цитата
nesco, что-то ты не так сделал. При попытке использовать метод для получения иконки прилетает Runtime error.
карма: 0

0
Разработчик
Ответов: 26061
Рейтинг: 2120
#10: 2022-01-19 23:39:52 ЛС | профиль | цитата
TheRenat писал(а):
При попытке использовать метод для получения иконки прилетает Runtime error

Схему, которая крэшится, давай. Мне надо повторить баг.

--- Добавлено в 2022-01-19 23:55:17

У меня есть некоторые подозрения, и я немного переделал метод. Замени свой файл hiMainForm.pas на файл из архива и проверь. Можешь спокойно перезаписать свой файл, если будет работать, то я обновлю на SVN.

Редактировалось 5 раз(а), последний 2022-01-20 00:01:47
карма: 22

0
файлы: 1hiMainForm_002.zip [5.1KB] [196]
Ответов: 95
Рейтинг: 4
#11: 2022-01-20 01:39:54 ЛС | профиль | цитата
Хорошо. Потом проверю.

Редактировалось 1 раз(а), последний 2022-01-20 01:40:30
карма: 0

0
Разработчик
Ответов: 26061
Рейтинг: 2120
#12: 2022-01-20 02:29:12 ЛС | профиль | цитата
TheRenat писал(а):
Хорошо. Потом проверю.

Ты это, не затягивай, а то файл на обновлении висит.
карма: 22

0
Ответов: 95
Рейтинг: 4
#13: 2022-01-20 12:00:04 ЛС | профиль | цитата
nesco, кажется я понял в чём проблема. Сам метод-то работает, однако, если его вызывать из ChildFormEx со включенным OnlyOnce или Dynamic, прилетает Runtime error.
Схема:
Make(delphi)
ver(4.05 build 186)
Add(MainForm,2953706,21,105)
{
Point(doGetIcon)
Point(onGetIcon)
link(onGetIcon,14116886:doGotIcon,[(125,132)(125,174)])
}
Add(Button,4960337,154,98)
{
Left=250
Top=15
link(onClick,14116886:doShow,[(191,104)(191,167)])
}
Add(ChildFormEx,14116886,196,161)
{
Mode=2
link(onGetIcon,2953706:doGetIcon,[(240,167)(240,153)(9,153)(9,139)])
}
BEGIN_SDK
Add(EditMultiEx,2578549,21,21)
{
WorkCount=#6:doShow|9:doGotIcon|
EventCount=#9:onGetIcon|
link(doShow,2540826:doShowModal,[(59,27)(59,111)])
link(doGotIcon,7508866:doEvent1,[(63,34)(63,139)])
}
Add(MainForm,2540826,98,77)
{
Left=35
Top=105
Visible=1
Point(doShowModal)
link(onCreate,2578549:onGetIcon,[(194,97)(194,27)])
}
Add(Image,5252088,224,77)
{
Left=130
Top=50
Width=215
Height=155
}
Add(Hub,7508866,105,133)
{
link(onEvent1,10007018:doLoadIcon,[(140,139)(140,153)])
link(onEvent2,10007018:doBitmap,[(140,146)(140,160)])
}
Add(Icon,10007018,161,133)
{
Point(doLoadIcon)
Point(doBitmap)
Point(onBitmap)
link(onBitmap,5252088:doLoad,[(209,139)(209,83)])
}
END_SDK
(специально сделал так чтоб можно было сразу копировать в блокнот а потом сохранить в .sha )

Редактировалось 2 раз(а), последний 2022-01-20 12:02:36
карма: 0

0
Разработчик
Ответов: 26061
Рейтинг: 2120
#14: 2022-01-20 16:01:07 ЛС | профиль | цитата
Тут форма вообще мимо проходила. Вот такая схема тоже будет выдавать ошибку
Схема


Add(MainForm,15635316,245,98)
{
Point(doGetIcon)
Point(onGetIcon)
}
Add(Button,4960337,315,105)
{
Left=250
Top=15
link(onClick,14116886:doShow,[(382,111)(382,153)])
}
Add(ChildFormEx,14116886,392,147)
{
Mode=2
link(onGetIcon,9573824:doGetString,[(431,153)(431,195)(305,195)(305,181)])
}
BEGIN_SDK
Add(EditMultiEx,2578549,21,21)
{
WorkCount=#6:doShow|9:doGotIcon|
EventCount=#9:onGetIcon|
link(doShow,2540826:doShowModal,[(59,27)(59,90)])
}
Add(MainForm,2540826,98,56)
{
Left=35
Top=105
Visible=1
Point(doShowModal)
link(onCreate,2578549:onGetIcon,[(137,76)(137,27)])
}
END_SDK
Add(StrList,9573824,315,147)
{
Point(doGetString)
Point(onGetString)
link(onGetString,14116886:doGotIcon,[])
}


Так вообще лучше не пытаться делать. Да и запускать методы снаружи не отложенным методом OnCreate нельзя. Если тебе нужна самоуничтожаемая форма при закрытии, то вот так это будет нормально работать. Debug в схему вставлен специально, чтобы показать, что форма уничтожилась
Схема


Add(MainForm,14812949,497,210)
{
Icon=[ZIP9E09000078DAED954F4B024118C65F31FC93A56BBA66891005D125E8CF212AA2063A051D3A46145261501412D521223C45F401BC144475E9D4A94BA7A44FD247A85B60343DB38EB9AEB3BB06061D7CE4E7C8ECBBEF3EEF3BE32C91079F6492F0DD47E741A204110D014CD10895E78532416AE93F28FFC2FF34FFE9B32ABF17044048129073D4406CF027F6E891D3F11337C6DAF830E80763605CFE0E2B9E618E1D970C800868A3FD87726E3156E5033D601AAC820D300FD2F21A5962D3F27A56C6CE8114F0D3DE7D39B7186B3D710B2B60D0267F4D6C672C7666F8DBBEE57528EE6B8F68371837C104D04D7D16E8E1B87E52890D69DAA5EC690765AF781D2675F5A632265F39B00C26C1B089498BFF45D99BEA3A59F2AAFA841AEE301E8235B020FBBD108A460B16EFA38677B3D60BB6FBDF52831BF5DE9DFD5B6B10EBB00566C41EEC8CC5F38EDE5DFA6F53C32E580253AEDE9DF78F530DFBF07BEDDA7721F5FE77ABE1A2A1BE0BA9FFBF2AF9546BEAE8DDFEFC51E6D7BA933B8A67CCCA57A3F797E7A7ED1A5488E8890399DBD7A4F3DFFE1C6EA929E29CB32A2583E24794E5731E09B122117BA51498666F0619F661F0CE3E051E41897D7A4BECCB6FCEC7D9377272F187]
Point(doGetIcon)
Point(onGetIcon)
link(onGetIcon,14116886:doGotIcon,[])
}
Add(Button,4960337,553,189)
{
Left=250
Top=15
link(onClick,14116886:##add,[(606,195)(606,230)])
}
Add(ChildFormEx,14116886,616,224)
{
Mode=2
link(onGetIcon,14812949:doGetIcon,[(655,230)(655,181)(487,181)(487,244)])
link(onEvent,3344834:doDeferredEvent,[(655,237)(655,293)(543,293)(543,258)])
}
BEGIN_SDK
Add(EditMultiEx,2578549,21,21)
{
WorkCount=#5:##add|9:doGotIcon|7:##clear|
EventCount=#9:onGetIcon|7:onEvent|
Point(##add)
Point(##clear)
link(##add,2540826:doShowModal,[(88,27)(88,125)])
link(doGotIcon,7508866:doEvent1,[(39,34)(39,181)])
}
Add(MainForm,2540826,98,91)
{
Left=35
Top=105
Visible=1
Point(doShowModal)
Point(Close)
link(onCreate,8011063:doDeferredEvent,[])
link(Close,740043:GetData,[])
}
Add(Image,5252088,161,161)
{
Left=130
Top=50
Width=215
Height=155
}
Add(Hub,7508866,49,175)
{
link(onEvent1,10007018:doLoadIcon,[])
link(onEvent2,10007018:doBitmap,[])
}
Add(Icon,10007018,98,161)
{
Point(doLoadIcon)
Point(doBitmap)
Point(onBitmap)
link(onBitmap,5252088:doLoad,[])
}
Add(DeferredEvent,8011063,161,105)
{
link(onDeferredEvent,2578549:onGetIcon,[(200,111)(200,27)])
}
Add(EventFromData,740043,98,28)
{
link(onEvent,2578549:onEvent,[])
}
Add(Debug,539206,245,140)
{
}
END_SDK
Add(DeferredEvent,3344834,553,252)
{
link(onDeferredEvent,14116886:##clear,[(592,258)(592,244)])
}

карма: 22

0
14
Сообщение
...
Прикрепленные файлы
(файлы не залиты)