|
Toolbar и 2Gridа
|
|||
---|---|---|---|
#18+
Ситуация: есть Toolbar, есть форма на которой расположены 2 грида. Необходимо при нажатии кнопки Toolbara в зависимости от того на каком гриде фокус вызвать соответствующую форму. Вопрос: как определить на каком гриде находится фокус? Пробовала через _screen.activeform.activecontrol, выдает ошибку ACTIVECONTROL не является объектом. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2008, 11:20 |
|
Toolbar и 2Gridа
|
|||
---|---|---|---|
#18+
Классический вариант: Создать на форме Property в которое гриды будут в событии When записывать ссылку на себя/свое имя или еще чего, в событии VALID "Выписываться" Затем в Toolbar считывать и делать вызов нужной формы. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2008, 11:47 |
|
Toolbar и 2Gridа
|
|||
---|---|---|---|
#18+
Если ToolBar должен обрабатывать активную в данный момент форму, то логично делегировать эту обработку самой форме. Т.е. вызвать метод формы. А уж форма сама разберется "кто на ком стоял". Если _screen.activeform.activecontrol выдает ошибку, что activecontrol - не объект, то это означает, что либо Вы деактивировали форму (переключились на другую форму), либо не установили фокус ни на один объект активной в данный момент формы. На всякий случай напомню, что "активная" и "видимая" - это две большие разницы. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2008, 12:30 |
|
Toolbar и 2Gridа
|
|||
---|---|---|---|
#18+
При переходе фокуса на грид становится активной рабочая область с данными для грида. Отсюда можно плясать. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2008, 12:38 |
|
Toolbar и 2Gridа
|
|||
---|---|---|---|
#18+
Ну во-первых, спасибо за ответы :). Во-вторых, тогда другой вопрос: при клике на пустом гриде фокус к нему переходит? Проверила какая форма является активной - все в порядке, та что нужна. Добавила метод формы в котором для проверки вывожу алиас таблицы, открытой в данный момент в рабочей области. Результат - таблица, которая источник для 2го грида, этот результат выводится вне зависимости от того, на каком гриде был клик. Попробовала сделать как предложил BRROE, результат тот же, выводится наименование 2го грида в независимости от того, на каком гриде был клик. Оба грида пусты. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2008, 13:10 |
|
Toolbar и 2Gridа
|
|||
---|---|---|---|
#18+
ZitzОба грида пусты. Наверно поэтому вариант BRROE не срабатывает, но копать надо в эту сторону. Запусти в отладчике "Event tracking" попереходи между гридами и посмотри какие методы у грида отрабатывают, выбери что больше подойдет, туда и поставь изменение свойства какой грид активный. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2008, 13:35 |
|
Toolbar и 2Gridа
|
|||
---|---|---|---|
#18+
2 Zitz посмотрите пример, там без тулбара, но также используется предварительное сохр-е ссылок Вам правильно посоветовали авторкоторое гриды будут в событии When записывать ссылку на себя ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2008, 15:13 |
|
Toolbar и 2Gridа
|
|||
---|---|---|---|
#18+
Если гриды пусты, то и желания надавить на кнопку тулбара возникать не должно. Либо же создайте пустой курсор и подменяйте источник грида на него. Тогда можно будет кликнуть на "пустом" гриде. Всякие там прозрачные шапы на гриде это извращения. Вот Вам пример, попроще. *********************************** create cursor test1 (UID I) For lnI = 1 to 10 Insert into test1 (UID) values (lnI) EndFor go 1 in "test1" SElect Uid+10 as UID from test1 into cursor Test2 Public oTollBar oTollBar = CreateObject('MySuperToolBar') oForm1 = CreateObject('TestForm') oForm1.Top = 50 oForm1.Left = 100 oForm2 = CreateObject('TestForm') oForm2.Top = 100 oForm2.Left = 200 oTollBar.show() oForm1.Show() oForm2.Show() Read Event clear memory close all quit *------------------------------------------------------ define class TestForm as Form height = 150 Width = 350 add object grid1 as LinkGrid with top = 5, Left =5,RecordSource = "Test1" add object grid2 as LinkGrid with top = 5, Left =130, RecordSource = "Test2" add object Txt1 as TextBox with top = 110, Left =5 Procedure QueryUnload thisform.Release() EndPRoc EndDefine *------------------------------------------------------ Define Class MySuperToolBar as ToolBar oGrid = .Null. Add object cmdVizov as commandButton with top = 1, Left =1, Width = 100,Caption = "Вызофф..." Procedure oGrid_assign Lparameters vNewVal This.cmdVizov.Enabled = (VarType(m.vNewVal) = 'O') This.oGrid = m.vNewVal EndProc Procedure cmdVizov.Click This.Parent.oGrid.BackColor = rgb(250,200,200) EndProc Procedure destroy clear events EndProc EndDefine *------------------------------------------------------ Define Class LinkGrid as grid Width = 120 Height = 100 Procedure When IF VARTYPE(oTollBar)='O' .And. .Not. Isnull(oTollBar) oTollBar.oGrid = this ENDIF EndProc Procedure Valid IF VARTYPE(oTollBar)='O' .And. .Not. Isnull(oTollBar) oTollBar.oGrid = .Null. This.ResetToDefault('BackColor') ENDIF EndProc EndDefine ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2008, 17:14 |
|
Toolbar и 2Gridа
|
|||
---|---|---|---|
#18+
Пустой курсор создать для этого примера можно так: Select UID from test1 where .F. into cursor Test2 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.10.2008, 17:59 |
|
|
start [/forum/topic.php?fid=41&msg=35570471&tid=1587229]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
34ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 151ms |
0 / 0 |