purebasic.info

PureBasic forum
Текущее время: Пт янв 19, 2018 4:43 am

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




Начать новую тему Ответить на тему  [ Сообщений: 30 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Библиотека PureDisphelper
СообщениеДобавлено: Пт янв 16, 2009 5:23 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6223
Благодарил (а): 16 раз.
Поблагодарили: 173 раз.
Пункты репутации: 48
Библиотека PureDisphelper - существенно расширяющая возможности языка Pure Basic. Как то я говорил, что большим недостатком Пурика считаю отсутствие поддержки OCX компонентов, сложно или практически невозможно взаимодействовать с такими обьектами, как Word.Application или Agent.Control, или тот же самый InternetExplorer.Application. Но теперь всё изменилось - установив эту библиотеку можно работать с обьектами не хуже чем на С++ или VisualBasic.

Вот к примеру, моя старинная программа, написанная на VB6, которая умеет проверять орфографию в буфере обмена, используя MS Word, выглядит на Пурике так:
Код:
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
 
Global textb$=""
 If Len(GetClipboardText())<1
  MessageRequester("Проверка орфографии", "Буфер обмена не содержит текст!", 0)
End
EndIf
 
textb$=GetClipboardText()
 
dhToggleExceptions(#True)
ObjWord = dhCreateObject("Word.Application")
 
dhGetValue("%d", @Result, ObjWord, ".CheckSpelling(%T)",@textb$)
 If Result <0
  MessageRequester( "Проверка орфографии","Ошибки не найдены!" )
  dhReleaseObject(ObjWord)
  End
    Else
;- "Ошибки есть!"
  dhPutValue  (ObjWord, ".Visible = %b", #False)
  dhCallMethod    (ObjWord, "Documents.Add")
  dhCallMethod    (ObjWord, "Selection.TypeText(%s)", @textb$)
  dhPutValue  (ObjWord,".Options.CheckGrammarWithSpelling = %b",#False)
  dhPutValue  (ObjWord,".Options.IgnoreUppercase = %b",#False)
  dhCallMethod    (ObjWord,".ActiveDocument.CheckSpelling")
  dhCallMethod    (ObjWord,".Selection.WholeStory")
  dhCallMethod    (ObjWord, ".Selection.Copy")
  dhCallMethod    (ObjWord, ".ActiveDocument.Close(%b)",0); (0)
  dhCallMethod    (ObjWord, ".Quit")
     
     
dhReleaseObject(ObjWord)
EndIf
 
 



С библиотекой поставляется много примеров. Это и работа с Excel, и отображение GIF анимации, работа с OCX.

Библиотеку выкладываю сюда. Проверена работа в 4.0, 4.20 и 4.30. Везде работает хорошо.


Вложения:
PureDisphelper2.zip [581.23 KiB]
Скачиваний: 1131
Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт янв 16, 2009 6:40 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11079
Благодарил (а): 4 раз.
Поблагодарили: 384 раз.
Спасибо kvitaliy
Очень и очень нужная библиотека! :)
Может ты ещё знаешь где на великом и магучем можно прочитать как вызывать разные объекты и работать с ними?

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт янв 16, 2009 7:34 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6223
Благодарил (а): 16 раз.
Поблагодарили: 173 раз.
Пункты репутации: 48
Пётр писал(а):
можно прочитать к


MSDN на сайте Мелкософта, иногда есть по русски, или установить на комп( но очень большая). И изучение примеров на VBA, VB, и скриптов VBS. А так вроде не знаю больше.

_________________
read-only


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб янв 17, 2009 2:43 am 
Не в сети
GameC@Soft
Аватар пользователя

Зарегистрирован: Сб сен 22, 2007 12:45 pm
Сообщений: 1085
Откуда: Я из лесу вышел, и сразу зашел, в босоножках дырявых и взлядом ночным.
Благодарил (а): 1 раз.
Поблагодарили: 2 раз.
Пункты репутации: 0
kvitaliy
Ты рулишь)!!!!!!!!!!!!!

_________________
"Самый большой глюк в PureBasic - это твоя голова...." (с) Артем
Мой сайт: http://feelzone.org.ua/


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср июн 10, 2009 3:40 pm 
Не в сети
доцент

Зарегистрирован: Пн июн 01, 2009 8:26 am
Сообщений: 50
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Сильно не пинайте меня за первый мой код :)

Если кто может помочь с ошибкой "The following PureLibrary is missing: STRINGEXTENSION" в PB 4.30

У кого установлена Nero должно работать

Пример гаджетов из ActiveX, с графиком пока не разбирался

Код:
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
 
; Пример работы ActiveX гаджетов из AudioControls2.ocx (ипользуется в Nero Wave Editor)
; Для работы примера нужна библиотека "PureDispHelper"
; Autor: andrest 10.06.09
; PureBasic v4.00 (в 4.30 получаю "The following PureLibrary is missing: STRINGEXTENSION" :=( )
 
EnableExplicit
 
Global objKnob1.l, objKnob2.l,objLEDMeter1.l, objLEDMeter2.l, objLEDMeter3.l, objLEDMeter4.l
Global objCurveEdit.l, objLevelSlider.l, objAxisCtrl
 
Enumeration
  #Max
  #Min
  #Position
  #Grid
  #objKnob1
  #objKnob2
  #objLEDMeter1
  #objLEDMeter2
  #objLEDMeter3
  #objLEDMeter4
  #objCurveEdit
  #objLevelSlider
  #objAxisCtrl
  #Frame3DGadget1
  #Frame3DGadget2
  #TextPos
  #ColorAxis
EndEnumeration
 
;XIncludeFile "..\Register_Unregister_ActiveX.pb"
XIncludeFile "..\ComEventSink.pb"
 
dhToggleExceptions(#True) ; Включим сообщения об ошибках
 
; процедура верхего регулятора
Procedure EventKnob1(Event$, ParameterCount, *Params)
  dhCallMethod(objLEDMeter1, ".SetLevel(%d)", OCX_EventLong(*Params, 1))
  dhCallMethod(objLEDMeter3, ".SetLevel(%d)", OCX_EventLong(*Params, 1))
EndProcedure
; процедура нижнего регулятора
Procedure EventKnob2(Event$, ParameterCount, *Params)
  dhCallMethod(objLEDMeter2, ".SetLevel(%d)", OCX_EventLong(*Params, 1))
  dhCallMethod(objLEDMeter4, ".SetLevel(%d)", OCX_EventLong(*Params, 1))
EndProcedure
; процедура вертикального регулятора (только как доп. индикация работы)
Procedure EventLevelSlider(Event$, ParameterCount, *Params)
 SetGadgetText(#TextPos,  Str(OCX_EventLong(*Params, 1)))
 dhCallMethod(objAxisCtrl, ".EndValue(%d)", OCX_EventLong(*Params, 1))
EndProcedure
 
; Создаём окно
If OpenWindow(0, #PB_Ignore, #PB_Ignore, 640, 480, "AUDIOCONTROLS-Demo for AudioControls2.ocx")
  If CreateGadgetList(WindowID(0))
 
    ; Создаём панель регуляторов и индикаторов
    Frame3DGadget(#Frame3DGadget1, 5,  5, 200, 155, "Knob && LEDMeter")
    ButtonGadget (#Min, 15, 25, 70, 25, "Min -100")
    ButtonGadget (#Max, 15, 55, 70, 25, "Max 100")
    ButtonGadget (#Position, 15, 85, 70, 25, "Position 0")
    objKnob1 = OCX_CreateGadget(#objKnob1, 100, 15, 50, 50, "AUDIOCONTROLS2.KnobCtrl.1")
    objKnob2 = OCX_CreateGadget(#objKnob2, 100, 65, 50, 50, "AUDIOCONTROLS2.KnobCtrl.1")  
    objLEDMeter1  = OCX_CreateGadget(#objLEDMeter1, 150, 25, 15, 85, "AUDIOCONTROLS2.LEDMeterCtrl.1")
    objLEDMeter2  = OCX_CreateGadget(#objLEDMeter2, 175, 25, 15, 85, "AUDIOCONTROLS2.LEDMeterCtrl.1")
    objLEDMeter3  = OCX_CreateGadget(#objLEDMeter3, 15, 120, 175, 10, "AUDIOCONTROLS2.LEDMeterCtrl.1")
    objLEDMeter4  = OCX_CreateGadget(#objLEDMeter4, 15, 135, 175, 10, "AUDIOCONTROLS2.LEDMeterCtrl.1")
    ; И присвоим значение для первого регулятора
    dhCallMethod(objKnob1, ".Min(%d)", 0)
    dhCallMethod(objKnob1, ".Max(%d)", 50)
    dhCallMethod(objKnob1, ".Position(%d)", 0)
    ; и для второго
    dhCallMethod(objKnob2, ".Min(%d)", 0)
    dhCallMethod(objKnob2, ".Max(%d)", 50)
    dhCallMethod(objKnob2, ".Position(%d)", 0)  
   
    ; Создаём панель графопостроителя
    Frame3DGadget(#Frame3DGadget2, 215,  5, 420, 155, "CurveEdit")
    ButtonGadget (#Grid, 225, 25, 70, 25, "Grid")
    ;ButtonGadget (#?, 225, 55, 70, 25, "Max 100")
    ;ButtonGadget (#?, 225, 85, 70, 25, "Position 0")  
    objCurveEdit = OCX_CreateGadget(#objCurveEdit, 305, 25, 315, 120, "AUDIOCONTROLS2.CurveEditCtrl.1")
   
    ; Вертикальный регулятор и его значения
    objLevelSlider = OCX_CreateGadget(#objLevelSlider, 10, 200, 50, 130, "AUDIOCONTROLS2.LevelSliderCtrl.1")
    dhCallMethod(objLevelSlider, ".Min(%d)", 0)
    dhCallMethod(objLevelSlider, ".Max(%d)", 100)
    dhCallMethod(objLevelSlider, ".Position(%d)", 0)
    TextGadget(#TextPos, 0, 180, 40, 15, "Label", #PB_Text_Center)
   
    ; Линейка и её цвет :=)
    objAxisCtrl = OCX_CreateGadget(#objAxisCtrl, 0, 440, 640 , 35, "AUDIOCONTROLS2.AxisCtrl.1")
    ButtonGadget (#ColorAxis, 5, 400, 70, 25, "ColorAxis")    
   
    ; Назначаем обработчики событий
    OCX_ConnectEvents(objKnob1, @EventKnob1())
    OCX_ConnectEvents(objKnob2, @EventKnob2())
    OCX_ConnectEvents(objLevelSlider, @EventLevelSlider())        
   
    Repeat
     
      Select WaitWindowEvent()
       
        Case #PB_Event_Gadget
          Select EventGadget()     ; События нажатия кнопок      
            Case #Min  
             dhCallMethod(objKnob1, ".Min(%d)", -100)
             dhCallMethod(objKnob2, ".Min(%d)", -100)
                         
            Case #Max
             dhCallMethod(objKnob1, ".Max(%d)", 100)
             dhCallMethod(objKnob2, ".Max(%d)", 100)
                         
            Case #Position
             dhCallMethod(objKnob1, ".Position(%d)", 0)
             dhCallMethod(objKnob2, ".Position(%d)", 0)
                             
            Case #Grid
             dhCallMethod(objCurveEdit, ".HorizontalLines(%d)", 5)            
             dhCallMethod(objCurveEdit, ".VerticalLines(%d)", 10)
             
            Case #ColorAxis
             dhCallMethod(objAxisCtrl, ".BackColor(%d)", ColorRequester.l())
          EndSelect
         
        Case #PB_Event_CloseWindow
            Break
                   
      EndSelect
     
    ForEver
   
    CloseWindow(0)
   
    If objKnob1 : dhReleaseObject(objKnob1) : EndIf
   
  EndIf
EndIf
 


_________________
Остановите землю, я схожу :)


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

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11079
Благодарил (а): 4 раз.
Поблагодарили: 384 раз.
andrest писал(а):
Если кто может помочь с ошибкой
Это значит что библиотека не может работать с данной версией PB.
Я кажется её исходники видел, может удастся перекомпилировать...

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср июн 10, 2009 4:10 pm 
Не в сети
доцент

Зарегистрирован: Пн июн 01, 2009 8:26 am
Сообщений: 50
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Пётр писал(а):
кажется её исходники видел, может удастся перекомпилировать...


Да было бы хорошо...

_________________
Остановите землю, я схожу :)


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

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11079
Благодарил (а): 4 раз.
Поблагодарили: 384 раз.
Перекомпилировал библиотеку под PB4.30, вроде работает. :)
Ну и естественно изменил её немного. 8) Теперь все папки с примерами находятся в общей папке с именем PureDispHelper

Подключаемые файлы ComEventSink.pb и Register_Unregister_ActiveX.pb больше не нужны, т. к. их функции были перенесены в библиотеку.
При этом, процедура RegisterActiveX переименована в OCX_RegisterActiveX, а UnRegisterActiveX в OCX_UnRegisterActiveX


Вложения:
Комментарий к файлу: Библиотека для PureBasic 4.30
PureDispHelper_PB_4.30.rar [517.49 KiB]
Скачиваний: 843

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)
Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср июн 10, 2009 6:13 pm 
Не в сети
доцент

Зарегистрирован: Пн июн 01, 2009 8:26 am
Сообщений: 50
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Пётр :shock: Всё работает УРА!!! Спасибо большое. Здорово ты её причесал. Даже глаз радует, все инклиды отключил и всё пашет.
Размер уменьшился на пол килобайта при отключении If CreateGadgetList(WindowID(0)).

_________________
Остановите землю, я схожу :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт июн 11, 2009 9:24 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Чт фев 26, 2009 1:53 am
Сообщений: 1154
Откуда: Беларусь, Витебск
Благодарил (а): 22 раз.
Поблагодарили: 1 раз.
Пункты репутации: 0
Хорошая либа! Закрыла многие недостатки Пурика :P

_________________
Ubuntu 10.10, PureBasic 4.61 x86
Изображение


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт июн 11, 2009 2:32 pm 
Не в сети
доцент

Зарегистрирован: Пн июн 01, 2009 8:26 am
Сообщений: 50
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Чёрт побери не получается у меня график построить :( , в интернете по этому активу вобще 0 информации, странно, неужели никто не пробовал его подключить :?: Если у кого есть желание его помучать то вот его функции (выдрал в редактое ресурсов)

Код:
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
 
AUDIOCONTROLS2Lib; // AudioControls2 ActiveX Control module
 
Dispatch _DCurveEdit; // Dispatch interface for CurveEdit Control 2.0
GUID={D66A6E80-4017-443E-848F-D755F67C11A4};
  HorizontalLines: I2;
  VerticalLines: I2;
  Static: I4;
  function AddPoint(x:R4; y:R4; nCurve:I2);
  function EvaluateAt(fX:R4; nCurve:I2): R4;
  function Reset(nCurve:I2);
  function GetPoint(nIndex:I2; fX:^R4; fY:^R4; nCurve:I2);
  function GetNumberOfPoints(nCurve:I2): I2;
  function AddCurve: I2;
  function DeleteCurve(nCurve:I2);
  function GetNumberOfCurves: I2;
  function SetCurveColor(colorCurve:OLE_COLOR; nCurve:I2);
  function SetStaticState(bStatic:I4; nCurve:I2);
 
Dispatch _DCurveEditEvents; // Event interface for CurveEdit Control 2.0
GUID={42819D07-27DC-4413-BBBC-DE895C5B18C0};
  function CurveChanged;
  function CaptureReleased;
 
Class CurveEdit; // CurveEdit Control 2.0
GUID={6683A3CD-724F-402E-A2C3-DC410AD12D76};
  HorizontalLines: I2;
  VerticalLines: I2;
  Static: I4;
  function AddPoint(x:R4; y:R4; nCurve:I2);
  function EvaluateAt(fX:R4; nCurve:I2): R4;
  function Reset(nCurve:I2);
  function GetPoint(nIndex:I2; fX:^R4; fY:^R4; nCurve:I2);
  function GetNumberOfPoints(nCurve:I2): I2;
  function AddCurve: I2;
  function DeleteCurve(nCurve:I2);
  function GetNumberOfCurves: I2;
  function SetCurveColor(colorCurve:OLE_COLOR; nCurve:I2);
  function SetStaticState(bStatic:I4; nCurve:I2);
  function CurveChanged;
  function CaptureReleased;
 



а вот собственно моя попытка хоть как то его подёргать :roll:

Код:
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
 
Procedure DrawGraf()
 
  dhCallMethod(objCurveEdit, ".HorizontalLines(%d)", 5)            
  dhCallMethod(objCurveEdit, ".VerticalLines(%d)", 10)
  dhCallMethod(objCurveEdit, ".AddCurve")
  ;dhCallMethod(objCurveEdit, ".Static(%d)", 0)
  dhCallMethod(objCurveEdit, ".SetCurveColor(%d, %d)", RGB(255,0,0), 1)
 
  Define.l i
  For i = 1 To 50
     dhCallMethod(objCurveEdit, ".AddPoint(%d, %d, %d)", 1, i, 0)
     dhCallMethod(objCurveEdit, ".AddPoint(%d, %d, %d)", i, Random(50), 1)
     ;Debug i
     ;dhCallMethod(objCurveEdit, ".EvaluateAt(%d, %d)", 1, 1)
     ;dhCallMethod(objCurveEdit, ".SetStaticState(%d, %d)", 0, 1)  
  Next
 
  ;dhCallMethod(objCurveEdit, ".EvaluateAt(%d, %d)", 0, 1)
  ;dhCallMethod(objCurveEdit, ".SetStaticState(%d, %d)", 0, 1)
 
;   For i = 50 To 0 Step -1
;      dhCallMethod(objCurveEdit, ".AddPoint(%d, %d, %d)", i, i, 0)
;      dhCallMethod(objCurveEdit, ".AddPoint(%d, %d, %d)", i, i, 1)
;      Debug i
;   Next
 
  ;dhCallMethod(objCurveEdit, ".EvaluateAt(%d, %d)", 0, 1)
  ;dhCallMethod(objCurveEdit, ".SetStaticState(%d, %d)", 0, 100)
 
EndProcedure
 


_________________
Остановите землю, я схожу :)


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

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11079
Благодарил (а): 4 раз.
Поблагодарили: 384 раз.
Может проще график построить средствами пурика?

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт июн 11, 2009 6:22 pm 
Не в сети
доцент

Зарегистрирован: Пн июн 01, 2009 8:26 am
Сообщений: 50
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Да может конечно, только хотелось из этого что то получить, ведь он в приципе довольно шустро гистограммы рисует. Хотел в будущем на этом контроле какиелибо приборчики поделать :)

_________________
Остановите землю, я схожу :)


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

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11079
Благодарил (а): 4 раз.
Поблагодарили: 384 раз.
Для себя оно конечно подойдёт, но если выложишь в инете и у юзера не будет неро установлен...

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт июн 23, 2009 8:22 am 
Не в сети
доцент

Зарегистрирован: Пн июн 01, 2009 8:26 am
Сообщений: 50
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Нашёл на буржуйском сайте, весьма полезная вещь для этого


Вложения:
OLE_COM_GEN.zip [53.33 KiB]
Скачиваний: 508

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

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


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

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


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

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