purebasic.info

PureBasic forum
Текущее время: Чт дек 13, 2018 7:15 am

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
 Заголовок сообщения: Получение и потеря фокуса StringGadget
СообщениеДобавлено: Ср авг 01, 2018 12:43 am 
Не в сети
ассистент
Аватар пользователя

Зарегистрирован: Ср июл 18, 2018 12:50 am
Сообщений: 22
Откуда: Россия, Красноярск
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Добрый день, уважаемые !!! Подскажите, пожалуйста такую вещь, а то, нигде в справке не нашел как это можно сделать. Суть: есть окно со StringGadget. Как создать фокус в гаджете левой кнопкой мыши, чтоб при этом затиралась прописанная по умолчанию строка, я разобрался. Но как сделать то же самое правой кнопкой мыши ? Чтоб при этом, естественно, появлялось всплывающее меню, как и положено при клике правой кнопкой. А затем, чтоб просто при клике по окну, гаджет терял фокус, и возвращалась строка по умолчанию.

Вот код:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
OpenWindow(0,300,200,400,250,"Proverka")
LoadFont(0,"Arial",20)
SetGadgetFont(#PB_Default,FontID(0))
SetWindowColor(0,RGB(170,170,170))
StringGadget(40,70,150,250,40,"New text",#PB_Text_Center)
Repeat
  event=WaitWindowEvent()
  test=EventType()
  If test=#PB_EventType_Focus
    SetGadgetText(40,"")
  EndIf
Until Event = #PB_Event_CloseWindow



Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Ср авг 01, 2018 7:05 am 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6412
Благодарил (а): 21 раз.
Поблагодарили: 200 раз.
Пункты репутации: 52
Может вы вот это имели в виду?
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
OpenWindow(0,300,200,400,250,"Proverka")
LoadFont(0,"Arial",20)
SetGadgetFont(#PB_Default,FontID(0))
SetWindowColor(0,RGB(170,170,170))
StringGadget(40,70,150,250,40,"",#PB_Text_Center)
S$="New text"
SendMessage_(GadgetID(40), #EM_SETCUEBANNER, 0, @S$)
StringGadget(39,70,100,250,40,"",#PB_Text_Center)
S1$="Шаблон текст"
SendMessage_(GadgetID(39), #EM_SETCUEBANNER, 0, @S1$)
 
 
Repeat
  event=WaitWindowEvent()
 
Until Event = #PB_Event_CloseWindow


_________________
read-only ¯\_(ツ)_/¯


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Ср авг 01, 2018 8:27 am 
Не в сети
ассистент
Аватар пользователя

Зарегистрирован: Ср июл 18, 2018 12:50 am
Сообщений: 22
Откуда: Россия, Красноярск
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
kvitaliy писал(а):
Может вы вот это имели в виду?

Да ! То, что надо !!! Приогромнейше благодарен !!! Только ещё маленькую деталь так и не могу найти в справке - если гаджет в фокусе и в строку ничего не вписано, то при клике на окно (потере фокуса в StringGadget), в гаджете снова появлялась бы надпись по умолчанию.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Ср авг 01, 2018 9:14 am 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6412
Благодарил (а): 21 раз.
Поблагодарили: 200 раз.
Пункты репутации: 52
Трофимов Андрей2 писал(а):
при клике на окно (потере фокуса в StringGadget)

Это 2 разных события - клик по окну и потеря фокуса. При клике по окну разве фокус на гаджете теряется?
Я специально 2 гаджета вставил в код, что бы видно было потерю фокуса.

_________________
read-only ¯\_(ツ)_/¯


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Ср авг 01, 2018 9:42 am 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6412
Благодарил (а): 21 раз.
Поблагодарили: 200 раз.
Пункты репутации: 52
Можно костыль вставить в виде фальшивого гаджета:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
OpenWindow(0,300,200,400,250,"Proverka")
LoadFont(0,"Arial",20)
SetGadgetFont(#PB_Default,FontID(0))
SetWindowColor(0,RGB(170,170,170))
StringGadget(0,0,0,0,0,"")
StringGadget(40,70,150,250,40,"",#PB_Text_Center)
S$="New text"
SendMessage_(GadgetID(40), #EM_SETCUEBANNER, 0, @S$)
StringGadget(39,70,100,250,40,"",#PB_Text_Center)
S1$="Шаблон текст"
SendMessage_(GadgetID(39), #EM_SETCUEBANNER, 0, @S1$)
 
 
Repeat
  event=WaitWindowEvent()
   
  If  event= #PB_Event_LeftClick
    SetActiveGadget(0)
  EndIf
 
Until Event = #PB_Event_CloseWindow


_________________
read-only ¯\_(ツ)_/¯


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Ср авг 01, 2018 9:47 am 
Не в сети
ассистент
Аватар пользователя

Зарегистрирован: Ср июл 18, 2018 12:50 am
Сообщений: 22
Откуда: Россия, Красноярск
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
kvitaliy писал(а):
Это 2 разных события - клик по окну и потеря фокуса.

Понял. Я в том плане, что неплохо было бы, чтоб при клике по окну, если в гаджет так ничего и не вписано, снова восстанавливалась запись по умолчанию. Однако, то, что на ПКМ он теперь реагирует как и на ЛКМ просто отлично !!!


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Ср авг 01, 2018 10:20 am 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6412
Благодарил (а): 21 раз.
Поблагодарили: 200 раз.
Пункты репутации: 52
Фальшивый гаджет решает

_________________
read-only ¯\_(ツ)_/¯


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Ср авг 01, 2018 5:53 pm 
Не в сети
ассистент
Аватар пользователя

Зарегистрирован: Ср июл 18, 2018 12:50 am
Сообщений: 22
Откуда: Россия, Красноярск
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
kvitaliy писал(а):
Можно костыль вставить в виде фальшивого гаджета:


А что это за команда SendMessage_(GadgetID(39), #EM_SETCUEBANNER, 0, @S1$) ? Что делает SendMessage_, и что делает #EM_SETCUEBANNER ? Не могу их найти в справке...


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Ср авг 01, 2018 6:16 pm 
Не в сети
профессор

Зарегистрирован: Вс июл 05, 2009 5:55 pm
Сообщений: 340
Благодарил (а): 1 раз.
Поблагодарили: 12 раз.
Пункты репутации: 0
Цитата:
А что это за команда SendMessage_(
Когда встречаеш после команды подчеркивание это значит команда из API, те самые которые вызываются из библиотек *.DLL, в даном случае SendMessage_ посылает сообщение в гаджет индификатор которого получаем так GadgetID(39), и передаем гаджету(в нашем случае, а в другом это может быть и чегото другое) сообщение #EM_SETCUEBANNER с параметрами - 0, @S1$ где @S1$адрес строки с текстом.

Что такое API в инете полным полно. Когда пишеш процедуру, то ее можно оформить как библиотеку и доздать из нее DLL и прлеплять к своей проге и вызывать эту процедуру, так устрояна винда, все на библиотеках и вызовах процедур с задаными параметрами.
Например ShowWindow_(WindowID(0),#SW_MINIMIZE) сделан вызов на АПИ, минимизировать окно(тут обычно свое WindowID(0), но можно и чужое, главное знать его индификатор, и непромазать мимо нужного окна, а то всернет рабочий стол(а кнопки развернуть у него обычно нет) и буш перегружать винду :lol: ), иногда на подобные АПИ функции появляются аналоги у Пурика, и ненужно извращаться с поиском нужной команды.

_________________
искатель истины


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Ср авг 01, 2018 6:35 pm 
Не в сети
ассистент
Аватар пользователя

Зарегистрирован: Ср июл 18, 2018 12:50 am
Сообщений: 22
Откуда: Россия, Красноярск
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
balex1978 писал(а):
и ненужно извращаться с поиском нужной команды.

Благодарю за такую подробную информацию !!! Только, вот, насчет "...и ненужно извращаться с поиском нужной команды", для меня пока сложно ))) Тут команд, подобных #EM_SETCUEBANNER миллионы ! Для меня сейчас это что-то вроде океана, в котором каждая капля и есть подобная команда событий, типов событий и т.п. Я в них просто тону !!! )) Блин, очень сложно для меня пока даются эти события в окне и гаджетах ((


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Чт авг 02, 2018 10:41 am 
Не в сети
профессор

Зарегистрирован: Вс июл 05, 2009 5:55 pm
Сообщений: 340
Благодарил (а): 1 раз.
Поблагодарили: 12 раз.
Пункты репутации: 0
Скачай с инета какойнибуть древовидный блокнот, а лучше несколько. Создай в нем много подразделов хоть 500(у меня нажамаеш Ф5 и держеш), а лучше больше и сохрани. Открой заново блокнот и этот файлик и посмотри как ведет блокнот, если тормозит при загрузке файла или слишком неудобен бери другой.
В этом блокноте пиши категории например Gadget (Гаджет) и в подкатегориях сгрупируй эти гаджеты(мож по отдельности) и детальную инфу которую считаеш нужной и примерчики незабудь писать краткие с поясниниями(иногда следует писать версию пурика, частенько некоторые команды исчезают или меняют название или параметры, например WindowID(#Window) была так раньше WindowID() потому что была такая команда UseWindow(#Window)) теперь этой нету такое наблюдается иногда, например переработали все что касаемо файлов если неошибаюсь ReadByte(#File) было тоже так ReadByte(), по крайней мере тут WriteData(#File , *MemoryBuffer , Length) было так WriteData(*MemoryBuffer , Length), приходилось голову ломать как проги переделывать и эти подсказки с переделками тоже в этом блокноте писать)

По поводу твоей страшной команды - #EM_SETCUEBANNER, вот кусок из кода что выше тебе предложили:
StringGadget(40,70,150,250,40,"",#PB_Text_Center)
S$="New text"
SendMessage_(GadgetID(40), #EM_SETCUEBANNER, 0, @S$)

где на АПИ StringGadget это edit- ПРОСТЕНЬКИЙ РЕДАКТОР извесный как НОТЕПАД в винде которого недолюбливаю програмисы, тормоз и примитив.
Как видим в посылке сообщения SendMessage_(GadgetID(40) стоит его индификатор StringGadget(40, который получаем так GadgetID(40) или так Hwnd=StringGadget(40,70,150,250,40,"",#PB_Text_Center) и тогда пишем сообщение так SendMessage_(Hwnd....
Все что связано с индификатором GadgetID(40) и ему посылается любым способом или получается от него(в даном случае это наш редактор StringGadget() ) в АПИ нужно искать в справке по АПИ только по отношению к нему т. е. edit, а не к StringGadget.
Справочники по АПИ есть и на Руском, но краткие, можно и на сайте http://vsokovikov.narod.ru/ поискать нужное , хоть и невсе, приходится искать по всему инету и за бугром и на офсайте http://msdn.microsoft.com/en-us/ но далеко не все так на руском, неполюбляют они давать нам нормальным языком, как ктото говорил, что лучше справку читать на руском, часто разные слова на инглише пишутся одинаково, а подразумеваются по разному. :?
руская справка для пурика тут http://purebasic.ucoz.com/publ/spravka/ ... s/4-1-0-38 или на офсайте, у Петра спроси, он часто сссылки на него дает, да и тут на форуме гдето вылаживали справки, вот нашел viewtopic.php?f=6&t=4874&p=89077&hilit=%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D1%87%D0%BD%D0%B8%D0%BA+API#p89077.
По АПИ например тут http://purebasic.ucoz.com/publ/vvedenie ... i/3-1-0-15
тут http://purebasic.ucoz.com/PB_rar/Spravo ... 32_API.rar и тут http://purebasic.ucoz.com/PB_rar/WINAPI.rar/

Еще учись пользоваться правильно поисковиком первое слово для него важнее следующих например по твоему запросу -"сообщение EM_SETCUEBANNER для edit" вот например аналогичная прога http://rsdn.org/forum/dotnet.gui/3228950.all и там,...
правда там для комбобокса
private const int EM_SETCUEBANNER = 0x1501;
SendMessage(control.Handle, EM_SETCUEBANNER, 0, text ?? string.Empty);
или тут http://www.delphisources.ru/forum/showt ... hp?t=25840 уже по редактору, правда они простым способм его создают как и мы, но при этом ругаются что все бейсики примитивы, а сми для себя устроили примитив, ну да ладно спорить с ними бесполезно :) .
Разные устройства имеют контрол, это код который обрабатывает твои запросы по отношению к этому устройству, в нашем случае это эдит контрол, Edit Control, вот нашел его на фосайте https://msdn.microsoft.com/en-us/librar ... 58(v=vs.85).aspx там и твоя мессага(сообщение) EM_SETCUEBANNER и чегото на инглише "Sets the text that is displayed as the textual cue, or tip, for an edit control. You can use this macro or send the EM_SETCUEBANNER message explicitly."
Ну вобщем разбирайся, но в начале в АПИ дебри лучше нелезть пока новичек, справки мож покачать и поглазеть.

_________________
искатель истины


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт авг 03, 2018 7:04 pm 
Не в сети
ассистент
Аватар пользователя

Зарегистрирован: Ср июл 18, 2018 12:50 am
Сообщений: 22
Откуда: Россия, Красноярск
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
balex1978 писал(а):
Скачай с инета какойнибуть древовидный блокнот...

Да, хорошая подсказка. Нужно будет так и сделать. Действительно будет очень удобно для себя потом сим хелпом пользоваться !!! Очень понравился такой вариант накопления команд с пояснениями !!!


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 12 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: Google [Bot] и гости: 10


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB