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 |
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 Недочитал тему до конца... |
Re: что-то про RTF | |
---|---|
Равиль Сообщений: 6546 Откуда: Уфа Дата регистрации: 01.08.2003 |
2Петров Андрей. Я тоже наблюдал глюки при хранении ссылок на объекты в переменных вне зависимости от области их видимости и теперь стараюсь избегать этого, тем более у тебя таймер участвует.
Есть подозрения, что то что мы называем ссылкой на объект (например This для формы) - вещь непостоянная (в смысле ее значения), во всяком случае происходит что-то типа перетасовки - это проявляется в коллекции форм при их активном создании, удалении. Поэтому твое сообщение "Unrecognized command verb" может быть связано с потерей соответствия переменная-объект. ------------------ Тяжело согнать курсором муху с монитора ... |
Re: что-то про RTF | |
---|---|
Петров Андрей Сообщений: 2506 Откуда: Химки (М.О.) Дата регистрации: 17.04.2002 |
Привет Равиль.
Да похоже на то. Буду еще ковыряться с этим. Странно никогда на это не натыкался. А хотя похоже при работе с Excel такой глюк тоже присутствует... ------------------ PS Недочитал тему до конца... |
Re: EditRTF | |
---|---|
Igor Korolyov Автор Сообщений: 34580 Дата регистрации: 28.05.2002 |
Hi Андрей!
Ещё раз и медленно. Убери WITH отовсюду, и замени на явные полные ссылки к объекту, причём лучше конечно делать это через ЯВНУЮ передачу ссылок между процедурами, а не через PUBLIC переменные. Коль работаешь с ActiveX - проверь _VFP.AutoYield. Твой второй код НЕ отражает сути первого. Ты изначально не PRIVATE переменную то имеешь, а PUBLIC! И как там её "прячет" или использует WITH - одному богу известно. Тем паче что в деле фигурирует ActiveX. Цитата:- Доктор, когда я делаю вот так, мне становится больно. - Не делайте так! - Нет доктор - вы видимо плохой специалист, я лучше пойду к другому, и он мне расскажет почему же мне от этого больно... Так что хозяин-барин ------------------ WBR, Igor |
© 2000-2024 Fox Club  |