Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 GraphTitle  [new]
Alex Sheff
Member

Откуда: Луцк, Украина
Сообщений: 161
Создал базу данных с полем General
в зависимости от условий заполняю ее даннымы и вывожу это все в виде графика. Но вот проблемка необновляется Title графика.
хотя прописал:
THISFORM.OleBoundControl1.HasTitle = .T.
THISFORM.OleBoundControl1.ChartTitle.Caption = "график..."
29 мар 04, 13:18    [601766]     Ответить | Цитировать Сообщить модератору
 Re: GraphTitle  [new]
Вячеслав Клепинин
Member

Откуда: Санкт-Петербург
Сообщений: 336
Попробуйте так:
IF THISFORM.OleBoundControl1.Object.HasTitle = .T.

THISFORM.OleBoundControl1.Object.ChartTitle.Caption = "Заголовок"

Иногда явное использование Object помогает...
30 мар 04, 08:59    [603130]     Ответить | Цитировать Сообщить модератору
 Re: GraphTitle  [new]
Вячеслав Клепинин
Member

Откуда: Санкт-Петербург
Сообщений: 336
Простите, IF забыл убрать.
30 мар 04, 09:00    [603131]     Ответить | Цитировать Сообщить модератору
 Re: GraphTitle  [new]
Alex Sheff
Member

Откуда: Луцк, Украина
Сообщений: 161
вот еще дополнение к вопросу:
Я обновляю график путем выборки нужных строк из файла,

SELECT bsp
SCAN
lcData = lcData + TAB + bsp.short
SELECT training
SUM training.participants FOR bsp.pin = training.pin TO lcSum
lcTot = lcTot + TAB + STR(lcSum,10,2)
ENDSCAN

SELECT chart
APPEND GENERAL olegraph DATA lcData + CRLF + lcTot + CRLF
ThisForm.Refresh

может здесь можно вставить название графика?
30 мар 04, 09:47    [603185]     Ответить | Цитировать Сообщить модератору
 Re: GraphTitle  [new]
Вячеслав Клепинин
Member

Откуда: Санкт-Петербург
Сообщений: 336
Думаю, что нет. По крайней мере в литературе нигде про это не написано.
Хочу так же обратить Ваше внимание на следующее:
1. Использование ссылки Object явно указывает VFP на то, что свойство или метод принадлежит объекту, загруженному в OleBoundControl, а не самому контейнеру.
2. Многократное использование APPEND GENEGAL для одного и того же поля приводит к увеличению размера этого поля, так как предыдущее значение не удаляется. Поэтому по возможности используйте PACK, иначе таблица (fpt) будет бесконечно расти в размерах.
30 мар 04, 10:16    [603245]     Ответить | Цитировать Сообщить модератору
 Re: GraphTitle  [new]
Alex Sheff
Member

Откуда: Луцк, Украина
Сообщений: 161
За Pack - спасибо, незнал.
Может подскажете где можно почитать (в нете) о графиках в VFP
а то у с литературой что-то нескладывается
30 мар 04, 10:23    [603262]     Ответить | Цитировать Сообщить модератору
 Re: GraphTitle  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Многократное использование APPEND GENEGAL для одного и того же поля приводит к увеличению размера этого поля, так как предыдущее значение не удаляется.


Причина увеличения размера файла FPT не в том, что сохраняется старое значение, а в особенностях работы FoxPro с Memo-полями (поле General - это особый вид Memo-поля)


Советы начинающим
Типы данных
=========================================================
Memo

Данный тип предназначен для хранения символьных данных неопределенной длины. Точнее для символьных данных, для которых точно известно, что они могут содержать более 254 символов. А вот верхний предел ограничен числом 2ГБ (2 миллиарда символов - девять нулей) на размер файла с расширением FPT. В этом файле собственно и хранится содержимое полей типа Memo и General.

Особенность работы с мемо-полями заключается в том, что при любой модификации мемо-поля файл FPT увеличивается на некоторое количество байт кратное определенному значению. Это значение определяется настройкой SET MEMOWIDTH. По умолчанию, оно равно 64 байта. Т.е. даже если Вы просто стерли и тут же вставили один символ, то размер файла FPT тем не менее увеличится на 64 байта, а не останется неизменным как ожидалось. Проверьте:

CREATE TABLE test FREE (test M)

=ADIR(aTest,"test.fpt")
?aTest[1,2]
INSERT INTO test VALUES (space(1))
=ADIR(aTest,"test.fpt")
?aTest[1,2]
USE
DELETE FILE test.*

Как видите, я добавил в мемо-поле только один пробел, но размер файла FPT увеличился на 64 байта, а не на 1 как ожидалось.

А что же содержится в остальных 63 записанных байтах? А ничего! Это пустое место, которое уже никак, никоим образом не может быть использовано.

Таким образом, при интенсивной работе с мемо-полями в них скапливается достаточно большое количество пустого места. Для удаления этого пустого пространства необходимо периодически давать команду PACK. Или, если не хочется удалять записи помеченные как удаленные, PACK MEMO.

Проблема в том, что для выполнения команды PACK необходимо открыть таблицу в режиме EXCLUSIVE, что при работе в многопользовательском приложении - проблематично. Разумно вынести эту команду в специальную процедуру по регулярной очистке база данных, которую периодически запускает администратор или сам пользователь. Более подробно об этой стратегии описано в разделе "Удаление записей в таблице"
==================================================

По поводу General ничего добавить не могу. Не работал. могу только сослаться на пример его использования в FoxPro.

Пример его использования можете посмотреть в стандартном проекте примеров Solution.pjx, который поставляется вместе с FoxPro (формы OleGraph.scx и Sctock.scx)

Но, видимо, это ты и так знаешь.
30 мар 04, 10:50    [603350]     Ответить | Цитировать Сообщить модератору
 Re: GraphTitle  [new]
Вячеслав Клепинин
Member

Откуда: Санкт-Петербург
Сообщений: 336
Посмотрите здесь:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbagr10/html/grmscprogrammaticidentifiers.asp

И ещё немного из личного опыта.
Тонкую настройку графика (вид графика, типы и цвета линий, фонты и т.д) можно выполнить следующим образом:
1. Запустите приложение, вызовите форму с OleBoundControl MS Graph и дважды щёлкните мышью по графику. Загрузится MS Graph со своим меню, при помощи которого можно выполнить настройку
= или =
2. Откройте таблицу и дважды щёлкните по полю Gen (д.б. с большой буквы, что означает наличие объекта в этом поле). В появившемся окне с графиком снова дважды щёлкните мышью. Загрузится MS Graph.

Все сделанные настройки сохраняются.

И последнее. Есть такое свойство - называется AutoActivate. Значение этого свойства определяет способ запуска приложения, документ которого находится в OleBoundControl. По умолчанию оно равно 2 - т.е. запуск по DblClick. Именно это умолчание позволяет выполнить пункт 1 (см.выше).
Если Вы не хотите, чтобы юзверы запускали MS Graph, меняли настройки, а потом доставали Вас - измените значение этого свойства на 0. При таком значении AutoActivate запустить COM-приложение можно только используя метод DoVerb, т.е. программно.
30 мар 04, 14:00    [603804]     Ответить | Цитировать Сообщить модератору
 Re: GraphTitle  [new]
Igor Korolyov
Member

Откуда: Гомель, Беларусь
Сообщений: 2512
ВладимирМ
SET MEMOWIDTH
- на самом деле это SET BLOCKSIZE - и его можно сделать 0 - это значит что мемо будет наращиваться по 1 байту... Да и вообще работа с блочной структурой memo несколько более сложна чем ты описал - это всё-же не просто "трата места", а ближе по сути к "выравниванию по границе слова" - как было когда-то в C... Т.е. новые блоки выделяются такими большими порциями... А вот с REPLACE ситуайия насколько я помню несколько более сложная...
Кстати я вот рисую диаграммы используя Excel.Chart (хотя это не столь важно), и вовсе не используя General поля - т.е. вместо OleBound юзаю OleControl -проблем нету, да и лучше не использовать промежуточных компонентов если это не необходимо :)
WBR, Igor
31 мар 04, 01:02    [604797]     Ответить | Цитировать Сообщить модератору
 Re: GraphTitle  [new]
Вячеслав Клепинин
Member

Откуда: Санкт-Петербург
Сообщений: 336
to Igor Korolyov:

>да и лучше не использовать промежуточных компонентов

Странная логика. А что, Excel.Chart не есть промежуточный компонент? Теперь это родная фоксовская примочка?
Кстати, с таким же успехом в OleControl можно вставить и MSGraph.Chart.

Преимущество использования полей типа GENERAL заключается в простоте программирования. Например, на форме можно разместить Grid и OleBoundControl; при перемещении по строкам в Gride достаточно делать Refresh для OleBoundControl. Причём в полях типа General могут размещаться любые объекты, реализующую парадигму "Документ-представление" и являющиеся COM-серверами, в частности, и Excel.Chart.
31 мар 04, 09:03    [604999]     Ответить | Цитировать Сообщить модератору
 Re: GraphTitle  [new]
Igor Korolyov
Member

Откуда: Гомель, Беларусь
Сообщений: 2512
Промежуточное тут не Excel/MSGraph а General. Ибо работать можно без него (и IMHO проще даже будет чем с ним!). И с динамикой никаких проблем - скока хошь меняй данные в таблице и тут-же перестраивай диаграмму... MSGraph как-то нехорошо себя ведёт в плане наличия/отсуствия в составе фокса - AFAIK начиная с 7-ки его уже нету, в винде ессно тоже нету, с офисом он тоже не всяким ставится... Т.е. можно поймать проблему типа "Где-ж возьмёшь". Тогда как с Excel всё очень тривиально :) Есть конечно и другие компоненты для рисования графиков - но в основном они поплоше и всё-равно за деньги :(
WBR, Igor
1 апр 04, 01:52    [606990]     Ответить | Цитировать Сообщить модератору
 Re: GraphTitle  [new]
IgorProgrammer
Member

Откуда:
Сообщений: 687
Вячеслав Клепинин:
Тонкую настройку графика (вид графика, типы и цвета линий, фонты и т.д)

Можно и программно...
В екселе начинаешь запись макроса...
Создаешь нужный график...
И крути-верти...
В конце смотришь на команды и переносишь в лису...

Например изменение фонта в легенде...
graf_ch.OleBoundControl1.Legend.Font.Size
graf_ch.OleBoundControl1.Legend.Font.Bold
и т.д.

Работоспособность всего не проверял...
У меня лис8 офис2000

Очень помогает если надо каждый раз перестраивать график...
14 май 04, 13:54    [678899]     Ответить | Цитировать Сообщить модератору
 Re: GraphTitle  [new]
Вячеслав Клепинин
Member

Откуда: Санкт-Петербург
Сообщений: 336
to IgorProgrammer

Можно и программно...

Да ради бога! Кто же возражает.
14 май 04, 13:58    [678925]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить