BEST logo логотип компании БЭСТ - программы для бизнеса ПРОДАЖИ
+7 (991) 312-04-37
trade@bestnet.ru
ПОДДЕРЖКА
+7 (495) 775-66-76
consult@bestnet.ru
СКАЧАТЬ
Обновления
Дистрибутивы
Авторизация

Логин:
Пароль:
Забыли свой пароль?
Регистрация
ВАШ ВОПРОС

Доступ к Личному кабинету закрыт!
Как получить доступ?


Главная  / Поддержка  / Форум  / Публичные форумы  / Программирование приложений  / УРОК 4 Создание интерфейса таблицы

Форум

Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1 2 След.
RSS
УРОК 4 Создание интерфейса таблицы, БЭСТ-5.Работа в графике
 
Коллеги начинаем новый раздел в программировании.
Раздел для меня новый и очень объемный.
Просьба соблюдать производственную дисциплину :lol:
А именно:
- обсуждаем только поднятые аспекты темы. Другие варианты и пути решения будем рассматривать последовательно и не спеша. Просьба вперед разговора не забегать
- если я не уверен в наличии другого варианта решения, но он может
иметь место, то этот фрагмент буду помечать знаком :?: Тогда высказывать и делится своими знаниями по этому поводу приветствуется
- ограничения/неудобства обнаруженные буду помечать :!: и также
приветствуются коментарии и поправки
- каждый урок по графике будет состоять из не менее 2 сообщений.
Первое сообщение может неоднократно мной дополняться и развиваться.
По мере того, как на мой взгляд тема урока будет раскрыта полностью
я буду размещать сообщение о том, что изложение материала закончил и
только тогда начинаем переходить к обсуждению. Просьба дожидаться окончательного размещения материала.
 
Задача 1.
Создаем сетку таблицы средствами дизайнера.

Общее описание задачи.
1.Учимся создавать форму
2.Учимся средствами дизайнера назначать колонки
3.Учимся получать программу вывода графической формы на экран

Дополнительно:
к этой задаче будет создан урок 3. Цель которого как создавать
свои таблицы,индексы, пункты меню и где это размещать в БЭСТе
 
A.Создаем форму
1).Запускаем client\bin\bestide.exe
2)Файл-создать новый - проект
:!: 3) Пытаюсь переименовать.
- выделяем project.bpr
- файл-сохранить как - doverenost
- выделяем doverenost.bpr
- проект-свойства проекта в строке папка и имя конечного файла
ставим doverenost.bdll
4)Файл- создать новый - форма
:?: 5) Пытаюсь изменить размеры формы
- включаем вид-инспектор свойств (должна стоять галочка)
- активируем мышкой саму форму
- в инспекторе\свойства\ClientHeight ставим допустим 500
- в инспекторе\свойства\ClientWidth ставлю допустим 700
5)Включаю вид\палитра компонентов (проверяю наличие галочки)
6)В палитре выбираю значок xbGrid и переношу объект на форму
7)Раздвигаю объект на форме до предполагаемых размеров
Как это будет в итоге на экране пока не знаю !!!
 
Б Создадим колонки средствами дизайнера

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

1).По пункту 1 УРОКа 3 создадим таблицу
2).На созданном в графической форме объекте xbGrid из пункта А
данного урока обратимся к инспектору объекта
3)Найдем строчку columns и нажимаем на три точки
4)На экране видим надпись TDBgridColumnEh
5)В инспекторе находим строку FieldName
6)На основании описания размещенного здесь
заносим в поле FieldName 'NUMDOC' в поле title-caption "No Доверенности"
7)Жмем плюс
:!: Не знаю как у кого - у меня вылетает сообщение об ошибке и вынужден повторить 5) и 6)
8) Жму плюс и появляется вторая строка и по старому принципу заполняю 'Date_in' и 'Дата выдачи'
9)Дальше без проблем заполняем нужные столбцы и выходим в экран формы.
10) Раздвигаем столбцы и помним что пока не знаем как это на экране будет
 
В Создаем плагин отображающий форму

Итак мы находимся на графической форме.
1)Жмем F12
2)В текст программы кладем код
Код
 #include "hbclass.ch"
 #include "BO_Const.ch"
CLASS frmDover FROM frmDoverBASE
  METHOD Form_Create
  METHOD Form_Close
EndClass

METHOD Form_Create() CLASS  frmDover
Return .T.

METHOD Form_Close() CLASS frmDover
RETURN .T.

3)Переименовываем имя prg в ветке в левой части экрана на frmDover.prg
4)В разделе программы у нас тоже есть prg файл. Например unit.prg
Кладем в него код
Код
FUNCTION RunFormTest()
RETURN RunForm('doverenost\frmDover',.T.,{},nil)

5)Проект-компиляция активного проекта или просто F7
6) :!: В результате у нас рядом с frmdover.prg если просмотреть список файлов появится frmDoverBase.prg. У меня был случай что он не создавался и я создавал его вручную, но теперь нормально создается
и на ошибку больше не могу выйти. Возможно это была моя ошибка а не
программы.
7)В УРОКЕ 3 смотрим создание своего пункта меню в БЭСТ-5
8)Заходим в БЭСТ и смотрим на полученное творение по Задаче 1
 
Изложение материала по задаче 1 закончил.
Обсуждаем в рамках описанного Вопроса.
 
Цитата
nordk пишет:
5)Проект-компиляция активного проекта или просто F7


Выдается ошибка:
Цитата

Error F0001 Can't open #include file: 'hbclass.ch'; No such file or directory C:/PROGRAM FILES/BEST/BEST5_34/CLIENT/BIN/PROJECTS/PROJECT1/frmDover.prg[1]


Файл "C:\Program Files\BEST\BEST5_34\Include\hbclass.ch" на диске есть. Файл C:/PROGRAM FILES/BEST/BEST5_34/CLIENT/BIN/PROJECTS/PROJECT1/frmDover.prg на диске есть и его содержимое:
Код
#include "hbclass.ch"
#include "BO_Const.ch"

CLASS frmDover FROM frmDoverBASE
  METHOD Form_Create
  METHOD Form_Close
EndClass

METHOD Form_Create() CLASS  frmDover
Return .T.

METHOD Form_Close() CLASS frmDover
RETURN .T.
 
Цитата
nordk пишет:
В результате у нас рядом с frmdover.prg если просмотреть список файлов появится frmDoverBase.prg. У меня был случай что он не создавался и я создавал его вручную, но теперь нормально создаетсяи на ошибку больше не могу выйти.


Файл frmDoverBase.prg появился с первого раза, вот его содержимое:
Код
#include "hbclass.ch"

memvar B6_EXE_PATH

class frmDoverbase from crmchild
  data bGrid1 init nil

  method init
  method Destroy

endclass

method init(oParent, lModal, lVisible, aParams, sAltDFM) class frmDoverbase
local sDFM

  if sAltDFM == nil
    sDFM := GetResource(AppPath() + "doverenost.rc", "frmDover.prg")
  else
    sDFM := sAltDFM
  endif
  ::crmchild():init(oParent, lModal, lVisible, aParams)
  ::mSelf := Self
  ::FormPtr := LOADDFMFILE(sDFM/*::PrgFullPath*/, @Self)

  ::Caption     := "xbFrm"

  ::bGrid1 := CGrid():new(0, 0, 0, 0)

  ::bGrid1:ControlPtr := LINKCONTROL("bGrid1", ::FormPtr, @::bGrid1)
  ::bGrid1:Name := 'bGrid1'

  ::AddControl(::bGrid1)


return self

method Destroy class frmDoverbase

  if ::bGrid1 <> NIL
    ::bGrid1:Destroy()
    ::bGrid1 := NIL
  endif

  ::crmchild:Destroy()
return NIL


P.S. Может это как-то поможет выйти на ошибку из предыдущего моего сообщения
 
Денис в свойствах проекта пропишите путь к папке Include
 
Цитата
nordk пишет:
6)На основании описания размещенного здесь
заносим в поле FieldName 'NUMDOC' в поле title-caption "No Доверенности"

После ввода FieldName NUMDOC в поле title-caption появляеться NUMDOC и неполучаеться ее ни на что исправить (вписываешь любое значение, а при переходе в другое поле сразу же возвращаеться NUMDOC).

Добавлено: После нажатия + , пришлось заново вводить NuMDOC и после этого дал завести "№ доверенности"
 
При входе в Торговля\Доверенности\Пример работы с доверенностями выходит ошибка
Код
DELPHI: BADI.DLL: 06.03.2008 15:55:50
(286); ERRORHANDLER
(26); (b)GCMAINFUNCTION
(0); DOVERENOSTFRMDOVER
(44); RUNFORM2
(143); RUNFORM
C:/PROGRAM FILES/BEST/BEST5_34/CLIENT/BIN/PROJECTS/PROJECT1/unit.prg:RUNFORMTEST(2); RUNFORMTEST
(0); 
SunSystem :BASE Code :      1001 Неизвестная функция 
Operation : DOVERENOSTFRMDOVER

и при компиляции выводит следующее сообщение
Код
W0000 : Не указаны библиотеки, с которыми нужно линковаться!
Error: Нет реализации функции RUNFORM
Error: Нет реализации функции HBCLASS
Error: Нет реализации функции GETRESOURCE
Error: Нет реализации функции CRMCHILD
Error: Нет реализации функции CGRID
 
На то, что при компиляции выводит Внимание не обращаем у меня выводит тоже самое.
Насчет ошибки посмотрите может ошиблись в имени функции и именно под таким именем она не объявлена ?
 
и у меня такие же сообщения при компиляции ...
 
Цитата
nordk пишет:
Насчет ошибки посмотрите может ошиблись в имени функции и именно под таким именем она не объявлена ?

Если не труно - поточнее, где прверить (пальцем ткните)..

З.Ы. Спасибо что вообще занялись таким полезным делом.
 
Да у вас всего 3 крошечных prg.
Меня смущает слово DOVERENOSTFRMDOVER в Вашем сообщении об ошибке
 
И у меня при входе в Торговля\Доверенности\Пример работы с доверенностями сообщение об ошибке точно такое же, как у Андрея
 
Цитата
nordk пишет:
Меня смущает слово DOVERENOSTFRMDOVER в Вашем сообщении об ошибке


В пункте В написано:
Цитата

4)В разделе программы у нас тоже есть prg файл. Например unit.prg
Кладем в него код Код
FUNCTION RunFormTest()
RETURN RunForm('doverenostfrmDover',.T.,{},nil)
 
Изменил:
Код
FUNCTION RunFormTest() 
RETURN RunForm('doverenostfrmDover',.T.,{},nil)

на
Код
FUNCTION RunFormTest() 
RETURN RunForm('frmDover',.T.,{},nil)

После этого запустилось :-)
 
ОПЯТЬ СЛЕШЬ УТЕРЯН !!!!

RETURN RunForm('doverenost\frmDover',.T.,{},nil)
 
у нас функция формы то в исходнике FRMDOVER
а doverenost имя BDLL
 
Вот теперь все красиво.
Только нужно поменять еще название самой формы реестра - параметр Caption в свойствах формы. Ну и выставить нужные размеры.
 
Ну вобщем-то цель задачи 1 была получить промежуточную ступень,
результаты которой Вы смогли бы увидеть.
Т.е. мы имеем заготовку, в которой все дружно убедились что у всех она одинаковая и можем продолжать.
Есть одно НО:
на следующей неделе у меня небольшой отпуск и меня не будет.
Если успею к 11 еще небольшую задачу следующую положу.

to Itman
Евгений: просьба. Занести 5-6 записей в нашу тестовую таблицу и разместите ссылку для ее скачивания с Вашего сайта плз.
Хочется работать в тестовом примере с одинаковыми данными у всех
 
Цитата
nordk пишет:
Занести 5-6 записей в нашу тестовую таблицу и разместите ссылку для ее скачивания с Вашего сайта плз. Хочется работать в тестовом примере с одинаковыми данными у всех


И на demo.bestnet.ru пример продублировать :-)
 
Добрый день.
Пользуясь возможностями данного форума во вложении разместил файл dover.dbf.
Пока не ушли далеко - позволил себе вольность, поле ID_DOV сделал на 22 символа и заполнил его стандартными для БЭСТ-5 уидами.
Если Идея другая, прошу Константина поправить, как будем вести поле id_dov.
Код
dbpush()
If NetUse("u_dover",LoadPath()+"user\dover.dbf")
endif
go top
do while !eof()
RLock()
u_dover->id_dov:=XGUID() 
DbUnlock()
dbskip()
enddo
u_dover->(DbCloseArea())
dbpop()

Оставил открытым Вопрос по индексам.
Пока код и форма простые, и поэтому решил не выкладывать целиком проект для синхронизации.
В дальнейшем, при увеличении кода будем держать рабочий проект в общедоступном месте для сверки.
Но помним, наша цель не скопировать готовый код, а научиться его составлять :best:
С уважением,
Ильин Евгений
 
Евгений спасибо за таблицу.
До ее заполнения еще дойдем.
Думаю будет правильным если продолжение данного урока начну в новой теме. Обращаю Внимание что меня не будет неделю.
Поэтому сделаем небольшую задачу 2 к БД Евгения.
Страницы: 1 2 След.
Читают тему (гостей: 1)