purebasic.info

PureBasic forum
Текущее время: Ср ноя 20, 2019 12:40 am

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




Начать новую тему Ответить на тему  [ Сообщений: 151 ]  На страницу 1, 2, 3, 4, 5 ... 11  След.
Автор Сообщение
 Заголовок сообщения: Api функции
СообщениеДобавлено: Пн дек 04, 2006 4:03 pm 
Не в сети
ассистент
Аватар пользователя

Зарегистрирован: Вс дек 03, 2006 6:27 pm
Сообщений: 20
Откуда: Питер
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Мне нравится этот Бэйсик еще и тем, что можно легко использовать api функции форточек
Например
Код:
1
GetKeyState_(#VK_NUMPAD2)


определяет статус клавишы numpad2.

Код:
1
2
*DC = GetDC_( GetDesktopWindow_() ) ;можно вместо GetDesktopWindow_() попробовать GetCapture_()
color=GetPixel_(*DC, x, y)


получаем цвет пикселя на экране в координатах x, y.

Код:
1
SetPixel_(*DC, x+10, y+10, color)


Изменяем цвет пикселя на экране в координатах x, y на color

Код:
1
2
3
4
5
 
SetCursorPos_(x, y)  
mouse_event_(#MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
mouse_event_(#MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
Ellipse_(*DC, x-2,y-2,x+2,y+2)


Эмулируем левый клик мыши в точку с координатами x, y и рисуем там эллипс

Вобщем ищем в инете описание api функций, смотрим количество и тип параметров и юзаем! (Не забываем поставить "_" после имени функции)


Последний раз редактировалось rAmpArk Сб янв 13, 2007 1:57 pm, всего редактировалось 1 раз.

Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн дек 04, 2006 4:09 pm 
Не в сети
ассистент
Аватар пользователя

Зарегистрирован: Вс дек 03, 2006 6:27 pm
Сообщений: 20
Откуда: Питер
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Мне вообще кажется что почти все функции ПБ построены на api функциях.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: MSDN и WinAPI.
СообщениеДобавлено: Пн дек 04, 2006 7:39 pm 
Не в сети
BackupUser
Аватар пользователя

Зарегистрирован: Ср ноя 29, 2006 9:29 pm
Сообщений: 1492
Откуда: Москва
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
[удалено как ошибочный пост]


Последний раз редактировалось Fdisk Сб авг 13, 2011 7:34 pm, всего редактировалось 1 раз.

Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: MSDN и WinAPI.
СообщениеДобавлено: Вт дек 05, 2006 8:51 am 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6559
Благодарил (а): 31 раз.
Поблагодарили: 221 раз.
Пункты репутации: 59
Fdisk писал(а):
Они отсылают всё время в два места:
MSDN и WinAPI.
Отсылают всех, включая начинающих.
Однако, для последних нигде нет обьяснения, по каким правилам переводить код, к примеру, MSDN в РВ ?
Даже примеры их и и то , 60 процентов не лезут никуда.
Начинаешь спрашивать - злятся, секретов выдавать не хотят.
Понятно...
Хотят продать, но хотят, чтоб не пользовались.
Вот и собираем по крупицам, кто где...
Вот пример, API.

Код:
1
2
3
4
5
DWORD APIENTRY UndeleteFile(
 
    HWND hwndOwner,     // handle of File Manager window
    LPSTR lpszDir       // address of name of initial directory
   );



Где нибудь существуют правила, как это вставить PureBasic?

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
;Пример вызова WINAPI 32 двумя способами:
; 1-й Встроенный механизм вызова
MessageBox_(0,"Body","Title",0)
;2-й Универсальный механизм, через библиотеку
; по идее должен работать с любыми, даже вновь созданными функциями
 
If OpenLibrary(0, "USER32.DLL")
 
  *F = IsFunction(0, "MessageBoxA")
  If *F
    CallFunctionFast(*F, 0, "Body", "Title", 0)
  EndIf
 
  CloseLibrary(0)
EndIf
 
 



;В случае с функцией UndeleteFile() из MSDN читаем, что "Import library - user-defined"
;Определенная в конкретном приложении (типа файлового менеджера) функция, вызывается когда пользователь выбирает команду из меню "Восстановить" .
; Т.о. вначале определись с библиотекой DLL. которую использует твоя программа для восстановления файла, а потом уже вызывай функцию.
; А если есть трудности с вызовом API то можно использовать программу ApiViwer 2003, там есть поддержка синтаксиса PureBasic
; где описаны более 6000 функций и процедур и более 52000 констант, поддержка русского языка, бесплатно. Есть более новая ApiViwer 2004
; но уже без поддержки Пурика, но есть много других языков. Я использую от неё только обновлённую базу данных.
; Распологалась на страничке http://www.activevb.de/rubriken/apiview ... ereng.html


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: MSDN и WinAPI.
СообщениеДобавлено: Вт дек 05, 2006 10:00 am 
Не в сети
BackupUser
Аватар пользователя

Зарегистрирован: Ср ноя 29, 2006 9:29 pm
Сообщений: 1492
Откуда: Москва
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
[удалено как ошибочный пост]


Последний раз редактировалось Fdisk Сб авг 13, 2011 7:34 pm, всего редактировалось 1 раз.

Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср июл 25, 2007 9:00 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6559
Благодарил (а): 31 раз.
Поблагодарили: 221 раз.
Пункты репутации: 59
Наткнулся на одну очень интересную API функцию - она ставит метку в систему, и эта метка действует до перезапуска системы. С её помощью можно организовать
к примеру только однократный запуск программы в текущем сеансе, или ограничение на запуск каких то полезных функций. Очень полезно при создании "шароварных" программ
при демонстрации возможностей и т.п.действий.
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
 
;Ограничение функциональности программы до перезапуска системы
; kvitaliy 25/07/2007
 
 
;{- Enumerations
;{ Windows
Enumeration
  #Window_0
EndEnumeration
;}
 
;{ Gadgets
Enumeration
  #ButtonGadget_0
  #ButtonGadget_1
EndEnumeration
;}
 
#CRLF = Chr(10) + Chr(13); перевод строки и каретки ( есть такая константа в PureBasuc, но я её забыл :)
 
;}
 
Procedure ShareKey(GlobalAtom.s);
 
If GlobalFindAtom_(GlobalAtom) = $120000 ; проверяем - есть ли метка в системе
  atom = GlobalAddAtom_(GlobalAtom) ; нет метки - значит ставим
  MessageRequester("Готово", "Запрограммированное действие выполнено!", #MB_OK); выполняем нужное действие
Else ; если метка есть, то действие не выполняем
   
  MessageRequester("АХТУНГ!!", "Лимит действий в этом сеансе Windows исчерпан."+#CRLF +"Для повторного запуска требуеться перезагрузка системы!", #MB_OK|#MB_ICONERROR)  
 
EndIf
 
EndProcedure
 
Procedure OpenWindow_Window_0()
  If OpenWindow(#Window_0, 435, 152, 234, 211, "Ограничение функциональности программы до перезапуска системы", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
    If CreateGadgetList(WindowID(#Window_0))
      ButtonGadget(#ButtonGadget_0, 35, 100, 155, 30, "Действие 1")
      ButtonGadget(#ButtonGadget_1, 35, 160, 155, 30, "Действие 2")
    EndIf
  EndIf
EndProcedure
 
OpenWindow_Window_0()
 
;{- Event loop
Repeat
  Event = WaitWindowEvent()
  Select Event
    ; ///////////////////
    Case #PB_Event_Gadget
      EventGadget = EventGadget()
      EventType = EventType()
      If EventGadget = #ButtonGadget_0
          ShareKey("Нажали кнопку 1")      ; Тут любая ключевая фраза без смысла и содержания
      ElseIf  EventGadget = #ButtonGadget_1  
           ShareKey("Нажали кнопку 2")     ; Тут любая ключевая фраза без смысла и содержания отличная от первой
      EndIf
    ; //////////////////////
    Case #PB_Event_CloseWindow
      EventWindow = EventWindow()
      If EventWindow = #Window_0
        Break
      EndIf
  EndSelect
ForEver
;}
 



Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср июл 25, 2007 9:42 pm 
Не в сети
BackupUser
Аватар пользователя

Зарегистрирован: Ср ноя 29, 2006 9:29 pm
Сообщений: 1492
Откуда: Москва
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
[удалено как ошибочный пост]


Последний раз редактировалось Fdisk Сб авг 13, 2011 7:34 pm, всего редактировалось 1 раз.

Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт июл 26, 2007 10:43 am 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11541
Благодарил (а): 4 раз.
Поблагодарили: 475 раз.
Цитата:
Последнее время просто шквал интересных полезных вещей

Здесь тебе не boolean.name где делают вид что помогают или помогают но с большой неохотой :(
У нас решаются реальные проблемы, да ещё с примерами программ. :)

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт июл 26, 2007 2:15 pm 
Не в сети
BackupUser
Аватар пользователя

Зарегистрирован: Ср ноя 29, 2006 9:29 pm
Сообщений: 1492
Откуда: Москва
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
[удалено как ошибочный пост]


Последний раз редактировалось Fdisk Сб авг 13, 2011 7:35 pm, всего редактировалось 1 раз.

Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт июл 26, 2007 2:21 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11541
Благодарил (а): 4 раз.
Поблагодарили: 475 раз.
Цитата:
Формулировка причины моей блокировки
"Пренеприятнейшая личность"
Это наверное просто отмазка. Я за тобой такого не замечал.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср авг 29, 2007 4:31 pm 
Не в сети
док
Аватар пользователя

Зарегистрирован: Ср авг 15, 2007 1:23 pm
Сообщений: 138
Откуда: с почты
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Никто не подскажет, как через WinAPI или средствами Пурика можно узнать текущую позицию курсора в текстовом или стринг гаджетах?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср авг 29, 2007 4:42 pm 
Не в сети
BackupUser
Аватар пользователя

Зарегистрирован: Ср ноя 29, 2006 9:29 pm
Сообщений: 1492
Откуда: Москва
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
[удалено как ошибочный пост]


Последний раз редактировалось Fdisk Сб авг 13, 2011 7:35 pm, всего редактировалось 1 раз.

Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср авг 29, 2007 4:54 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11541
Благодарил (а): 4 раз.
Поблагодарили: 475 раз.
Для текстового редактора (EditorGadget) есть специальная библиотека http://pbasic.spb.ru/files/up/LEP0_4Beta.zip
Вот две из многочисленых функций

CursorX==Editor_GetCursorX(Gadget)
Узнаём положение курсора по горизонтали.

CursorY=Editor_GetCursorY(Gadget)
Узнаём положение курсора по вертикали.


Для StringGadgetа можно использовать следующие процедуры:
Код:
1
2
3
4
5
6
7
8
9
Procedure StringGadgetCursorX(Gadget) 
  SendMessage_(GadgetID(Gadget),#EM_GETSEL,@Min,@Max)
  ProcedureReturn Max-SendMessage_(GadgetID(Gadget),#EM_LINEINDEX,SendMessage_(GadgetID(Gadget),#EM_LINEFROMCHAR,Min,0),0)+1
EndProcedure
 
Procedure StringGadgetCursorY(Gadget)
  SendMessage_(GadgetID(Gadget),#EM_GETSEL,@Min,@Max)
  ProcedureReturn SendMessage_(GadgetID(Gadget),#EM_LINEFROMCHAR,Min,0)+1
EndProcedure



С помощью первой, узнаём положение курсора по горизонтали , а с помощью второй - по вертикали.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср авг 29, 2007 5:38 pm 
Не в сети
док
Аватар пользователя

Зарегистрирован: Ср авг 15, 2007 1:23 pm
Сообщений: 138
Откуда: с почты
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Спасибо, помогло!!!


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

Зарегистрирован: Ср авг 15, 2007 1:23 pm
Сообщений: 138
Откуда: с почты
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Просто в чем была задача: Редактор с возможностью автозамены. Т.е., становишься на определенную позицию и при нажатии на нужный пункт меню или определенную комбинацию клавиш в текущей позиции добавляются всякие кракозяблы.
Процесс пока организован так:
Код:
1
2
3
4
5
tmp$=GetGadgetText(...)
tmp1$=left(tmp$,StringGadgetCursorX(...))
tmpl1$+"text"=right(tmp$,StringGadgetCursorX(...))
SetGadgetText(tmp1$,...)
 


Пишу по памяти, просто сейчас нет под руками исходника.
Правильно ли я вас понял, или есть более простые(удобные/красивые/быстрые) пути решения


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 151 ]  На страницу 1, 2, 3, 4, 5 ... 11  След.

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


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6


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

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