Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Добраться до свойства объекта  [new]
Кузнецов Игорь
Member

Откуда: Иваново
Сообщений: 143
Добрый день.
На форме лежит ActiveX Microsoft StatusBar. На панелях этого StatusBar'a с помощью дизайнера можно поместить картинку. А вот как это сделать программно? Я смог лишь добраться до объекта Picture.
THISFORM.OleControl1.Panels.Item(2).Picture.???="MyPicture.gif"
А вот дальше никак. Даже в хелпе не нашел.
3 авг 06, 16:16    [2961361]     Ответить | Цитировать Сообщить модератору
 Re: Добраться до свойства объекта  [new]
alex11100
Guest
положите рядом активикс imagelist
в имаджлист всуньте свой гиф и присвойте кей
а затем уже статусбару кей показывайте
3 авг 06, 16:51    [2961605]     Ответить | Цитировать Сообщить модератору
 Re: Добраться до свойства объекта  [new]
Aleksey-K
Member

Откуда: Москва
Сообщений: 3116
Если у вас нет на форме ActiveX ImageList, то можно так:

THISFORM.OleControl1.Panels.Item(2).Picture=LOADPICTURE("MyPicture.gif")

С уважением, Алексей
3 авг 06, 16:53    [2961618]     Ответить | Цитировать Сообщить модератору
 Re: Добраться до свойства объекта  [new]
-=AlexiS=-
Member

Откуда: Одесса
Сообщений: 712
Thisform.stbar1.Panels(1).picture=LOADPICTURE('img\add.bmp')
3 авг 06, 16:54    [2961623]     Ответить | Цитировать Сообщить модератору
 Re: Добраться до свойства объекта  [new]
Aleksey-K
Member

Откуда: Москва
Сообщений: 3116
Или проще так:
THISFORM.OleControl1.Panels(2).Picture=LOADPICTURE("MyPicture.gif")

С уважением, Алексей
3 авг 06, 16:55    [2961625]     Ответить | Цитировать Сообщить модератору
 Re: Добраться до свойства объекта  [new]
Кузнецов Игорь
Member

Откуда: Иваново
Сообщений: 143
Aleksey-K
Или проще так:
THISFORM.OleControl1.Panels(2).Picture=LOADPICTURE("MyPicture.gif")

С уважением, Алексей

Хм, а он мне в ответ

К сообщению приложен файл. Размер - 0Kb
10 авг 06, 15:44    [2988460]     Ответить | Цитировать Сообщить модератору
 Re: Добраться до свойства объекта  [new]
Aleksey-K
Member

Откуда: Москва
Сообщений: 3116
1. Какая версия VFP?
2. А есть ли у вас вторая панель в ActiveX?
С уважением, Алексей
10 авг 06, 16:45    [2988913]     Ответить | Цитировать Сообщить модератору
 Re: Добраться до свойства объекта  [new]
Aleksey-K
Member

Откуда: Москва
Сообщений: 3116
Вот мой рабочий код для VFP 9.0 + SP1:

	WITH THISFORM.StatusBar
		.Panels(2).Text = ALLTRIM(ListQuery.User_Name)
		.Panels(4).Text = TTOC(ListQuery.VOC)
		.Panels(6).Text = TTOC(ListQuery.VOP)
		IF EOF("ListQuery")
			.Panels(7).Picture = .NULL.
		ELSE
			.Panels(7).Picture = LOADPICTURE(IIF(ListQuery.IsLock = 0, ;
				"bitmaps\unlock.bmp", "bitmaps\lock.bmp"))
		ENDIF
	ENDWITH
С уважением, Алексей
10 авг 06, 16:54    [2989011]     Ответить | Цитировать Сообщить модератору
 Re: Добраться до свойства объекта  [new]
Кузнецов Игорь
Member

Откуда: Иваново
Сообщений: 143
У меня VFP6SP5. Панелей 3 штуки. Использую Microsoft StatusBar Control, Version 6.0
Кажется разобрался.
Для всех остальных свойств у меня нормально работает синтаксис вида:
THISFORM.OleControl1.Panels.Item(2).Text="bla-bla-bla"
а вот для картинки пришлось написать так, как у вас:
THISFORM.OleControl1.Panels(2).Picture=LOADPICTURE("MyFace")
11 авг 06, 09:09    [2990707]     Ответить | Цитировать Сообщить модератору
 Re: Добраться до свойства объекта  [new]
Кузнецов Игорь
Member

Откуда: Иваново
Сообщений: 143
Хотя нет!
Команда успешно отработала из окна Command VFP при пошаговой отладке, а вот в рантайме вызывает ту же ошибку.
11 авг 06, 09:21    [2990767]     Ответить | Цитировать Сообщить модератору
 Re: Добраться до свойства объекта  [new]
Aleksey-K
Member

Откуда: Москва
Сообщений: 3116
А разве в VFP 6.0 уже былоа команда LOADPICTURE ?
С уважением, Алексей
11 авг 06, 09:45    [2990902]     Ответить | Цитировать Сообщить модератору
 Re: Добраться до свойства объекта  [new]
Кузнецов Игорь
Member

Откуда: Иваново
Сообщений: 143
Да, в шестерке она присутствует.
11 авг 06, 09:47    [2990921]     Ответить | Цитировать Сообщить модератору
 Re: Добраться до свойства объекта  [new]
Aleksey-K
Member

Откуда: Москва
Сообщений: 3116
А Run-Time на той же машине, что и среда разработки?
С уважением, Алексей
11 авг 06, 09:50    [2990934]     Ответить | Цитировать Сообщить модератору
 Re: Добраться до свойства объекта  [new]
Кузнецов Игорь
Member

Откуда: Иваново
Сообщений: 143
Да, конечно. Более того. Запущенный в среде VFP exe-шник останавливается с ошибкой на данной строке. Копирую эту строку с окно Command - работает, пытаюсь продолжить выполнение программы - ошибка!
11 авг 06, 10:13    [2991095]     Ответить | Цитировать Сообщить модератору
 Re: Добраться до свойства объекта  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
А если написать так:

LOCAL loPanel
loPanel = THISFORM.OleControl1.Panels(2)
loPanel.Picture=LOADPICTURE("MyFace")

Смысл в том, чтобы был только один уровень иерархии COM-объекта в операторе присвоения (одна точка)
11 авг 06, 11:14    [2991703]     Ответить | Цитировать Сообщить модератору
 Re: Добраться до свойства объекта  [new]
Кузнецов Игорь
Member

Откуда: Иваново
Сообщений: 143
ВладимирМ
А если написать так:

LOCAL loPanel
loPanel = THISFORM.OleControl1.Panels(2)
loPanel.Picture=LOADPICTURE("MyFace")

Смысл в том, чтобы был только один уровень иерархии COM-объекта в операторе присвоения (одна точка)

Все равно программа остановилась с той же ошибкой на строке, где LOADPICTURE. Скопировал строку и выполнил её из Command Window успешно.
11 авг 06, 11:35    [2991945]     Ответить | Цитировать Сообщить модератору
 Re: Добраться до свойства объекта  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Продолжаем "дробить" конструкцию. Вот так что получится?

LOCAL loPanel, loPicture
loPanel = THISFORM.OleControl1.Panels(2)
loPicture = LOADPICTURE("MyFace")
loPanel.Picture = m.loPicture

Кстати, то, что файл картинки без расширения и без пути доступа - это так и есть, или для примера? Этот файл вообще-то "виден" в процессе выполнения программы?

?File("MyFace")

Не в командном окне, а именно перед его использованием?
11 авг 06, 12:01    [2992269]     Ответить | Цитировать Сообщить модератору
 Re: Добраться до свойства объекта  [new]
Кузнецов Игорь
Member

Откуда: Иваново
Сообщений: 143
Ошибка появилась на строке, где LOADPICTURE.
Вынес этот кусок в отдельный метод формы. Привожу его теперь с использованием своих имен объектов.
PARAMETER lcImg
loPanel = THISFORM.LowStatus.Panels(2)
IF FILE(lcImg)
	MESSAGEBOX("File Enable")
ENDIF
loPicture = LOADPICTURE(lcImg)   && error
loPanel.Picture = m.loPicture
В переменной lcImg находится полный путь и имя файла с расширением .ico
MessageBox появляется.
11 авг 06, 13:40    [2993056]     Ответить | Цитировать Сообщить модератору
 Re: Добраться до свойства объекта  [new]
Aleksey-K
Member

Откуда: Москва
Сообщений: 3116
Ну тогда чот-то у вас в "кончерватории" :)
Может ActiveX зарегистрирован не корректно или Windows корево работает?
Попробуйте на другой машине?
С уважением, Алексей
11 авг 06, 14:11    [2993308]     Ответить | Цитировать Сообщить модератору
 Re: Добраться до свойства объекта  [new]
Кузнецов Игорь
Member

Откуда: Иваново
Сообщений: 143
Aleksey-K
Ну тогда чот-то у вас в "кончерватории" :)
Может ActiveX зарегистрирован не корректно или Windows корево работает?
Попробуйте на другой машине?
С уважением, Алексей

Может быть. Но на другой машине все повторилось в точности. VFP там тот же.
11 авг 06, 14:55    [2993618]     Ответить | Цитировать Сообщить модератору
 Re: Добраться до свойства объекта  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
У меня все прекрасно работает.

VFP6SP5.

Проверял и на "Microsoft StatusBar Control, version 5.0 (SP2)" и на "Microsoft StatusBar Control 6.0 (SP4)"

Без проблем. Пример во вложенном файле. Допустимо использовать файлы: bmp, ico, wmf

К сообщению приложен файл (Form_StatusBar.ZIP - 1Kb) cкачать
11 авг 06, 15:22    [2993783]     Ответить | Цитировать Сообщить модератору
 Re: Добраться до свойства объекта  [new]
Aleksey-K
Member

Откуда: Москва
Сообщений: 3116
Очень интересно.. А свой пример можете выложить?
С уважением, Алексей
11 авг 06, 15:24    [2993788]     Ответить | Цитировать Сообщить модератору
 Re: Добраться до свойства объекта  [new]
Кузнецов Игорь
Member

Откуда: Иваново
Сообщений: 143
ВладимирМ
У меня все прекрасно работает.

VFP6SP5.

Проверял и на "Microsoft StatusBar Control, version 5.0 (SP2)" и на "Microsoft StatusBar Control 6.0 (SP4)"

Без проблем. Пример во вложенном файле. Допустимо использовать файлы: bmp, ico, wmf

Ваш пример работает. А мой нет. Я продолжу поиски причины в понедельник.
11 авг 06, 15:31    [2993818]     Ответить | Цитировать Сообщить модератору
 Re: Добраться до свойства объекта  [new]
Кузнецов Игорь
Member

Откуда: Иваново
Сообщений: 143
Итак, судя по всем признакам все дело в моей программе. Влияют какие-то настройки. Вот только какие? Попробую привести структуру данного участка моей программы. Головной модуль:
*_SCREEN.Visible=.F.
*
PUBLIC HKEY_USERS, oReestr, oftp, f_mainbody, main_path
LOCAL ARRAY OldScreen(5)

SET DATE 		YMD
SET CENTURY 	ON
SET MARK TO		"-"
SET DECIMALS TO 2
SET STATUS BAR 	OFF
SET STATUS 		OFF
SET COMPATIBLE 	OFF
SET SAFETY 		OFF
SET TALK 		OFF
SET CPDIALOG 	OFF
SET PATH TO		.\DLL, .\dll\gcs_engine, .\CLASS
SET PROCEDURE TO PROCLIB, ftp, e_report ADDITIVE
SET CLASSLIB  TO registry, mybase

main_path 	 = SYS(5)+SYS(2003)
c_versionPrg = "3.0"
cprgname	 = "PBC " + c_versionPrg
HKEY_USERS	 = -2147483645
OldScreen(1) = _SCREEN.HEIGHT
OldScreen(2) = _SCREEN.WIDTH
OldScreen(3) = _SCREEN.ICON
OldScreen(4) = _SCREEN.CAPTION
OldScreen(5) = _SCREEN.BORDERSTYLE

oReestr	= CREATEOBJECT("registry")	
DO FORM f_mainbody NAME f_mainbody LINKED
f_mainbody.Caption=cprgname

* Главное тело программы

f_mainbody.DO

* Завершение
В Inite формы никаких установок не делается, только вычитываются значения из реестра. На форме периодически срабатывает таймер и тоже вычитывает из реестра одно значение. В зависимости от полученного значения я хочу показать в StatusBar'e различные картинки. Вот код таймера:
cValue=SPACE(20)
oReestr.GetRegKey("BACKstatus",@cValue,".DEFAULT\Software\KUI\PBC\CurrentSet",HKEY_USERS)
cValue=ALLTRIM(cValue)
DO CASE
CASE cValue="StartOk"
	THISFORM.UpdateStatusBar(main_path+"\Images\trffc10c.ico")
CASE cValue="StopOk"
	THISFORM.UpdateStatusBar(main_path+"\Images\trffc10a.ico")
CASE cValue="CancelOk"
CASE cValue="NotifyOk"
OTHERWISE
	THISFORM.LowStatus.Panels.Items(2).text="xz"
ENDCASE
THISFORM.Refresh
Метод UpdateStatusBar создан специально для решения вышеозначеной проблемы. Его код:
PARAMETER lcImg
loPanel = THISFORM.LowStatus.Panels(2)
loPicture = LOADPICTURE(lcImg)   && error
loPanel.Picture = m.loPicture
Где собака порылась?
14 авг 06, 09:32    [2997960]     Ответить | Цитировать Сообщить модератору
 Re: Добраться до свойства объекта  [new]
Aleksey-K
Member

Откуда: Москва
Сообщений: 3116
1. Может у вас иконка такого формата, что ее не понимает LOADPICTURE?
Попробуйте заменить ваш ico на простую картинку BMP размером 16 на 16 пиксел.
2. Упростите до невозможности на периода отладки код метода UpdateStatusBar в виде:
THISFORM.LowStatus.Panels(2).Picture = LOADPICTURE("Images\MyBMP.BMP")

С уважением, Алексей
14 авг 06, 10:09    [2998071]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / FoxPro, Visual FoxPro Ответить