powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Вопросы по структуре, организации и принципам кода в VB6->
25 сообщений из 180, страница 5 из 8
Вопросы по структуре, организации и принципам кода в VB6->
    #36648857
tutti-frutti
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, спасибо, получилось. Правда пришлось
Код: plaintext
1.
Dim LocalMyListView As ListView
задвинуть в модуль класса, если я правильно называю этот модуль, и объявить его так:
Код: plaintext
Public LocalMyListView As ListView
Не знаю почему, но если он (объект) был объявлен на уровне модяля формы, то в определенный момент он разрушался и было невозможно сквозь него работать с коллекциями ListItems исходного ListView
Ну да бог с ним, тут я смотрю нужно что-то почитать, и за один подход фик осилить.

Чищу код в первом приближении, и хочу вот эту повторяющуюся сущность:
Код: plaintext
1.
2.
Dim db As Database
Dim rstCustomers As DAO.Recordset
Set db = OpenDatabase("C:\ADLib\DbLib\MainLib.mdb")

описать один раз в модуле класса.
Так и сделал:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Public db As Database
Public rstCustomers As DAO.Recordset

Sub Main()
    Set db = OpenDatabase("C:\ADLib\DbLib\MainLib.mdb")
    Set fMainForm = New frmMain
    fMainForm.Show
End Sub

Все было нормально, пока я не добрался до рекурсивной функции/процедуры. Дело в том, что если функция вызывает сама себя, то переменная (а рекордсет это тоже переменная) должна быть автоматической и определенной/инициализированной на уровне функции. Короче говоря, у меня не получилось заставить рекурсивную функцию работать с внешним рекордсетом.

---
Есть ли какие-то общие правила по оформлению кода в VB?
ПО размещению функций, переменных, объектов. Стили коментирования и т.д.
Спасибо!
...
Рейтинг: 0 / 0
Вопросы по структуре, организации и принципам кода в VB6->
    #36648859
tutti-frutti
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если у меня в программе испоьзуется сторонний грид, который я инсталлировал у себя на машине с помощью фирменного инсталятора, то как мне распространять свою программу? Нужно найти программу которая будет создавать инсталяху, и учится интегрировать в нее активХ компоненты, файлы и прочее? Правильно я все понимаю?
...
Рейтинг: 0 / 0
Вопросы по структуре, организации и принципам кода в VB6->
    #36648879
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tutti-fruttiНе знаю почему, но если он (объект) был объявлен на уровне модяля формы, то в определенный момент он разрушался и было невозможно сквозь него работать с коллекциями ListItems исходного ListView
Странно, не должно быть до момента выгрузки формы.

tutti-fruttiВсе было нормально, пока я не добрался до рекурсивной функции/процедуры. Дело в том, что если функция вызывает сама себя, то переменная (а рекордсет это тоже переменная) должна быть автоматической и определенной/инициализированной на уровне функции. Короче говоря, у меня не получилось заставить рекурсивную функцию работать с внешним рекордсетом.
Без бутылкикода не разберемся

tutti-fruttiЕсть ли какие-то общие правила по оформлению кода в VB?
ПО размещению функций, переменных, объектов. Стили коментирования и т.д.

Ну это каждый свое нарабатывает.
Я, например, завожу модули под группы публичных функций и глобальные переменные.

Ну и естественно, инкапсуляция и еще раз инкапсуляция. Под работы над определенными объектами по максимуму делаю классы. Делаю классы-надстройки над стандартными объектами - в частности формами, а все контролы формы пихаю в юзерконтролы (фактически из стандартных контролов использую только кнопки и метки).
...
Рейтинг: 0 / 0
Вопросы по структуре, организации и принципам кода в VB6->
    #36648887
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tutti-fruttiЕсли у меня в программе испоьзуется сторонний грид, который я инсталлировал у себя на машине с помощью фирменного инсталятора, то как мне распространять свою программу? Нужно найти программу которая будет создавать инсталяху, и учится интегрировать в нее активХ компоненты, файлы и прочее? Правильно я все понимаю?

Тут я плохой советчик, потому что пользуюсь штатным P&D Wizard - просто у меня к инсталлятору минимальные требования, он меня удовлетворяет, причем все штатные библиотеки, плюс референсы на некоторые внешние библиотеки подтянул автоматом на основе анализа файла проекта.

Но тут этот инсталлятор - моветон. Народ рекомендует InnoSetup, я его не видал.
...
Рейтинг: 0 / 0
Вопросы по структуре, организации и принципам кода в VB6->
    #36648900
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tutti-fruttiВсе было нормально, пока я не добрался до рекурсивной функции/процедуры. Дело в том, что если функция вызывает сама себя, то переменная (а рекордсет это тоже переменная) должна быть автоматической и определенной/инициализированной на уровне функции. Короче говоря, у меня не получилось заставить рекурсивную функцию работать с внешним рекордсетом.

А может и догадался, о чем ты.
У рекордсета есть метод Clone
Попробуй его. Типа
Код: plaintext
1.
Dim LocalRs As DAO.Recordet
Set LocalRs = rstCustomers.Clone
...
Рейтинг: 0 / 0
Вопросы по структуре, организации и принципам кода в VB6->
    #36657040
tutti-frutti
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно перебрать всю ветку в TreeView и удалить из нее ноды, кроме первого
Делаю так:
Код: plaintext
1.
2.
            For i = tvTreeView.SelectedItem.Parent.LastSibling.Index To (tvTreeView.SelectedItem.Parent.Index) +  1  Step - 1 
                tvTreeView.Nodes.Remove (tvTreeView.Nodes(i).Key)
            Next i
что скорее всего неправильно. Подсоветуйте правильный путь. Спасибо!
...
Рейтинг: 0 / 0
Вопросы по структуре, организации и принципам кода в VB6->
    #36657041
tutti-frutti
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну соответственно нод, с которого нужно начинать удаление выделен.
...
Рейтинг: 0 / 0
Вопросы по структуре, организации и принципам кода в VB6->
    #36657054
tutti-frutti
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вместо Child у меня Parent. Спасибо, разрулил.
...
Рейтинг: 0 / 0
Вопросы по структуре, организации и принципам кода в VB6->
    #36657249
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tutti-fruttiСпасибо, разрулил.
Не за что! Мы мысленно с тобой. Мы помним про Тещу.
...
Рейтинг: 0 / 0
Вопросы по структуре, организации и принципам кода в VB6->
    #36665198
tutti-frutti
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Protutti-fruttiСпасибо, разрулил.
Не за что! Мы мысленно с тобой. Мы помним про Тещу.

Видали бы вы, как она рыбу чистит...
ладно не буду о грустном.

Итак сегодня появилась свободная минутка и вот хочу спросить, как правильно обрабатывать ошибки в небольшой программке по типу виндового проводничка? Как, в сл. ошибки метнутся в обработчик, распознать по номеру ошибку и среагировать ВНУТРИ функции понятно, но как это все увязать вместе, ведь ошибка может произойти "асинхронно" со всякого рода разумными домыслами относительно ее природы и прочего.
Что же я получу в работающей программе: аварийные сообщения с текстом и номерами траблов? Как правильно делать? Спасибо.
...
Рейтинг: 0 / 0
Вопросы по структуре, организации и принципам кода в VB6->
    #36665200
tutti-frutti
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть у меня рекурсивная функци, которая строит дерево. Нельзя сказать, что она хорошо написана, но вопрос у меня не о чистоте и разумности кода а о логике работы с RecordSet. Скажите, когда и где именно правильно закрывать (.Close) RecordSetЫ? Вот код:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
Private Sub BuildSecondaryNode(Parent As Integer)

    Dim S1, S2 As String
    Dim RecursRecordSet1, RecursRecordSet2  As DAO.Recordset
    
    Set RecursRecordSet1 = db.OpenRecordset("SELECT [T_Components].ID, [T_Components].ParentID, [T_Components].Name FROM [T_Components] WHERE ((([T_Components].ParentID)=" & Parent & ") AND (([T_Components].[Footprint Ref]) is null)) ORDER BY T_Components.ID;", , dbOpenForwardOnly)
    If RecursRecordSet1.RecordCount <>  0  Then
        RecursRecordSet1.MoveFirst
        
        While Not RecursRecordSet1.EOF
            S1 = "OneClosed"
            S2 = "OneOpen"
            
            Set RecursRecordSet2 = db.OpenRecordset("SELECT * FROM [T_Components] WHERE ((([T_Components].ParentID)=" & RecursRecordSet1!ID & ")) ;", , dbOpenForwardOnly)
            If RecursRecordSet2.RecordCount <>  0  Then
                RecursRecordSet2.MoveFirst
                S1 = "ManyClosed"
                S2 = "ManyOpen"
            End If
            
            RecursRecordSet2.Close
            tvTreeView.Nodes.Add "@" & Parent, tvwChild, "@" & RecursRecordSet1!ID, RecursRecordSet1!Name, S1, S2
            
            Call BuildSecondaryNode(RecursRecordSet1!ID)
            
            RecursRecordSet1.MoveNext
            
        Wend
        
    End If
    
End Sub
Трудности вызывают рекурсивные вызовы функции.
Спасибо.
...
Рейтинг: 0 / 0
Вопросы по структуре, организации и принципам кода в VB6->
    #36665206
tutti-frutti
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как правильно проверять на наличие записей в рекодсете? Еще я задвигаю указатель на первую структуру данных. У меня сейчас везде так:
Код: plaintext
1.
2.
3.
If RecursRecordSet1.RecordCount <>  0  Then
RecursRecordSet1.MoveFirst
...
...
Рейтинг: 0 / 0
Вопросы по структуре, организации и принципам кода в VB6->
    #36665208
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tutti-fruttiВидали бы вы, как она рыбу чистит...
Неужели с хвоста?

tutti-fruttiведь ошибка может произойти "асинхронно" со всякого рода разумными домыслами относительно ее природы и прочего.

Вообще-то это требует пояснений.
Ибо, при работе с внешними источниками (БД, файлами и т.п.) ошибки очевидно должны заворачиваться в On Error-ы.

В то же время a=a+1 в общем-то заворачивать не надо. Ты можешь возразить, что мол в этом случае может возникнуть переполнение. И я отвечу - да может, если ты сам <censored>. И далее что? Вот возникла ошибка, что ты будешь делать? Покажешь пользователю текст и предложишь работать дальше? А если нельзя? Если в результате этой ошибки ты дальше поломаешь структуру данных в БД? Лично я те места, где ошибки НЕ ДОЛЖНЫ ВОЗНИКНУТЬ согласно алгоритму программы, не заворачиваю. Пусть лучше пользователь ее обнаружит и мне по голове настучит, чем проигнорирует, а потом мне удивляться результатам.
...
Рейтинг: 0 / 0
Вопросы по структуре, организации и принципам кода в VB6->
    #36665219
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
Private Sub BuildSecondaryNode(Parent As Integer)

    Dim S1, S2 As String
    Dim RecursRecordSet1, RecursRecordSet2  As DAO.Recordset
    
    Set RecursRecordSet1 = db.OpenRecordset("SELECT [T_Components].ID, [T_Components].ParentID, [T_Components].Name FROM [T_Components] WHERE ((([T_Components].ParentID)=" & Parent & ") AND (([T_Components].[Footprint Ref]) is null)) ORDER BY T_Components.ID;", , dbOpenForwardOnly)
    If RecursRecordSet1.RecordCount <>  0  Then
        RecursRecordSet1.MoveFirst
        
        While Not RecursRecordSet1.EOF
            S1 = "OneClosed"
            S2 = "OneOpen"
            
            Set RecursRecordSet2 = db.OpenRecordset("SELECT * FROM [T_Components] WHERE ((([T_Components].ParentID)=" & RecursRecordSet1!ID & ")) ;", , dbOpenForwardOnly)
            If RecursRecordSet2.RecordCount <>  0  Then
                RecursRecordSet2.MoveFirst
                S1 = "ManyClosed"
                S2 = "ManyOpen"
            End If
            
            RecursRecordSet2.Close
            Set RecursRecordSet2=Nothing
            tvTreeView.Nodes.Add "@" & Parent, tvwChild, "@" & RecursRecordSet1!ID, RecursRecordSet1!Name, S1, S2
            
            Call BuildSecondaryNode(RecursRecordSet1!ID)
            
            RecursRecordSet1.MoveNext
            
        Wend
    End If
    RecursRecordSet1.Close
    Set RecursRecordSet1=Nothing
        
    
End Sub

В общем, при правильном форматировании кода - на том же уровне вложенности, где он был открыт
...
Рейтинг: 0 / 0
Вопросы по структуре, организации и принципам кода в VB6->
    #36665223
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tutti-fruttiКак правильно проверять на наличие записей в рекодсете? Еще я задвигаю указатель на первую структуру данных. У меня сейчас везде так:
Код: plaintext
1.
2.
3.
If RecursRecordSet1.RecordCount <>  0  Then
RecursRecordSet1.MoveFirst
...

Не совсем уверен за DAO, но в ADO просто проверяешь на EOF (без всякого MoveFirst)
RecordCount в определенных случаях может быть -1, так что стараюсь им не пользоваться.
...
Рейтинг: 0 / 0
Вопросы по структуре, организации и принципам кода в VB6->
    #36665229
tutti-frutti
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro, У меня вся програмка построена на вызовах функций и "ввыливание" в функции при определенных событиях.
Заворачивать в обработчики я могу соответственно только части функций. Но функция это кусочек целого! Ну например речь идет о механизме добавления новой записи в базу данных, через грид на форме, которую вызвала главная форма.
Вот пользователь ввел значения и переходит на новую запись/нажимает кнопу сохранить. В моем случае происходит куча всяких телодвижений: записывается инфа в базу, потом она оттуда вынимается для того чтобы получить ключи сгенерированые СУБД, потом заполняется сам грид и по мелочи еще проц инфу дергает туда сюда. В результате нагромождается целый вагон с прицепчиком источников ошибок, да и результат этих сбоев в логике может быть самый разный.
Если я все правильно понял, то я беру этот логически оформленный кусочек кодов (добавление записи через грид на форме вызванной из другой формы), анализирую его на предмет вероятных мест ошибок, потом каждое из найденных мест обрамляю обработчиком, и в тексте сообщения уведомляю пользователя о каком именно месте идет речь. В случае чего останавливаю выполнение программы. Пральна?
Сори за такие вопросы, просто совсем, что-то сиреневый туман..
...
Рейтинг: 0 / 0
Вопросы по структуре, организации и принципам кода в VB6->
    #36665237
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tutti-fruttiПральна?

Ну тут надо смотреть конкретно.

Можно (и это более правильно, но сложнее) каждой подозрительной функции делать обработчик ошибок, который во-первых сообщит (или не сообщит) юзеру о проблеме при выполнении какой-то операции. И возвращает "наверх" код состояния (типа выполнилась/не выполнилась). Вышестоящая функция тоже принимает решение (уже без всякого обработчика, просто ориентируясь на вернутый код состояния), сообщать (или не сообщать) пользователю об ошибке и что делать дальше. Наверно ты видел такие примеры, когда у тебя выдается на одну ошибку два-три сообщения: сначала "кончилось место на диске" (вложенная функция), потом "не удалось скопировать файл" (вышестоящая функция).

А можно просто обернуть в On Error самый верхний вызов, он и обработает все ошибки, возникшие ниже.
...
Рейтинг: 0 / 0
Вопросы по структуре, организации и принципам кода в VB6->
    #36665240
tutti-frutti
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
   
    RecursRecordSet1.Close
    Set RecursRecordSet1=Nothing
Я все врямя только лишь закрывал рекордсет, никогда его не уничтожал.
У меня в программе, для того ,чтобы не создавать в каждой функции новый рекордсет, используется Public рекордсет. В нужных местах я его открываю, работаю с ним, а потом закрываю.
Определяется и инициализируется ен у меня от так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Public db As Database
Public rstCustomers, rstCustomers2 As DAO.Recordset

Sub Main()
    Dim PathToBaseProject As String
    
    PathToBaseProject = App.Path & "\MainLib.mdb"
    Set db = OpenDatabase(PathToBaseProject)
...
End Sub

Я так понял ,что кильнуть его можно и нужно один раз при закрытии главного окна прграммы. Пральна?
...
Рейтинг: 0 / 0
Вопросы по структуре, организации и принципам кода в VB6->
    #36665245
tutti-frutti
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А по поводу рекордсетов для рекурсивных функций понял, сейчас поправлю код. Я для именно рекурсивных функций инициализирую два автоматических (внутренних) рекордсета, они типа особенные и не паблик.
...
Рейтинг: 0 / 0
Вопросы по структуре, организации и принципам кода в VB6->
    #36665251
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tutti-fruttiУ меня в программе, для того ,чтобы не создавать в каждой функции новый рекордсет, используется Public рекордсет. В нужных местах я его открываю, работаю с ним, а потом закрываю.
Нифига не так.
Код: plaintext
Set RecursRecordSet2 = db.OpenRecordset(
создает НОВЫЙ рекордсет, а не открывает старый. И это никак не связано с Public
Держать неуничтоженный экземпляр закрытого рекордсета нет никакого смысла, это ничего не меняет, зато иногда приводит к глюкам. В общем, после Close делай =Nothing.

И еще. Такой подход чреват логическим глюком. Вот работаешь ты с глобальным рекордсетов в какой-то функции. Потом вызываешь вложенную функцию, которая тоже его использует. Ну и понимаешь, к чему это приведет.
Если глобальный коннекшн держать смысл есть (и то только при условии, что он постоянно открыт), то рекордсет, к тому же еще и закрытый - нету.
...
Рейтинг: 0 / 0
Вопросы по структуре, организации и принципам кода в VB6->
    #36665253
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tutti-fruttiА по поводу рекордсетов для рекурсивных функций понял, сейчас поправлю код. Я для именно рекурсивных функций инициализирую два автоматических (внутренних) рекордсета, они типа особенные и не паблик.
Ну как я уже сказал выше - паблик рекорсет и не нужен.
...
Рейтинг: 0 / 0
Вопросы по структуре, организации и принципам кода в VB6->
    #36665256
tutti-frutti
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro , спасибо! Сейчас заварю кофе и буду размалывать глыбы мыслей и догадок которыми меня в очередной раз засыпало с Вашей легкой руки:)
...
Рейтинг: 0 / 0
Вопросы по структуре, организации и принципам кода в VB6->
    #36665557
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tutti-frutti,

Я прошу прощения, что влажу в вашу высокоинтеллектуальную беседу, но скажите, милейшие, а нет ли в возможности в акцессе сделать что-то наподобии хранимой процедуры?
И если это можно сделать, то может проще сделать такую процедуру, что-бы она пробегалась по дереву и строила упорядоченный рекордсет для построения. Тогда вся задача сведётся к запросу рекордсета из процедуры и цикла по всем записям с построением дерева. И не будет нужды в отслеживании рекордсетов. :) Я так строю дерево данными из SQLServer'а

Кстати, вот здесь:
Код: plaintext
tvTreeView.Nodes.Add "@" & Parent, tvwChild, "@" & RecursRecordSet1!ID
Мне кажется удобнее было добавлять собаку после числа, тогда получение кода из выбранной ноды сведется к Val(tvTreeView.SelectedItem.Key).
Да и вообще я использую такую запись:
Код: plaintext
tvTreeView.Nodes.Add CStr(Parent), tvwChild, CStr(RecursRecordSet1!ID)
Так, доступ к ноде у меня получается сразу по коду, преобразованному в строку, без дополнительных телодвижений.
...
Рейтинг: 0 / 0
Вопросы по структуре, организации и принципам кода в VB6->
    #36665568
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос,

В принципе, безо всякой хранимки можено сделать запрос на базе UNION ALL и ORDER BY, который вернет пригодную для загрузки в дерево субстанцию. Но я пока не рискую предлагать это ТС - всему свое время....

Вот типовая загрузка моих деревьев:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Do Until tm.EOF
  On Error Resume Next
  If DeNull(tm("Parent")) = "" Then
    Set j = ls.Nodes.Add(, , tm("Key"), tm("Name"), CStr(tm("Icon")))
  Else
    Set j = ls.Nodes.Add(CStr(tm("Parent")), tvwChild, tm("Key"), tm("Name"), CStr(tm("Icon")))
  End If
  If Err =  0  Then
    j.Expanded = tm("Expanded") =  1 
    j.Tag = tm("Tag")
    If Not IsNone(tm("ForeColor")) Then j.ForeColor = tm("ForeColor")
  End If
  On Error GoTo  0 
  If ls.Nodes.Count =  1  Then j.Selected = True
  tm.MoveNext
Loop
...
Рейтинг: 0 / 0
Вопросы по структуре, организации и принципам кода в VB6->
    #36665577
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

А как юнионами? Нет! до завтра подумаю :)

А вот я строю дерево :)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Select(m_alias)
Go Top
This.Visible = .F.
o = This.Nodes
o.Clear
This.ImageList = Thisform.olecontrol1
Scan 
	If Alltrim(Str(code_top)) = '0'
		If read_only = .T. Then
			N = o.Add(,  1 , Transform(Code)+"_", Alltrim(Name),  5 ,  5 )
			N.ForeColor = Rgb( 127 ,  127 ,  127 )
		Else
			N = o.Add(,  1 , Transform(Code)+"_", Alltrim(Name),  2 ,  1 )
		Endif
	Else
		If read_only = .T. Then
			N = o.Add(Transform(code_top)+"_",  4 , Transform(Code)+"_", Alltrim(Name),  5 ,  5 )
			N.ForeColor = Rgb( 127 ,  127 ,  127 )
		Else
			N = o.Add(Transform(code_top)+"_",  4 , Transform(Code)+"_", Alltrim(Name),  2 ,  1 )
		Endif
	Endif
	N.Tag = Transform(Code)
Endscan
Правда на фокспро
...
Рейтинг: 0 / 0
25 сообщений из 180, страница 5 из 8
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Вопросы по структуре, организации и принципам кода в VB6->
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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