Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / GraphTitle / 13 сообщений из 13, страница 1 из 1
29.03.2004, 13:18
    #32460557
Alex Sheff
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GraphTitle
Создал базу данных с полем General
в зависимости от условий заполняю ее даннымы и вывожу это все в виде графика. Но вот проблемка необновляется Title графика.
хотя прописал:
THISFORM.OleBoundControl1.HasTitle = .T.
THISFORM.OleBoundControl1.ChartTitle.Caption = "график..."
...
Рейтинг: 0 / 0
30.03.2004, 08:59
    #32461679
GraphTitle
Попробуйте так:
Код: plaintext
1.
IF THISFORM.OleBoundControl1.Object.HasTitle = .T.
THISFORM.OleBoundControl1.Object.ChartTitle.Caption =  "Заголовок" 

Иногда явное использование Object помогает...
...
Рейтинг: 0 / 0
30.03.2004, 09:00
    #32461680
GraphTitle
Простите, IF забыл убрать.
...
Рейтинг: 0 / 0
30.03.2004, 09:47
    #32461722
Alex Sheff
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GraphTitle
вот еще дополнение к вопросу:
Я обновляю график путем выборки нужных строк из файла,

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

может здесь можно вставить название графика?
...
Рейтинг: 0 / 0
30.03.2004, 10:16
    #32461766
GraphTitle
Думаю, что нет. По крайней мере в литературе нигде про это не написано.
Хочу так же обратить Ваше внимание на следующее:
1. Использование ссылки Object явно указывает VFP на то, что свойство или метод принадлежит объекту, загруженному в OleBoundControl, а не самому контейнеру.
2. Многократное использование APPEND GENEGAL для одного и того же поля приводит к увеличению размера этого поля, так как предыдущее значение не удаляется. Поэтому по возможности используйте PACK, иначе таблица (fpt) будет бесконечно расти в размерах.
...
Рейтинг: 0 / 0
30.03.2004, 10:23
    #32461773
Alex Sheff
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GraphTitle
За Pack - спасибо, незнал.
Может подскажете где можно почитать (в нете) о графиках в VFP
а то у с литературой что-то нескладывается
...
Рейтинг: 0 / 0
30.03.2004, 10:50
    #32461837
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GraphTitle
Многократное использование APPEND GENEGAL для одного и того же поля приводит к увеличению размера этого поля, так как предыдущее значение не удаляется.

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


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

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

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

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
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)

Но, видимо, это ты и так знаешь.
...
Рейтинг: 0 / 0
30.03.2004, 14:00
    #32462214
GraphTitle
Посмотрите здесь:
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, т.е. программно.
...
Рейтинг: 0 / 0
31.03.2004, 01:02
    #32462996
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GraphTitle
ВладимирМSET MEMOWIDTH - на самом деле это SET BLOCKSIZE - и его можно сделать 0 - это значит что мемо будет наращиваться по 1 байту... Да и вообще работа с блочной структурой memo несколько более сложна чем ты описал - это всё-же не просто "трата места", а ближе по сути к "выравниванию по границе слова" - как было когда-то в C... Т.е. новые блоки выделяются такими большими порциями... А вот с REPLACE ситуайия насколько я помню несколько более сложная...
Кстати я вот рисую диаграммы используя Excel.Chart (хотя это не столь важно), и вовсе не используя General поля - т.е. вместо OleBound юзаю OleControl -проблем нету, да и лучше не использовать промежуточных компонентов если это не необходимо :)
WBR, Igor
...
Рейтинг: 0 / 0
31.03.2004, 09:03
    #32463166
GraphTitle
to Igor Korolyov:

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

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

Преимущество использования полей типа GENERAL заключается в простоте программирования. Например, на форме можно разместить Grid и OleBoundControl; при перемещении по строкам в Gride достаточно делать Refresh для OleBoundControl. Причём в полях типа General могут размещаться любые объекты, реализующую парадигму "Документ-представление" и являющиеся COM-серверами, в частности, и Excel.Chart.
...
Рейтинг: 0 / 0
01.04.2004, 01:52
    #32464794
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GraphTitle
Промежуточное тут не Excel/MSGraph а General. Ибо работать можно без него (и IMHO проще даже будет чем с ним!). И с динамикой никаких проблем - скока хошь меняй данные в таблице и тут-же перестраивай диаграмму... MSGraph как-то нехорошо себя ведёт в плане наличия/отсуствия в составе фокса - AFAIK начиная с 7-ки его уже нету, в винде ессно тоже нету, с офисом он тоже не всяким ставится... Т.е. можно поймать проблему типа "Где-ж возьмёшь". Тогда как с Excel всё очень тривиально :) Есть конечно и другие компоненты для рисования графиков - но в основном они поплоше и всё-равно за деньги :(
WBR, Igor
...
Рейтинг: 0 / 0
14.05.2004, 13:54
    #32518121
IgorProgrammer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GraphTitle
Вячеслав Клепинин:
Тонкую настройку графика (вид графика, типы и цвета линий, фонты и т.д)

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

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

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

Очень помогает если надо каждый раз перестраивать график...
...
Рейтинг: 0 / 0
14.05.2004, 13:58
    #32518140
GraphTitle
to IgorProgrammer

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

Да ради бога! Кто же возражает.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / GraphTitle / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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