вопрос по гриду | |
---|---|
DmitryKn Автор Сообщений: 300 Дата регистрации: 06.04.2022 |
Здравствуйте всем!
Извращаюсь в гриде, возникла такая ситуация: в одной из колонок Column5.text1.Valid содержит:
Работает только в первой строке грида, в остальных не работает. При добавлении новой строки и нового значения в Column5.text1.Valid, т.е. в исходной таблице этого еще нет, тоже не работает. Может посоветуете чего? |
Re: вопрос по гриду | |
---|---|
akvvohinc Сообщений: 4203 Откуда: Москва Дата регистрации: 11.11.2008 |
Пройтись пошагово в режиме отладки, чтобы вместо "работает/не работает" вы назвали ту команду, которая не отрабатывает так, как вы ожидаете. По приведенному коду ничего однозначно сказать нельзя, так как только вы знаете, к примеру, что такое и чему равно THISFORM.lIsEdit или view1.fld8, и зависят ли они от записи таблицы (строки грида). А я вполне могу предположить, что на какой-то строке эти выражения истинны, а в других - ложны. |
Re: вопрос по гриду | |
---|---|
DmitryKn Автор Сообщений: 300 Дата регистрации: 06.04.2022 |
В этом случае они всегда .t. , откуда и вопрос.
Мне кажется, что не срабатывает
Исправлено 1 раз(а). Последнее : DmitryKn, 18.11.22 12:58 |
Re: вопрос по гриду | |
---|---|
PaulWist Сообщений: 14601 Дата регистрации: 01.04.2004 |
Тут надо ориентироваться на алиас view1, и что в момент срабатывания Valid лежит в поле view1.fld8 (возможно там EOF()), поэтому код автоматического добавления не срабатывает.
И посмотреть, что возвращается в lnState. ------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) |
Re: вопрос по гриду | |
---|---|
akvvohinc Сообщений: 4203 Откуда: Москва Дата регистрации: 11.11.2008 |
А почему всё же вы это не утверждаете, а предполагаете? Что мешает запустить дебаггер или хотя бы вставить команды типа WAIT WINDOW, чтобы знать точно, чему равны переменные в том (хорошем) и других (плохих) случаях. |
Re: вопрос по гриду | |
---|---|
Taran Сообщений: 13623 Откуда: Красноярск Дата регистрации: 16.01.2008 |
Не, ну ты конечно молодец. Никакой обфускатор не нужен. Какого фига тут делают файловые функции JustExt, JustStem? При этом ты алиас тут же порой указываешь явно. Да и поле скорей всего известно. Но если уж и вычислять, то GetWordNum - самое то.
Извини, но и в целом по стилю. Ты из form.grid.column.text.valid несколько раз обращаешься к thisform и один раз к объекту на этом самом thisform. Не должен твой form.grid.column.text ничего знать про всё что выше него, кроме родителя или формы. Делай на форме метод и из form.grid.column.text.valid обращайся к нему типа thisform.doValid(this) А вот метод формы уже имеет право юзать объекты. Иначе пройдут годы и сопровождать запаришься. ... Ну это так, поболтать под Каберне. Исправлено 2 раз(а). Последнее : Taran, 18.11.22 18:46 |
Re: вопрос по гриду | |
---|---|
DmitryKn Автор Сообщений: 300 Дата регистрации: 06.04.2022 |
За совет спасибо, с критикой целиком согласен, выражение нашел где-то то ли тут , то ли на на бывшем SQL.ru и просто скопировал. Конечно, нужно было
привел в порядок, все чудесно работает, спасибо! Цитата: Кислятина раздражает желудок, ослабляет душу и мужское начало. Для мужчины лучшее вино - это водка, для особо взыскательных можно охлажденную, рекомендую. |
Re: вопрос по гриду | |
---|---|
DmitryKn Автор Сообщений: 300 Дата регистрации: 06.04.2022 |
Откровенно говоря, я не сильно дебаггером владею, про него не так уж много написано, и как его практически применить мне не совсем ясно. Если прогу из него запускать, то не запускается, старт и приложение в разных папках. Пытался как-то вставить SET STEP ON в методе Init формы, так не реагирует. Месседжбоксы впихиваю, муторно конечно, но как есть. |
Re: вопрос по гриду | |
---|---|
Владимир Максимов Сообщений: 14095 Откуда: Москва Дата регистрации: 02.09.2000 |
В Вашем вопросе основная проблема в том, что никто не понимает, что означает фраза "не работает"? Что именно "не работает"? Какая именно команда? Вот народ и пустился "во все тяжкие" со своими предположениями.
Сам по себе код рабочий (не вполне корректный, но, может, мы чего-то не видим). Но что именно "не работает" без отладки сказать невозможно. Остается только предполагать, что раз проблема после первого срабатывания thisform.griaddserv(), то, скорее всего, внутри этого метода происходит изменение настроек Grid и значение ControlSource уже другое. Но это предположение. Как оно на самом деле, ищите сами С отладчиком нет никаких проблем. Ставите точку останова прямо в коде. Двойной клик мышки по левой границе строки кода - там появится красный кружок. Или явно SET STEP ON в коде перед проблемной командой. В init-формы смысла нет. Вас же не процесс загрузки формы интересует, а именно конкретный метод. Вот в методе точку останова и ставьте Замечание: Чтобы перейти в режим отладки это самое окно отладчика должно быть открыто ДО запуска кода. Вот при открытом окне отладчика код и надо запускать. Собственно, это окно должно открыться само при установке точки останова в дизайнере двойным кликом мыши. Но можно и явно через пункт меню Tools \ Debugger А дальше после открытия окна отладчика, жмете F8 для выполнения очередной команды или иконку со стрелкой внутрь фигурных скобок в ToolBar окна отладки. При остановке кода в окне отладки подводите мышку (не нажимая) к интересующей Вас переменной и увидите ее значение. Или в окне Watch можно ввести нужную переменную, чтобы посмотреть ее текущее значение Когда с отладкой закончили, то жмете в окне отладчика иконку треугольника PS: Если у Grid меняют источник данных Grid.RecordSource, то это может привести к описанной проблеме. Подробности здесь Пропадают настройки Grid, события столбцов, заголовков, ячеек Исправлено 1 раз(а). Последнее : Владимир Максимов, 19.11.22 20:27 |
Re: вопрос по гриду | |
---|---|
of63 Сообщений: 25161 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
> Пытался как-то вставить SET STEP ON в методе Init формы, так не реагирует.
Эта команда (SET STEP ON) игнорируется, если программа запущена НЕ ИЗ ПОД IDE фокса, т.е. не из командного окна в IDE. Запустить-то просто из командного окна - кнопкой Ctrl-D, выбрать запускаемый EXE или APP (надо, чтобы файл проекта, исходники его, были видны, темная история, где фокс их ищет), но если скомпилять проект, и нажать Ctrl-D, выбрать EXE-шник (лежащий рядом с файлом проекта PJX), то он запустится, и на команде SET STEP ON должно высветится окно "дебагера". Далее "идем по шагам" (кнопка F6 и другие, внутрь заглядываем процедур, другой кнопкой, попутно ставим метки останова в левой колонке текста, вобщем надо юзать, если жизнь заставляет!...) После выхода из проги при таком запуске, если не предприняты меры сохранения/восстановления окружения фоксового настроения (типа "размер окна" и пр.), то будет нехорошо. Некоторые выключают фокс вообще, а потом запускают его заново, тогда восстанавливается привычный IDE фокса. парой 10-ков строк кода все можно сохранять и возвращать (параметры IDE фокса) взад. Тогда можно запускать процесс отладки проги многократно, из одного сеанса IDE фокса... |
Re: вопрос по гриду | |
---|---|
DmitryKn Автор Сообщений: 300 Дата регистрации: 06.04.2022 |
Спасибо всем,
вроде жизнь налаживается, дело пошло ) |
Re: вопрос по гриду | |
---|---|
DmitryKn Автор Сообщений: 300 Дата регистрации: 06.04.2022 |
С дебагом не получается.
В методе формы в начале красная точка, пару строк ниже set step on. Запускаю приложение обычным способом - ничего не происходит. Тогда: 1.Открываю фокс, Tools\Debagger - окно дебага открыто. 2.В методе формы в начале красная точка, пару строк ниже set step on. Запускаю приложение обычным способом - опять ничего не происходит. Запустить приложение из-под IDE тоже не получается - стартует exe, потом основное app , лежат в разных папках в разных директориях. Как этот дебаг открыть-то ? Только не надо говорить, что именно мне дебаг открывать необязательно и даже не нужно Исправлено 1 раз(а). Последнее : DmitryKn, 20.11.22 10:13 |
Re: вопрос по гриду | |
---|---|
akvvohinc Сообщений: 4203 Откуда: Москва Дата регистрации: 11.11.2008 |
Если EXE собираете вы, то у вас есть и исходники. Что мешает запускать программу в исходниках? Цитата:Непонятно, при чем тут папки, где что-то лежит, и команда DEBUG. ---------- Все привыкли отлаживаться так, как привыкли. Я начинал работу с Фоксом ещё с Доса, где для остановки программы надо было в прогу вставить команду Suspend, позже появилось окно Trace (прародитель текущего Debug). Поэтому я и сейчас для отладки чаще всего останавливаю программу в нужном мне месте командой Suspend (можно и SET STEP ON), попадаю в командное окно, выдаю команду Debug (или через меню Tools -> Debugger) и т.д. Естественно всё это делаю не с EXE, а с исходными кодами. Можно открывать Debugger и до запуска исходников, тогда после Suspend (или по установленной в дебаггере точке останова) вы сразу попадаете в его окно, но при открытом дебаггере программа работает медленнее, и поэтому иногда (допустим, до точки останова выполняется сложный расчет) это неудобно. Исправлено 4 раз(а). Последнее : akvvohinc, 20.11.22 13:31 |
Re: вопрос по гриду | |
---|---|
DmitryKn Автор Сообщений: 300 Дата регистрации: 06.04.2022 |
Запустить в исходниках - это открыть проект в фоксе и запустить main.prg ? Так оно хочет все найти в папке фокса, не видит объектов. |
Re: вопрос по гриду | |
---|---|
akvvohinc Сообщений: 4203 Откуда: Москва Дата регистрации: 11.11.2008 |
Цитата:Если путь к программе/файлу явно не указан, то они ищутся по вполне определенному алгоритму - сначала в текущей папке, а потом по путям, указанным в PATH. Поэтому обычно либо в Config.fpw задается настройка PATH, либо в головной программе есть команда SET PATH. Но неужели вы, корректируя программу, каждый раз для её запуска собираете EXE? Это ж сколько бы я потратил впустую человеко-часов, если бы постоянно делал это, никому не нужное, дело как создание EXE! Да, в самом конце, когда всё уже отлажено и работает, перед сдачей программы я собираю и проверяю её в EXE, но какой смысл тратить на это время в процессе правки/отладки? Кстати, я компилирую программы с опцией NODEBUG (для уменьшения размера EXE), а поэтому вообще не могу отлаживать EXE через дебаггер. Исправлено 1 раз(а). Последнее : akvvohinc, 20.11.22 15:25 |
Re: вопрос по гриду | |
---|---|
DmitryKn Автор Сообщений: 300 Дата регистрации: 06.04.2022 |
Нет, я не собираю каждый раз exe.
Я каждый раз собираю app. exe стартует, в нем класс App с настройками, и этот exe запускает мое приложение, которое лежит отдельно как app.
|
Re: вопрос по гриду | |
---|---|
akvvohinc Сообщений: 4203 Откуда: Москва Дата регистрации: 11.11.2008 |
А этот отдельно лежащий APP у вас включен в проект? Или другими словами - он попадает в EXE? -------- Но в любом случае, если: 1) в нужное место программы, входящей в ваш APP, вы добавите команду Suspend; 2) а EXE запустите из командного окна Фокса командой DO myexe.exe (в общем, из-под Фокса, а не EXE напрямую); 3) то команда Suspend будет выполнена, программа остановится, вы окажетесь в командном окне Фокса; 4) наберите и выполните команду DEBUG - появится дебаггер. Что из описанной последовательности действий у вас не проходит? Исправлено 8 раз(а). Последнее : akvvohinc, 20.11.22 16:47 |
Re: вопрос по гриду | |
---|---|
DmitryKn Автор Сообщений: 300 Дата регистрации: 06.04.2022 |
У меня нет окончательного EXE, который мог бы быть на сд-диске или флешке, т.е. к распространению невозможно. А всего получается два проекта, один starе.exe, второй project.app . Старт, фрагмент я приводил, в нем класс App с настройками, запускает project.app, в котором непосредственно вся хрень и выполняется, при редактировании компилируются каждый сам по себе, раздельно. Как два разных проекта. Цитата: И вот я открываю фокс, пишу в окне do\путь\start.exe или do\путь\main.prg и фокс не видит настроек, не видит основного модуля, как раз в том фрагменте эта проверка, и до него не доходит. А отдельно основной модуль, project.app запустить невозможно. |
Re: вопрос по гриду | |
---|---|
akvvohinc Сообщений: 4203 Откуда: Москва Дата регистрации: 11.11.2008 |
Цитата:Значит, в этот момент рабочей папкой является не та, что требуется при запуске start.exe. А поэтому предварительно сделайте нужную папку текущей каким-либо способом: 1) в командном окне Фокса - CD <полный путь к папке> (или SET DEFAULT TO <полный путь к папке>) или 2) при запуске Фокса укажите специальный Config.xxx, в котором будет указана рабочая папка: DEFAULT = <полный путь к папке> А перед запуском EXE проверьте, какая папка сейчас текущая: ? CURDIR() Исправлено 2 раз(а). Последнее : akvvohinc, 20.11.22 17:05 |
Re: вопрос по гриду | |
---|---|
akvvohinc Сообщений: 4203 Откуда: Москва Дата регистрации: 11.11.2008 |
Цитата:Чему у вас равно значение этого свойства? Там задан абсолютный или относительный путь? |
© 2000-2024 Fox Club  |