Вверх ↑
Этот топик читают: Гость
Ответов: 38
Рейтинг: 0
#211: 2020-11-23 14:45:07 ЛС | профиль | цитата
Леонид, спасибо за быстрый ответ. Но, наверное, я не ясно выразился. Насколько я понимаю "doConvert", не нужен, так как при выборе из меню в элемент "Img_GDIFileProcessor" поступает индекс варианта сохранения и он делает "doConvert" "автоматом", по крайней мере схема которую я выложил на моем компе выдает именно такой результат.
Мой вопрос по элементу "SDialog" в него на точку "doFilter" из "StrList" поступают варианты фильтра сохранения. Так вот "doFilter" устанаваливается только при первом обращении. Если попробывать изменить установку она не меняется, я там специально прилепил "Message" -- видно, что значение из "StrList" приходит.
Боюсь все равно не понятно. Сфрмулирую так: как сделать так, чтобы при каждом выборе из контекстного меню варианта сохранения менялся и ФИЛЬТР в диалоге сохранения.
Вот другой пример:

Add(MainForm,2953706,21,105)
{
Width=440
Height=172
Point(onMouseDown)
link(onMouseDown,14966239:doEvent,[])
}
Add(Memo,3116927,455,77)
{
Left=170
Top=5
Width=245
Height=55
Strings=#17:Это пример текста|15:для сохранения.|0:|
Point(doSave)
}
Add(PopupMenu,9965293,175,133)
{
Menu=#15:сохранить в txt|15:сохранить в bat|15:сохранить в ini|15:сохранить в str|15:сохранить в vbs|
TranspIcon=1
link(onClick,2684341:doEvent1,[])
}
Add(SDialog,3434106,392,105)
{
Filter="Точечный Рисунок BMP|*.bmp|Изображение в формате JPG|*.jpeg|Изображение в формате GIF|*.gif|Изображение в формате TIFF|*.tiff|Изображение в формате PNG|*.png|All|*.*"
Title="Сохранить Буфер в Файл"
Point(doFilter)
Point(doFileName)
Point(FileName)
Point(StartDir)
link(onExecute,3116927:doSave,[])
}
Add(StrList,11916909,280,105)
{
Strings=#20:текстовый файл|*.txt|29:файл пакетной обработки|*.bat|19:файл настроек|*.ini|18:список строк|*.str|18:файл скрипта|*.vbs|
Point(doGetString)
Point(onGetString)
link(onGetString,1100150:doEvent1,[])
}
Add(Hub,2684341,224,133)
{
link(onEvent1,11916909:doGetString,[])
link(onEvent2,3434106:doExecute,[(374,146)(374,111)])
}
Add(IndexToChanel,14966239,105,126)
{
link(onEvent2,9965293:doPopupHere,[])
}
Add(Hub,1100150,336,112)
{
link(onEvent1,3434106:doFilter,[])
link(onEvent2,3644706:doText,[(380,125)(380,167)])
}
Add(Label,3391927,21,35)
{
Left=170
Top=70
Width=249
Height=17
Caption="Вариант фильтра, который фолжен появляться:"
}
Add(Label,3644706,392,161)
{
Left=170
Top=95
Width=244
Height=17
Color=16777215
Font=[MS Sans Serif,8,0,255,1]
Caption="________________________________________"
}


Редактировалось 2 раз(а), последний 2020-11-23 15:08:59
карма: 0

0
Ответов: 8926
Рейтинг: 823
#212: 2020-11-23 16:32:30 ЛС | профиль | цитата
Fangir писал(а):
он делает "doConvert" "автоматом"
Ну а попробовать автомат/не автомат можно бы
Проба


Add(MainForm,2953706,196,98)
{
}
Add(Img_GDIFileProcessor,15799535,350,161)
{
Quality=50
Point(doSaveformat)
Point(doConvert)
link(onLoad,349788:doLoad,[])
link(FileName,6876006:Value,[])
link(SBitmap,349788:ImageBitmap,[(363,152)(391,152)(391,201)(412,201)])
}
Add(ComboBox,3114376,504,14)
{
Left=5
Top=35
Height=21
Strings=#3:BMP|4:JPEG|3:GIF|4:TIFF|3:PNG|
link(onClick,2746940:doEvent1,[])
}
Add(Button,2733179,189,154)
{
Left=5
Top=5
Caption="Open"
link(onClick,11333368:doExecute,[])
}
Add(Button,6314749,189,203)
{
Left=10
Top=205
Caption="Save"
link(onClick,7704039:doEvent1,[])
}
Add(Image,349788,406,161)
{
Left=95
Top=20
Width=280
Height=210
}
Add(Dir,1455448,455,28)
{
}
Add(ODialog,11333368,231,154)
{
link(onExecute,6240413:doEvent1,[])
}
Add(Hub,6240413,308,154)
{
link(onEvent1,16386832:doWork2,[])
link(onEvent2,15799535:doLoadFrom,[])
}
Add(FilePartElm,2492523,392,91)
{
Mode=2
Point(Part)
link(onPart,15566632:doWork2,[])
}
Add(Memory,6876006,350,91)
{
link(onData,2492523:doPart,[])
}
Add(FormatStr,5504243,455,91)
{
DataCount=3
Mask="%1%2.%3"
Point(FString)
link(onFString,10124244:doText,[])
link(Str1,1455448:CurrentDir,[])
link(Str2,2492523:Part,[(468,82)(447,82)(447,131)(398,131)])
link(Str3,3114376:String,[(475,82)(517,82)])
}
Add(Hub,7704039,231,203)
{
OutCount=3
link(onEvent1,15799535:doConvert,[(270,209)(270,188)])
link(onEvent2,12881872:doData,[])
link(onEvent3,15799535:doSaveTo,[(277,223)(277,174)])
}
Add(DoData,12881872,287,210)
{
link(onEventData,16386832:doWork3,[(333,216)])
link(Data,5504243:FString,[(293,145)(461,145)])
}
Add(HubEx,16386832,329,154)
{
Angle=3
link(onEvent,6876006:doValue,[(333,97)])
}
Add(Edit,10124244,504,91)
{
Left=10
Top=235
Width=370
}
Add(Hub,2746940,546,21)
{
link(onEvent1,15799535:doSaveformat,[(578,27)(578,139)(340,139)(340,181)])
link(onEvent2,15566632:doWork1,[(571,34)(571,69)(431,69)])
}
Add(HubEx,15566632,427,91)
{
link(onEvent,5504243:doString,[])
}

Исходная картинка 5184х3456
BMP -- 51.25 Mb
IPEG -- 6.88 Mb (при качестве 50%)
GIF -- 4.41 Mb
TIIF-- 16.61 Mb
PNG -- 22.7 Mb
карма: 19

0
Ответов: 38
Рейтинг: 0
#213: 2020-11-23 16:53:39 ЛС | профиль | цитата
Конечно я попробывал. Картинка 300 Х 400 пикселей.
Primer.gif
Леонид, мой вопрос не по сжатию и не по формату сохранения картинки. Или Вы меня тролите?

Редактировалось 1 раз(а), последний 2020-11-23 16:57:01
карма: 0

0
Ответов: 19
Рейтинг: 21
#214: 2020-11-23 19:46:56 ЛС | профиль | цитата
Может ну его этот фильтр и сделать так...

Add(MainForm,8951961,105,196)
{
Width=440
Height=172
Point(onMouseDown)
link(onMouseDown,14966239:doEvent,[(148,223)(148,202)])
}
Add(Memo,3116927,434,154)
{
Left=170
Top=5
Width=245
Height=55
Strings=#17:Это пример текста|15:для сохранения.|0:|
}
Add(PopupMenu,9965293,217,196)
{
Menu=#15:сохранить в txt|15:сохранить в bat|15:сохранить в ini|15:сохранить в str|15:сохранить в vbs|
TranspIcon=1
link(onClick,11916909:doGetString,[(264,202)(264,230)])
}
Add(SDialog,3434106,378,189)
{
Title="Сохранить Буфер в Файл"
Point(doFilter)
Point(doFileName)
link(onExecute,3116927:doSave,[])
}
Add(StrList,11916909,280,196)
{
Strings=#5:1.txt|5:1.bat|5:1.ini|5:1.str|5:1.vbs|
Point(doGetString)
Point(onGetString)
link(onGetString,1100150:doEvent1,[])
}
Add(IndexToChanel,14966239,161,196)
{
link(onEvent2,9965293:doPopupHere,[(200,209)(200,202)])
}
Add(Hub,1100150,329,203)
{
OutCount=4
link(onEvent1,3434106:doFileName,[])
link(onEvent3,3644706:doText,[])
link(onEvent4,3434106:doExecute,[(358,230)(358,195)])
}
Add(Label,3391927,105,147)
{
Left=170
Top=70
Width=249
Height=17
Caption="Вариант фильтра, который фолжен появляться:"
}
Add(Label,3644706,434,217)
{
Left=170
Top=95
Width=244
Height=17
Color=16777215
Font=[MS Sans Serif,8,0,255,1]
Caption="________________________________________"
}

карма: 1

0
Ответов: 8926
Рейтинг: 823
#215: 2020-11-23 20:31:04 ЛС | профиль | цитата
Fangir, это я пропустил, что речь идёт о диалоге сохранения, а в схема-то про картинки Надо выкладывать не полностью проект, но тот кусочек, который не так работает
Не совсем понимаю, зачем фильтр при сохранении
Ну если очень хочется, то вот и пример:
Кусочек


Add(MainForm,2953706,154,70)
{
}
Add(SDialog,3749277,217,126)
{
Point(doFileName)
Point(FileName)
link(onExecute,11296997:doText,[])
link(FileName,12389720:String,[])
}
Add(Button,12280069,154,126)
{
Left=80
Top=20
Caption="Save"
link(onClick,3749277:doExecute,[])
}
Add(Edit,11296997,266,126)
{
Left=25
Top=115
Width=310
}
Add(ComboBox,12389720,210,63)
{
Left=10
Top=20
Height=21
Strings=#5:*.ipg|5:*.bmp|5:*.ini|5:*.sha|5:*.exe|5:*.txt|
link(onClick,3749277:doFileName,[(249,76)(249,118)(207,118)(207,139)])
}

карма: 19

0
Ответов: 793
Рейтинг: 168
#216: 2020-11-23 23:05:46 ЛС | профиль | цитата
Fangir, можно попробовать таким способом https://forum.hiasm.com/getfile/39175.
Работает и фильтр и расширения подставляются.
Можете зарегистрировать COMDLG32.OCX самостоятельно https://yadi.sk/d/gmQqrqvA5W9Ebg.

Редактировалось 2 раз(а), последний 2020-11-24 08:00:19
карма: 16

0
Ответов: 38
Рейтинг: 0
#217: 2020-11-24 08:40:47 ЛС | профиль | цитата
Flapiotun, Леонид, Gunta -- большое спасибо за Ваши подсказки! То, что можно решить через варианты имен файла я понял.
В исходнике диалога сохранения hiSDialog.pas:

procedure THISDialog._work_doFileName;
begin
_prop_FileName := ReadString(_Data, _data_FileName, '');
end;

procedure THISDialog._work_doFilter;
begin
_prop_Filter := ToString(_Data);
end;
Насколько я в состоянии понять, _prop_Filter := ToString(_Data); срабатывает только один раз за сессию программы?
Срабатывает конечно и вот такой уродливый костыль:


Add(MainForm,9675713,84,70)
{
Width=440
Height=172
Point(onMouseDown)
link(onMouseDown,14966239:doEvent,[])
}
Add(Memo,3116927,399,70)
{
Left=170
Top=5
Width=245
Height=55
Strings=#17:Это пример текста|15:для сохранения.|0:|
Point(doSave)
}
Add(PopupMenu,9965293,182,98)
{
Menu=#15:сохранить в txt|15:сохранить в bat|15:сохранить в ini|15:сохранить в str|15:сохранить в vbs|
TranspIcon=1
link(onClick,11261969:doEvent,[])
}
Add(SDialog,3434106,301,98)
{
Filter="текстовый файл|*.txt"
Title="Сохранить Буфер в Файл"
Point(doFileName)
Point(FileName)
link(onExecute,15921331:doWork2,[])
}
Add(IndexToChanel,14966239,133,91)
{
link(onEvent2,9965293:doPopupHere,[])
}
Add(IndexToChanel,11261969,231,98)
{
Count=5
link(onEvent1,3434106:doExecute,[])
link(onEvent2,8893836:doExecute,[(282,111)(282,139)])
link(onEvent3,15066912:doExecute,[(282,118)(282,174)])
link(onEvent4,15721733:doExecute,[(282,125)(282,209)])
link(onEvent5,5965969:doExecute,[(282,132)(282,244)])
}
Add(SDialog,8893836,301,133)
{
Filter="файл пакетной обработки|*.bat"
Title="Сохранить Буфер в Файл"
Point(doFileName)
Point(FileName)
link(onExecute,4510774:doWork2,[])
}
Add(SDialog,15066912,301,168)
{
Filter="файл настроек|*.ini"
Title="Сохранить Буфер в Файл"
Point(doFileName)
Point(FileName)
link(onExecute,13056378:doWork2,[])
}
Add(SDialog,15721733,301,203)
{
Filter="список строк|*.str"
Title="Сохранить Буфер в Файл"
Point(doFileName)
Point(FileName)
link(onExecute,15547887:doWork2,[])
}
Add(SDialog,5965969,301,238)
{
Filter="файл скрипта|*.vbs"
Title="Сохранить Буфер в Файл"
Point(doFileName)
Point(FileName)
link(onExecute,15547887:doWork3,[(354,244)])
}
Add(HubEx,15921331,350,98)
{
link(onEvent,3116927:doSave,[])
}
Add(HubEx,4510774,350,133)
{
Angle=3
link(onEvent,15921331:doWork3,[])
}
Add(HubEx,13056378,350,168)
{
Angle=3
link(onEvent,4510774:doWork3,[])
}
Add(HubEx,15547887,350,203)
{
Angle=3
link(onEvent,13056378:doWork3,[])
}

Но именно затем, чтобы избежать этого ужаса я и полез в настройки фильтра сохранения.
Gunta, Ваш вариант у таких "программистов" как я вызывает "легкий" шок. . В очень общих чертах я понимаю, что происходит в схеме. Но решение мне кажется сверхрадикальным. Спасибо. (По Вашей ссылке скачиватся файл без расширения, для тех кто будет смотреть это -- zip.)
карма: 0

0
Разработчик
Ответов: 26151
Рейтинг: 2127
#218: 2020-11-25 14:12:23 ЛС | профиль | цитата
Действительно, есть такое. Не отследили, когда добавили возможность изменять фильтр. Вот, замени код в компоненте, должно работать

procedure THISDialog._work_doExecute;
var
Opts: TOpenSaveOptions;
begin
if not Assigned(FSaveDialog) then
begin
// By NetSpirit
Opts := DefOpenSaveDlgOptions;
if _prop_NoChangeDir = 1 then Opts:= Opts + [OSNoChangedir];
if _prop_PathMustExists = 0 then Opts := Opts - [OSPathMustExist, OSFileMustExist];
if _prop_OverwritePrompt = 0 then Opts := Opts - [OSOverwritePrompt];
FSaveDialog := NewOpenSaveDialog(_prop_Title,_prop_StartDir, Opts);

FSaveDialog.OpenDialog := False;
FSaveDialog.WndOwner := ReadHandle;
end;

FSaveDialog.Filter := _prop_Filter;
FSaveDialog.FileName := ReadString(_Data, _data_FileName, _prop_FileName);
if FSaveDialog.Execute then
_hi_CreateEvent(_Data, @_event_onExecute, FSaveDialog.FileName)
else
_hi_CreateEvent(_Data, @_event_onCancel);
end;

P.S. Когда добавлю на SVN, пока не знаю, сижу дома на карантине.

Редактировалось 1 раз(а), последний 2020-11-25 14:17:54
карма: 22

1
Голосовали:sla8a
Ответов: 38
Рейтинг: 0
#219: 2020-11-26 01:48:01 ЛС | профиль | цитата
nesco! Спасибо! Работает! Красота.

Редактировалось 1 раз(а), последний 2020-11-26 01:48:16
карма: 0

0
Ответов: 38
Рейтинг: 0
#220: 2020-12-28 11:39:21 ЛС | профиль | цитата
Добрый день. При большом объеме текста (33 000 ++ знаков) не работает свойство SelText компонента memo в следующей схеме:

Add(MainForm,6263189,91,224)
{
Left=20
Top=105
Width=550
link(onCreate,1924266:doSendMessage,[])
}
Add(Memory,13575718,231,187)
{
@Hint=#12:EM_LIMITTEXT|
Default=Integer(197)
}
Add(SendMessage,1924266,210,238)
{
WParam=-1
Point(Message)
link(Handle,8941988:Handle,[(216,183)(517,183)])
link(Message,13575718:Value,[])
}
Add(Memo,10620720,588,168)
{
Left=309
Width=225
Height=265
Align=3
Font=[Courier New,9,0,0,204]
ModeSp=1
ScrollBars=2
Point(Handle)
Point(SelText)
}
Add(Button,3955856,399,189)
{
Left=230
Top=60
Width=70
Caption="Передать"
link(onClick,3324535:doData,[])
}
Add(Memo,8941988,490,133)
{
Width=225
Height=265
Align=1
Font=[Courier New,9,0,0,204]
ModeSp=1
Strings=#47:Если сейчас выделить текст и нажать "Передать",|0:|47:[Выделенный Текст] будет передан в правый edit.|0:|48:Однако, если вставить сюда текст БОЛЬШОГО объема|22:(больше 33 000 знаков)|42:выделенный из него фрагмент не передается.|0:|0:|
ScrollBars=2
Point(Handle)
Point(SelText)
}
Add(DoData,3324535,518,189)
{
link(onEventData,10620720:doText,[])
link(Data,8941988:SelText,[])
}
Add(InfoTip,4945334,469,28)
{
Info=#118:Когда вставляю в левый memo текст большОго объема (>32кб?) SelText ничего "не хранит", или не отдает, по крайней мере.|
Font=[MS Sans Serif,10,1,0,1]
Width=197
Height=207
}
Add(LinkTip,206172,147,280)
{
Link="https://forum.hiasm.com/topic/6566/"
Font=[MS Sans Serif,8,0,16711680,1]
}
Add(InfoTip,3404046,147,126)
{
Info=#48:Взято от Dilma и Galkov в ветке по ссылке внизу.|
Width=197
Height=179
}

Нужно, чтобы в подобной приведенной выше схеме обрабатывался выделенный фрагмент из объемного текста. Вопрос: как его можно "забрать" минуя буфер обмена?
карма: 0

0
Ответов: 8926
Рейтинг: 823
#221: 2020-12-28 13:00:46 ЛС | профиль | цитата
Fangir, всё работает!
https://forum.hiasm.com/getfile/39186

Редактировалось 1 раз(а), последний 2020-12-28 13:18:04
карма: 19

0
Ответов: 38
Рейтинг: 0
#222: 2020-12-28 14:26:35 ЛС | профиль | цитата
Леонид, спасибо! Действительно все работает. Более того: моя схема также работает без лишних ухищрений (вроде посылки message для окна). Дело оказалось в самих текстовых файлах. Они экспортированы из pdf формата. Один из таких файлов я закреплю к этому сообщению. Содержимое этого файла невозможно скопировать и вставить ЦЕЛИКОМ в Вашу схему. Что весьма странно. Вот можете проверить. (Либо у меня какой-то глюк в системе).

https://forum.hiasm.com/getfile/39187

--- Добавлено в 2020-12-28 15:12:09



И всё-таки не работает. Я отключил в Вашей схеме генератор текста и попробывал просто открыть через стандарный диалог файл в 21 000 с лишним строк. Он открывается, но смотрите, что происходит:

В архиве все файлы с которыми я проводил "манипуляции"

https://forum.hiasm.com/getfile/39188

Редактировалось 9 раз(а), последний 2020-12-28 15:30:01
карма: 0

0
файлы: 1winapi.rar [10.6KB] [401]
Ответов: 8926
Рейтинг: 823
#223: 2020-12-28 16:01:27 ЛС | профиль | цитата
Fangir, у меня Win10 и HiAsm-186. Путаницы в выделении/копировании нет ни во вновь открываемых файлах (2.5 Мб), в том числе и в предложенных вами. Попробуйте схему:


Add(MainForm,2953706,273,175)
{
link(onCreate,12903920:doWork2,[])
}
Add(Memo,1843153,357,161)
{
Left=10
Top=5
Width=180
Height=230
ScrollBars=2
Point(SelText)
Point(onMouseUp)
link(FileName,16701979:Value,[])
link(onMouseUp,1884967:doData,[(396,174)(396,216)(368,216)(368,230)])
}
Add(DoData,1884967,378,224)
{
link(onEventData,9493657:doText,[])
link(Data,1843153:SelText,[])
}
Add(Memo,9493657,434,203)
{
Left=200
Top=5
Width=180
Height=230
ScrollBars=2
}
Add(Memory,16701979,364,112)
{
Default=String(C:\Users\Administrator\Downloads\bag\bag\istoriyarozgi.txt)
link(onData,12903920:doWork1,[(403,118)(403,153)(340,153)])
}
Add(HubEx,12903920,336,189)
{
link(onEvent,1843153:doLoad,[])
}
Add(Button,13621734,273,112)
{
Left=55
Top=240
Width=65
Caption="Open *.txt"
link(onClick,2553606:doExecute,[])
}
Add(ODialog,2553606,315,112)
{
link(onExecute,16701979:doValue,[])
}

Попробуйте обновить Memo на SVN
карма: 19

0
Ответов: 38
Рейтинг: 0
#224: 2020-12-28 16:50:15 ЛС | профиль | цитата
Леонид, спасибо за Ваши труды и за внимание. Система и версия HiAsma совпадают. Но вот что твориться с предложеной Вами последней схемой:
карма: 0

0
Разработчик
Ответов: 26151
Рейтинг: 2127
#225: 2020-12-28 17:53:55 ЛС | профиль | цитата
Fangir, ищи у себя, все прекрасно работает. По крайней мере, с твоим текстовым файлом
test_0031.png
карма: 22

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