powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / О Toolbarе
11 сообщений из 11, страница 1 из 1
О Toolbarе
    #32676336
andreyR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Создаю Tollbar со стандартными кнопками (Copy, Cut, Paste). Как к ним привязать соответствующие стандартные методы?
Или можно эти кнопки вытащить на Toolbar уже "готовые к употреблению", если вся стандартная панель не нужна?
...
Рейтинг: 0 / 0
О Toolbarе
    #32676637
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) Запустить на выполнение пункт стандартного меню можно так:

SYS(1500, '_MED_PASTE', '_MEDIT') && Paste menu item

Список стандартных имен меню можно вытащить через команду

Код: plaintext
1.
2.
3.
4.
5.
SET PRINTER TO FILE test.txt
SET PRINTER ON
?SYS( 2013 )
SET PRINTER OFF
SET PRINTER TO
MODIFY FILE test.txt

Пункты редактирования начинаются с приставки _MED они идут в порядке следования собственно в меню. Пункты вида _MED_SP100 - это линия-разделитель в меню.

2) Можно использовать стандартный ToolBar, но для этого надо поставлять пользователю ресурсный файл (Foxuser.dbf), который содержит информацию о расположении этого ToolBar и используемых кнопках.
...
Рейтинг: 0 / 0
О Toolbarе
    #32676758
akrisiun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hi, here's mines edittoolbar with undo,cut,copy,paste buttons

buttons states refreshes with timer, regarding to
_SCREEN.ActiveForm.ActiveControl.Value state changes

Код: plaintext
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.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
PUBLIC o AS act_tbrEdit
o=NEWOBJECT( "act_tbrEdit" ) 
o.Show() 

*#INCLUDE "\vfplib\prg\def_inc.h"
#DEFINE VFP8_VERSION  VERSION( 5 )>= 800  
#DEFINE DEBUG_VERSION VERSION( 2 )# 0  

#DEFINE bc_toolBar  toolbar
#DEFINE bc_timer    timer
* #DEFINE cmdGraphics commandbutton 

**************************************************
* -- Class:        act_tbredit (\vfplib\cls\act_cls.vcx) 
* -- BaseClass:    bc_toolbar 
* -- Edit toolbar Extended 

DEFINE CLASS act_tbrEdit AS bc_toolbar

  Caption = "Edit"
  ControlBox = .T.
  DataSession =  1 
  cName = "act_tbredit"
  oactiveform = .NULL.
  Visible = .F. 

  cappobjectname = ("goApp")
  oappobject = .NULL.

  ADD OBJECT tmrrequest AS bc_timer WITH ; && baseobj.vcx 
        Enabled = .F. ;
      , Height =  20  ;
      , Interval =  500  ;
      , Left =  5  ;
      , Top =  3  ;
      , Width =  10 

  ADD OBJECT cmdundo AS cmdgraphics WITH ; && act_cls.vcx 
        Left =  15  ;
      , Picture = "..\bmp\undo.bmp" ;
      , TabIndex =  19  ;
      , ToolTipText = "Undo {Ctrl+Z}" ;
      , Top =  3  ;
      , ZOrderSet =  1 

  ADD OBJECT sep1 AS separator WITH ;
        Height =  0  ;
      , Left =  46  ;
      , Top =  3  ;
      , Width =  0 

  ADD OBJECT cmdcut AS cmdgraphics WITH ; && act_cls.vcx 
        Left =  46  ;
      , Picture = "..\bmp\cut.bmp" ;
      , TabIndex =  19  ;
      , ToolTipText = "Cut {Ctrl+X}" ;
      , Top =  3  ;
      , ZOrderSet =  3 

  ADD OBJECT cmdcopy AS cmdgraphics WITH ; && act_cls.vcx 
        Left =  70  ;
      , Picture = "..\bmp\copy.bmp" ;
      , TabIndex =  20  ;
      , ToolTipText = "Copy {Ctrl+C}" ;
      , Top =  3  ;
      , ZOrderSet =  4 

  ADD OBJECT cmdpaste AS cmdgraphics WITH ; && act_cls.vcx 
        Left =  94  ;
      , Picture = "..\bmp\paste.bmp" ;
      , TabIndex =  21  ;
      , ToolTipText = "Paste {Ctrl+V}" ;
      , Top =  3  ;
      , ZOrderSet =  5 

 PROCEDURE cmdundo.Click
    = SYS( 1500 , "_MED_UNDO", "_MEDIT")
  ENDPROC
  PROCEDURE cmdcut.Click
    = SYS( 1500 , "_MED_CUT", "_MEDIT")
  ENDPROC
  PROCEDURE cmdcopy.Click
    = SYS( 1500 , "_MED_COPY", "_MEDIT")  
  ENDPROC
  PROCEDURE cmdpaste.Click
    = SYS( 1500 , "_MED_PASTE", "_MEDIT")
  ENDPROC
  
  PROCEDURE buttonsstatus
    LOCAL lcOnError, luRet 
    LOCAL lnCmd 

    WITH This
    
       luRet =  0 
       lcOnError = ON( "ERROR" )
       ON ERROR =ERROR()
           lnCmd = _MED_UNDO
           luRet = SKPBAR("_MEDIT", lnCmd )
       ON ERROR &lcOnError                     && Restores ON ERROR 
          
       IF TYPE( "luRet" ) = "L"
         lnCmd = _MED_UNDO
         .cmdUndo.Enabled  = NOT SKPBAR("_MEDIT", lnCmd )
         
         lnCmd = _MED_CUT
         .cmdCut.Enabled   = NOT SKPBAR("_MEDIT", lnCmd )
         lnCmd = _MED_COPY
         .cmdCopy.Enabled  = NOT SKPBAR("_MEDIT", lnCmd )     
         lnCmd = _MED_PASTE
         .cmdPaste.Enabled = NOT SKPBAR("_MEDIT", lnCmd )     
         
       ELSE
          STORE (TYPE( "_SCREEN.ActiveForm.ActiveControl.Value" ) # 'U' ) ;
                  TO  .cmdUndo.Enabled, .cmdCut.Enabled ;
                    , .cmdCopy.Enabled, .cmdPaste.Enabled 
       ENDIF  
    
    ENDWITH
  ENDPROC
  
  PROCEDURE Destroy
    WITH This
         IF TYPE( '.tmrRequest.Name' ) = 'C'
            This.tmrRequest.Enabled = .F.  
         ENDIF 
         IF .Visible      
            .Hide() 
         ENDIF
         IF TYPE( "_SCREEN."+ This.cName +".Name" ) = "C"
            LOCAL lcObj
            lcObj = "_SCREEN." + This.cName 
            &lcObj = .F.
         ENDIF
    ENDWITH
  ENDPROC
  
  PROCEDURE Hide
    IF This.Visible 
       This.SaveWindowPosition()
    ENDIF
    This.Visible = .F. 
    This.Release() 
  ENDPROC
  
  PROCEDURE Init
    WITH This
         SET ASSERTS ON 
         
         IF TYPE( This.cAppObjectName ) = 'O'        && application object 
            This.oAppObject = EVALUATE( This.cAppObjectName )  
         ENDIF 
         
         ASSERT SET( "DATASESSION" ) ==  1  
         IF VFP8_VERSION                             && VFP  8  version or highest 
            LOCAL lObj 
            FOR EACH lObj IN .Controls 
               IF UPPER( lObj.BaseClass ) = "COMMANDBUTTON"
                  lObj.SpecialEffect =  2              && Hot tracking efect 
               ENDIF   
            ENDFOR
         ENDIF 
    
         IF DEBUG_VERSION
            IF TYPE( "_SCREEN."+ This.cName +".Name" ) = "C"
               lcMeth = "_SCREEN."+ This.cName +".Release()"
               &lcMeth
            ENDIF
            _SCREEN.AddProperty( This.cName, This )
         ENDIF
    
         .Dock(  0  )
         .ButtonsStatus()
         ASSERT ! .Visible 
    ENDWITH
  ENDPROC
  
  PROCEDURE Show(  nStyle ) 
    This.Visible = .T. 
  ENDPROC

  
  PROCEDURE MouseMove(  nButton, nShift, nXCoord, nYCoord ) 
    This.ButtonsStatus()
  ENDPROC
  
  PROCEDURE cmdundo.MouseMove(  nButton, nShift, nXCoord, nYCoord ) 
    This.Parent.ButtonsStatus()
  ENDPROC
  PROCEDURE cmdcut.MouseMove(  nButton, nShift, nXCoord, nYCoord ) 
    This.Parent.ButtonsStatus()
  ENDPROC
  PROCEDURE cmdcopy.MouseMove(  nButton, nShift, nXCoord, nYCoord ) 
    This.Parent.ButtonsStatus()
  ENDPROC
  PROCEDURE cmdpaste.MouseMove(  nButton, nShift, nXCoord, nYCoord ) 
    This.Parent.ButtonsStatus()
  ENDPROC

  PROCEDURE restorewindowposition
    = TYPE( "This.oAppObject" ) = 'O' ;
      AND This.oAppObject.RestoreTBarPos( This )
  ENDPROC
  
  PROCEDURE savewindowposition
      = TYPE( "This.oAppObject" ) = 'O' ;
        AND This.oAppObject.SaveTBarPos( This )
  ENDPROC
  
  PROCEDURE tmrrequest.Timer
    IF DEBUG_VERSION ;
       AND ( WEXIST( "Trace" )  OR WEXIST( 'View' )  OR WEXIST( "Command" ) )
             && on Debug with Trace window 
             
      IF TYPE( "nOldInterval" ) # "N"
           This.AddProperty( "nOldInterval", This.Interval )
      ENDIF
      IF This.Interval = This.nOldInterval 
         IF  1000  <  10  * This.nOldInterval 
            IF This.nOldInterval > 2E4          &&  10  min./ 10  
               This.nOldInterval = 2E4
            ENDIF
            This.Interval =  10  * This.nOldInterval
                                                && increasing interval 
         ELSE
            This.Interval =  1000                 &&  1  second
         ENDIF
      ENDIF   
    ELSE
      IF TYPE( "nOldInterval" ) = "N" AND This.Interval # This.nOldInterval 
         This.Interval = This.nOldInterval      && Restores interval
      ENDIF  
    ENDIF
    This.Parent.ButtonsStatus()                 && buttons status
  ENDPROC
  
ENDDEFINE

DEFINE CLASS cmdGraphics AS commandbutton 
   Caption = "" 
   Width  =  24 
   Height =  24  
ENDDEFINE 


(C) Andrius Krisiunas, akrisiun at takas dot lt
...
Рейтинг: 0 / 0
О Toolbarе
    #32677041
andreyR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ1) Запустить на выполнение пункт стандартного меню можно так:

SYS(1500, '_MED_PASTE', '_MEDIT') && Paste menu item

Список стандартных имен меню можно вытащить через команду

Код: plaintext
1.
2.
3.
4.
5.
SET PRINTER TO FILE test.txt
SET PRINTER ON
?SYS( 2013 )
SET PRINTER OFF
SET PRINTER TO
MODIFY FILE test.txt

Пункты редактирования начинаются с приставки _MED они идут в порядке следования собственно в меню. Пункты вида _MED_SP100 - это линия-разделитель в меню.

прописал эти команды в каждую из кнопок COPY,CUT,PASTE, ничего не работает? хотя из меню стандартные BAR# срабатывает
...
Рейтинг: 0 / 0
О Toolbarе
    #32677196
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ты делаешь ToolBar на базе класса ToolBar или это просто отдельная форма (на базе класса Forms) с кнопочками?

В данном случае это имеет принципиальное значение, поскольку нужные тебе действия жестко связаны с тем объектом в котором находится фокус. Т.е. если это просто кнопки на форме, то нажатие кнопки приводит к перемещению фокуса на нее, а Puste, Copy, Cut в отношении кнопки не имеют смысла.

И еще, SYS(1500) не отслеживает факт активности/неактивности пунктов меню. Т.е. если пункт меню не активен, то SYS(1500) просто проигнорируется. Никаких сообщений об ошибках не будет.
...
Рейтинг: 0 / 0
О Toolbarе
    #32678014
andreyR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМА ты делаешь ToolBar на базе класса ToolBar или это просто отдельная форма (на базе класса Forms) с кнопочками?

В данном случае это имеет принципиальное значение, поскольку нужные тебе действия жестко связаны с тем объектом в котором находится фокус. Т.е. если это просто кнопки на форме, то нажатие кнопки приводит к перемещению фокуса на нее, а Puste, Copy, Cut в отношении кнопки не имеют смысла.

И еще, SYS(1500) не отслеживает факт активности/неактивности пунктов меню. Т.е. если пункт меню не активен, то SYS(1500) просто проигнорируется. Никаких сообщений об ошибках не будет.
Мой Toolbar на базе класа Toolbar, но я делаю oToolb.Show(2).
На счёт активности: на форме выделяю текст, стандартные опции меню copy и т.д. срабатывают, а они же череж SYS(1500) в toolbar не хотят!?
...
Рейтинг: 0 / 0
О Toolbarе
    #32678366
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извини, больше ничего посоветовать не могу. Не работал я с ToolBar. Я бы все-таки посмотрел, где находится фокус при нажатии кнокпи в ToolBar (_SCREEN.ActiveForm.Name)

Попробуй адаптировать код приведенный akrisiun . Насколько я вижу, там просто надо заменить классы на которых строится его класс на базовые
...
Рейтинг: 0 / 0
О Toolbarе
    #32678744
akrisiun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Privet,

tak u menia bazoveje klasi narkrojieny s define'ami

#DEFINE bc_toolBar toolbar
#DEFINE bc_timer timer

eto rabotajushij primier (stavtie i tool.prg ir DO tool.prg)

Sorry za lotanischinu (uz mienia klaviatura bez ruskij bukv)

Andrius
...
Рейтинг: 0 / 0
О Toolbarе
    #32679348
andreyR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код akrisiun тоже не срабатывает. Toolbar запускается, но функции копи,кат и паст не работают (
Странно, одновременно тоже выполняю контекстным меню и обычным меню - всё нормально! Т.е. фокус остаётся там, где нужно.

Попробовал на отдельной форме использовать этот тулбар - работает, а на формах в проекте не хочет. Почему бы это могло быть, не могу понять!?
...
Рейтинг: 0 / 0
О Toolbarе
    #32680399
andreyR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Методом "тыка" обнаружил, что команды типа SYS(1500, '_MED_COPY', '_MEDIT') из Toolbara перестают работать после того, как я вывожу своё меню. Причём именно после команды SET SYSMENU TO
Т.е. если моё меню выводится + к системному, всё работает!
Что это - глюк фокса?
...
Рейтинг: 0 / 0
О Toolbarе
    #32680798
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то именно так и должно быть. Просто некоторое время назад в этой же конфе было сообщение, что SYS(1500) работает и с не активным системным меню.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / О Toolbarе
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]