purebasic.info

PureBasic forum
Текущее время: Чт июл 19, 2018 1:02 am

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 11 ] 
Автор Сообщение
СообщениеДобавлено: Ср ноя 29, 2006 3:27 pm 
Не в сети
студент

Зарегистрирован: Ср ноя 29, 2006 3:14 pm
Сообщений: 7
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Всем привет! :D

Кто-нибудь пробовал делать табличное представление нескольких тысяч строк? Мои эксперименты показали весьма плачевную скорость заполнения элемента ListIconGadget. Кроме того, обращал ли кто внимание, на то, что при включении стиля WinXP у визуальных элементов пропадает рамка фокуса (мелкий штрих по контуру)? Знает ли кто, как эту неприятность решить?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср ноя 29, 2006 5:27 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Пн ноя 27, 2006 2:43 pm
Сообщений: 931
Откуда: Санкт-Петербург
Благодарил (а): 1 раз.
Поблагодарили: 12 раз.
Пункты репутации: 15
Я взял этот код:

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#MyWindow = 0 
 #MyGadget = 1
 If OpenWindow(#MyWindow,100,100,300,700,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"ListIcon Example")
   If CreateGadgetList(WindowID())
     ListIconGadget(#MyGadget,5,5,290,690,"Name",100,#PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection)
     AddGadgetColumn(#MyGadget,1,"Address",250)
     For x=1 To 10000
     AddGadgetItem(#MyGadget,-1,"Harry Rannit"+Chr(10)+"12 Parliament Way, Battle Street, By the Bay")
     AddGadgetItem(#MyGadget,-1,"Ginger Brokeit"+Chr(10)+"130 PureBasic Road, BigTown, CodeCity")
     Next x
     Repeat
       EventID = WaitWindowEvent()
     Until EventID = #PB_Event_CloseWindow And EventWindowID() = #MyWindow
   EndIf
 EndIf




на то чтобы отобразить 9999 строк у скомпилированной программы
уходит примерно 4-5 сек :D
версия 3.92
по моему результат нормальный

возможно есть ошибка в чем то другом или машина очень старая? :roll:


Последний раз редактировалось 22vlad Ср ноя 29, 2006 8:47 pm, всего редактировалось 1 раз.

Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср ноя 29, 2006 8:45 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Пн ноя 27, 2006 2:43 pm
Сообщений: 931
Откуда: Санкт-Петербург
Благодарил (а): 1 раз.
Поблагодарили: 12 раз.
Пункты репутации: 15
Если посмотреть на сам код то легче определить в чем дело
Можете показать часть кода где происходит заполнение элемента ListIconGadget?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср ноя 29, 2006 9:31 pm 
Не в сети
BackupUser
Аватар пользователя

Зарегистрирован: Ср ноя 29, 2006 9:29 pm
Сообщений: 1492
Откуда: Москва
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
[удалено как ошибочный пост]


Последний раз редактировалось Fdisk Сб авг 13, 2011 7:28 pm, всего редактировалось 1 раз.

Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 30, 2006 8:31 am 
Не в сети
студент

Зарегистрирован: Ср ноя 29, 2006 3:14 pm
Сообщений: 7
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Всем доброго утра! :lol:

Спасибо за ответы. Сразу скажу зачем мне это. По работе я в основном пишу программы для обработки баз данных и, когда нашёл этот PureBasic был просто в восторге от него и, конечно, захотел перевести свою деятельность на него. Как вы понимаете, в этом деле очень много табличных представлений данных.
Текст моей проги почти такой же (а по другому-то как? :wink: ), за исключением того, что после создания окна и гаджетов я отдельным циклом перебираю строки из SQL-запроса и заполняю ListIconGadget. Естественно открытие БД, запрос и прочее из секундомера исключаю. Мало того, если открыть окно Invisible и заполнять гаджеты, а потом показать окно, то заполнение происходит в несколько раз быстрее.
Но всё равно на моём ноуте C2.8/256М/40G 9000 строк заполняются 4 секунды - а это очень не хорошо :x
Ща найду эту прогу и выложу.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 30, 2006 8:50 am 
Не в сети
BackupUser
Аватар пользователя

Зарегистрирован: Ср ноя 29, 2006 9:29 pm
Сообщений: 1492
Откуда: Москва
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
[удалено как ошибочный пост]


Последний раз редактировалось Fdisk Сб авг 13, 2011 7:28 pm, всего редактировалось 1 раз.

Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 30, 2006 9:00 am 
Не в сети
студент

Зарегистрирован: Ср ноя 29, 2006 3:14 pm
Сообщений: 7
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Да уж :lol: Переписывался я с ними немного - хотел официально купить PureBasic. На такие вопросы они отвечают мгновненно. Только вот из нашей России перевести им деньги весьма проблематично. Но это уже другая тема.
Щас потестил свой пример на рабочем ПК - да, действительно, он мощнее и прога работает заметно (в разы) быстрее, но всё же C2.8/256М - тоже нормальный набор и хотелось бы, чтоб и на нём работало. Для VB есть ocx-контролы которые пережёвывают десятки тысяч записей за доли секунды на том же оборудовании. Я даже в своей проге тоже пробовал заполнение через массив, но ускорения не получил :cry:

;----------------------------------------------------------------
;Процедуры для подключения к БД
#ODBC_ADD_DSN = 1 ; Add Data source
#ODBC_CONFIG_DSN = 2 ; Configure (edit) Data source
#ODBC_REMOVE_DSN = 3 ; Remove Data source
#ODBC_NAME_DSN = "PureBasic_DSN" ; Название соединения

Procedure Makeconnection(Driver.s,strAttributes.s)
Result=OpenLibrary(1,"ODBCCP32.DLL")
If Result
lpszDriver.s=Driver
MyMemory=AllocateMemory(Len(strAttributes))
CopyMemory(@strAttributes,MyMemory,Len(strAttributes))
For l=1 To Len(strAttributes )
If PeekB(MyMemory +l-1)=Asc(";"):PokeB(MyMemory +l-1,0): EndIf
Next l
Result = CallFunction(1, "SQLConfigDataSource", 0,#ODBC_ADD_DSN,lpszDriver.s,MyMemory )
NewResult=SQLConfigDataSource_(0,#ODBC_ADD_DSN,lpszDriver.s,MyMemory )

FreeMemory(MyMemory)
CloseLibrary(1)
If Result
ProcedureReturn 1
EndIf
EndIf
EndProcedure

Procedure DeleteConnection(Driver.s,DSN.s)
Result=OpenLibrary(1,"ODBCCP32.DLL")
If Result
lpszDriver.s=Driver
strAttributes.s = "DSN="+DSN
Result = CallFunction(1, "SQLConfigDataSource", 0,#ODBC_REMOVE_DSN,lpszDriver.s,strAttributes )
CloseLibrary(1)
If Result
ProcedureReturn 1;MessageRequester("Info","DSN Delete",0)
EndIf
EndIf
EndProcedure
;----------------------------------------------------------------

#Window_0 = 0
#ListIcon_0 = 0

Procedure Open_Window_0()
; Здесь окно открывается Invisible
If OpenWindow(#Window_0, 216, 0, 602, 302, "PureLVSORT Test", #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_ScreenCentered | #PB_Window_Invisible)
If CreateGadgetList(WindowID(#Window_0))
ListIconGadget(#ListIcon_0, 5, 5, 590, 290, "Наименование препарата", 250)
EndIf
EndIf
EndProcedure

File$ = OpenFileRequester("Открыть БД Access", "C:\*.mdb", "Microsoft Access (*.mdb)|*.mdb", 0)
;File$ = "C:\TestDB.mdb"
If File$<>""
Result=Makeconnection("Microsoft Access Driver (*.mdb)","Server=; Description=БД для Purebasic MDB-ODBC;DSN="+#ODBC_NAME_DSN+";DBQ="+File$+";UID=;PWD=;")
Else
End
EndIf

If InitDatabase() = 0
MessageRequester("Ошибка", "Невозможно подключить БД! (ODBC v3 или выше отсутствует)", 0)
End
EndIf


Open_Window_0()
StartTime = ElapsedMilliseconds()

User$=""
Password$=""
RecCount=0
#Database=1
Result = OpenDatabase(#Database, #ODBC_NAME_DSN, User$, Password$)
If Result
Browse$="Select * from S_PREPAR" ; ИСПРАВЬТЕ ЗДЕСЬ ИМЯ ТАБЛИЦЫ
If DatabaseQuery(#Database, Browse$)
While NextDatabaseRow(#Database)
ColText$ = GetDatabaseString(#Database, 1)
AddGadgetItem(#ListIcon_0, -1, ColText$)
RecCount=RecCount+1
Wend
Else
MessageRequester("Ошибка", "Bad Query !", 0)
EndIf
EndIf

ElapsedTime = ElapsedMilliseconds()-StartTime
MessageRequester("Время", Str(ElapsedTime/1000), 0)
MessageRequester("Обработано строк", Str(RecCount), 0)

HideWindow(#Window_0, 0)

Repeat
Event = WaitWindowEvent()

Until Event = #PB_Event_CloseWindow

If Result
CloseDatabase(#Database)
EndIf
DeleteConnection("Microsoft Access Driver (*.mdb)",#ODBC_NAME_DSN)
End


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 30, 2006 9:43 am 
Не в сети
BackupUser
Аватар пользователя

Зарегистрирован: Ср ноя 29, 2006 9:29 pm
Сообщений: 1492
Откуда: Москва
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
[удалено как ошибочный пост]


Последний раз редактировалось Fdisk Сб авг 13, 2011 7:31 pm, всего редактировалось 4 раз(а).

Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 30, 2006 10:43 am 
Не в сети
студент

Зарегистрирован: Ср ноя 29, 2006 3:14 pm
Сообщений: 7
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Я бы и заплатил. Чё-й-то хочется честным стать :oops:
Просто уже делаю приличные проги на продажу, а оно нелицензионное и народ, да и сам уже переживаю и стесняюсь как-то. Но с нашими банками кашу не сваришь: то счет-фактуру требуют, то счет, то ещё чего-нибудь им подавай... Так нашел. А потом оказалось, что на нём серьёзных многооконных программ особо не попишешь - долго и непродуктивно. Так что и сэкономил.
А насчёт блокнота, в котором я что-то открываю, не понял ?.. :?:


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 30, 2006 10:56 am 
Не в сети
BackupUser
Аватар пользователя

Зарегистрирован: Ср ноя 29, 2006 9:29 pm
Сообщений: 1492
Откуда: Москва
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
[удалено как ошибочный пост]


Последний раз редактировалось Fdisk Сб авг 13, 2011 7:30 pm, всего редактировалось 1 раз.

Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Пропадает рамка фокуса
СообщениеДобавлено: Чт ноя 30, 2006 10:59 am 
Не в сети
студент

Зарегистрирован: Ср ноя 29, 2006 3:14 pm
Сообщений: 7
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Хочу повторить ещё один важный для меня вопрос: при включении стиля WinXP у визуальных элементов пропадает рамка фокуса (мелкий штрих по контуру)? Знает ли кто, как эту неприятность решить?

В примере GadgetAdvanced я заметил такую вещь: при включенном стиле WinXP, если перейти на TreeGadget и сдвинуться по нему, то рамка фокуса появляется и впредь присутствует на всех элементах. Похоже проблему можно решить каким-то действием, может быть послать после открытия окна SendMessage_ с неким хитрым параметром какому-то гаджету. Может здесь будет проходить опытный С-ник и подскажет ? :P


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 11 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB