:: Visual Foxpro, Foxpro for DOS
Re: EditRTF
Igor Korolyov
Автор

Сообщений: 34580
Дата регистрации: 28.05.2002
Hi Андрей!

Левый, потому что создаёт неявную (причём безымянную и причём с областью
видимости Private! Т.е. в вызванной "изнутри" WITH процедуре она также
действует!) ссылку на объект, что в ряде случаев может негативно повлиять на
обычный ход течения событий. Особенно в твоей ситуации, когда "по сути"
получается что внутри контекста одного блока WITH w_sender ты вызываешь
процедуру, которая создаёт второй точно такой-же блок WITH w_sender!Чем
это может закончится предсказать сложно.
Кроме того я поначалу совершенно не понял почему у тебя там не ThisForm
используется - ну да теперь вижу, что это вообще совершенно отдельная
процедура, а не метод формы. Зачем ты так сделал я не знаю, но попробовать
перенести логику "снаружи" вовнутрь собственно класса стоит - заодно вместо
непонятно где и как объявленной Public/Private ссылки (по крайней мере в
твоём коде этого не видно! Как и многих других "деталей" запуска этой формы)
можно будет использовать ThisForm - что IMHO более логично и просто.

Кроме того я весьма недолюбливаю однобуквенные имена переменных, а так-же
имена переменных совпадающие с зарезервированными словами - чего как видим в
избытке
Из "мелочей" - PCOUNT() круче чем PARAMETERS(). Вместо "хитрого"
m.k='m.str=.messager'+ALLTRIM(STR(m.n))+'.data'
&k

Я бы использовал что-нить более простое:

lcNum = ALLTRIM(STR(m.n))
lcStr = .messager&lcNum..data

Или

loMessager = GETPEM(ThisForm.pf.page1, "messager" + ALLTRIM(STR(m.n)))
lcStr = m.loMessager.data

Private переменные нужны достаточно редко - в приведенном коде хватит и
LOCAL




------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: EditRTF
Петров Андрей

Сообщений: 2506
Откуда: Химки (М.О.)
Дата регистрации: 17.04.2002
То что With создает невидимую переменную это я незнал. Спасибо. Ну а теперь расскажи мне пожалуйста вот такой код разве не подразумевает нормальную работу?

priva a
m.a=1
do qqqq
? m.a

proc qqqq
priva a
m.a=2
? a
retu

Или ты имелл ввиду то что переменная невидна значит все неработает. Так приведенный код показывает и то что при работе с ThisForm вместо W_Sender (вне With) тоже возникает та же ошибка (читать посты надо подробнее ). Теперь следующий довод. Проверим есть ли объект на форме в момент изменения Property. Те ? VarType(w_sender.pf.page3.log) дает Syntax error. Хотя в дебаггере это Object! Никаких With там нет... Кстати переменная W_sender Public. Но весь код я приводить не буду потому что это повод тебе придраться к мелочам а не объяснять суть дела что мне не нужно...

Теперь к главному твоему доводу. Что я программирую не так как ты. Это чушь. Мне удобнее видеть код в одном PRG файле и там же его редактировать. Те формы (интерфейс) отдельно код отдельно. Это тянет за собой неудобства но я так привык хотя в некоторых случаях признаю это неверно...

Насчет видимости переменных. Ты не видел кода который я не написал. Поверь они там нужны...

А теперь у меня к тебе вопрос. Чем ты мне помог предидущим постом?




------------------
PS Недочитал тему до конца...
Ratings: 0 negative/0 positive
Re: что-то про RTF
Равиль

Сообщений: 6546
Откуда: Уфа
Дата регистрации: 01.08.2003
2Петров Андрей. Я тоже наблюдал глюки при хранении ссылок на объекты в переменных вне зависимости от области их видимости и теперь стараюсь избегать этого, тем более у тебя таймер участвует.
Есть подозрения, что то что мы называем ссылкой на объект (например This для формы) - вещь непостоянная (в смысле ее значения), во всяком случае происходит что-то типа перетасовки - это проявляется в коллекции форм при их активном создании, удалении.
Поэтому твое сообщение "Unrecognized command verb" может быть связано с потерей соответствия переменная-объект.




------------------
Тяжело согнать курсором муху с монитора ...
Ratings: 0 negative/0 positive
Re: что-то про RTF
Петров Андрей

Сообщений: 2506
Откуда: Химки (М.О.)
Дата регистрации: 17.04.2002
Привет Равиль.

Да похоже на то. Буду еще ковыряться с этим. Странно никогда на это не натыкался. А хотя похоже при работе с Excel такой глюк тоже присутствует...




------------------
PS Недочитал тему до конца...
Ratings: 0 negative/0 positive
Re: EditRTF
Igor Korolyov
Автор

Сообщений: 34580
Дата регистрации: 28.05.2002
Hi Андрей!

Ещё раз и медленно. Убери WITH отовсюду, и замени на явные полные ссылки к объекту, причём лучше конечно делать это через ЯВНУЮ передачу ссылок между процедурами, а не через PUBLIC переменные. Коль работаешь с ActiveX - проверь _VFP.AutoYield.
Твой второй код НЕ отражает сути первого. Ты изначально не PRIVATE переменную то имеешь, а PUBLIC! И как там её "прячет" или использует WITH - одному богу известно. Тем паче что в деле фигурирует ActiveX.
Цитата:
это повод тебе придраться к мелочам а не объяснять суть дела что мне не нужно... Чем ты мне помог предидущим постом?
- Доктор, когда я делаю вот так, мне становится больно.
- Не делайте так!
- Нет доктор - вы видимо плохой специалист, я лучше пойду к другому, и он мне расскажет почему же мне от этого больно...

Так что хозяин-барин




------------------
WBR, Igor
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 18 (Гостей: 18)

© 2000-2024 Fox Club 
Яндекс.Метрика