OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Понедельник, 20 Май, 2019 18:02

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




Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: Чтение из таблиц MS SQL7
СообщениеДобавлено: Вторник, 06 Январь, 2009 17:13 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1537
Откуда: Беларусь, Минск
Почему ошибочный? Вполне нормально. Меня лично на этом пути почти всё устраивает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Чтение из таблиц MS SQL7
СообщениеДобавлено: Вторник, 06 Январь, 2009 17:18 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2573
Откуда: Россия, Ярославль
ну, в качестве решения задачи "изменение размеров формы" размещение контролов в составном документе мне кажется ошибочным/неверным/"не в ту степь". Хотя само по себе размещение бывает полезно, да, не спорю.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Чтение из таблиц MS SQL7
СообщениеДобавлено: Среда, 07 Январь, 2009 18:06 

Зарегистрирован: Четверг, 04 Декабрь, 2008 20:41
Сообщения: 16
Спасибо, с формами многое прояснилось. Еще подскажите, пожалуста. После двойного клика по гриду, надо чтобы открылось новое окно с полями для редактирования полей таблицы (как вводить данные в таблицу из полей разобрался) Как правильно отловить двойной клик на строке грида? Почитав Help пришел к такой процедуре - notifier для грида; в свойствах грида стоит выбор - только строка целиком, редактирование отключено:

PROCEDURE GridNotify* (op, from, to: INTEGER);
VAR PrKey: Dialog.String;
BEGIN

IF op=StdTables.select THEN
FFrom:=from;
TTo:=to;
CellSel:=1; (*Признак того, что хотя бы один раз выбиралась ячейка*)
Strings.IntToString(FFrom,RecW.Field0);
Strings.IntToString(TTo,RecW.Field1); (*Выводим координаты выбранной ячейки*)
Gridtable.GetItem(FFrom, 0,PrKey); (*Получаем из таблицы например первичный ключ*)
RecW.Field2:=PrKey$;
Dialog.Update(RecW);
END;

IF (op = Dialog.pressed) & (from = 1) & (CellSel=1) THEN
(*Ловим двойной клик*)
StdCmds.OpenAuxDialog('Aleks\Rsrc\SqlAdd.odc', 'Ввод данных');
END;

END GridNotify;

На всякий случай ввел несколько глобальных переменных (CellSel, FFrom, TTo: INTEGER) для хранения значений - ведь при простом двойном клике по гриду процедура автоматически вызывается несколько раз...
Получилось вполне работоспособно, но как-то не правильно. Во-первых, как отсеять например двойной клик не в строке, а по заголовку столбца (если кликнули по столбцу, не стоит ведь вызывать диалог изменения даных; Кстати, тут еще момент. Предположим, что строка была выбрана. Когда мы по ней опять щелкаем два раза, чтоб например отредактировать, событие StdTables.select не возникает, а возникает только Dialog.pressed, точно такое же, как и при клике на столбце ... Т.е. можно видимо только отличить, было оно двойное или нет, а не то, щелкали по строке или вне ее ) И как сделать, чтоб процедура срабатывала только по левой кнопке мыши, а не по любой, как сейчас?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Чтение из таблиц MS SQL7
СообщениеДобавлено: Среда, 07 Январь, 2009 19:53 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2573
Откуда: Россия, Ярославль
В самом общем случае двойной клик отлавливается вот так:
Код:
PROCEDURE TableNotifier* (op, from, to: INTEGER);
   BEGIN
      IF op = Dialog.changed THEN (* клик *)
      ELSIF (op = Dialog.pressed) & (from = Dialog.pressed) THEN (* двойной клик *)
      END
   END TableNotifier;

То, что табличный контрол возвращает вам "двойной клик" после клика по заголовку и при клике любой кнопкой это, как мне кажется, недоработка таблицы. Решение для первой проблемы: отключить возможность кликать по заголовку. Для второй: можно использовать обёртку над табличным контролом, проще ничего не приходит в голову.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Чтение из таблиц MS SQL7
СообщениеДобавлено: Пятница, 23 Январь, 2009 14:05 

Зарегистрирован: Четверг, 04 Декабрь, 2008 20:41
Сообщения: 16
Приветствую!
Подскажите, пожалуста. Туплю. Решение с отловом двойного клика (по таблице например) подсмотрел в документации - IF (op = Dialog.pressed) & (from = 1) THEN ....
или например как любезно советовали: (op = Dialog.pressed) & (from = Dialog.pressed)

(кажется это одно и тоже, т.к. pressed в модуле dialog является константой, и равно 1)
Но не могу понять - почему именно при двойном клике from равно 1? Где это следует из документации?
(Я так понимаю, что после первого клика from содержит 0, а после второго - 1)
В описании модуля Dialog я нашел только, там где обсуждается процедура уведомления, что from-to означает некий диапазон. Что за диапазон кстати? Выделенных ячеек например?
И когда используется такая сигнатура этой процедуры: PROCEDURE (n, op, from, to: INTEGER)
С параметром n ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Чтение из таблиц MS SQL7
СообщениеДобавлено: Пятница, 23 Январь, 2009 15:45 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2573
Откуда: Россия, Ярославль
Алексей_В писал(а):
Но не могу понять - почему именно при двойном клике from равно 1? Где это следует из документации?
По-моему это имеет примерно следующий смысл: "из нажатого в нажатое", то есть не два отдельных клика, а один за другим. Не уверен, что где нибудь есть описание сего факта, может быть в Controllers.
Алексей_В писал(а):
from-to означает некий диапазон. Что за диапазон кстати? Выделенных ячеек например?
Это зависит от реализации контрола. Не уверен, что имелись ввиду именно ячейки таблицы StdTables. Вполне возможно, что речь идёт о Selection Box.
Алексей_В писал(а):
И когда используется такая сигнатура этой процедуры: PROCEDURE (n, op, from, to: INTEGER)С параметром n ?
По-моему, она используется в диалоге настройки свойств таблицы, и только там.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Чтение из таблиц MS SQL7
СообщениеДобавлено: Суббота, 24 Январь, 2009 22:24 

Зарегистрирован: Среда, 14 Ноябрь, 2007 19:03
Сообщения: 1314
Как вариант,можно строчить ADO в VB стиле ,так как обертки для ADO в обероне нет.
Я давал где-то кусок кода с коннектом и выборкой данных. :D


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

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


Кто сейчас на конференции

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


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

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2019, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB