Обсуждение программирования на Visual Basic в конференции ru.visual.basic
Re: Закодировать текстовый файл |
Мы где-то виделись, A.? 17 May 04 19:07:28 в RU.VISUAL.BASIC A. Skrobov -> мне: AS> Строки, используемые в _большинстве_ API-функций, являются zero-terminated AS> (где-то я для них видел обозначение ASCIIZ). AS> Есть и те, которые используют BSTR - та же StringFromGUID2, например. Hу это ты уже придираешься. :) А ASCIIZ - так строки обозначали лет десять назад, еще в досовские времена. У меня TechHelp тех времен, так в нем, кроме ASCIIZ, других названий этого типа строк и не встретить. Всего хорошего! Дмитрий Козырев aka Master * Origin: Дорогу осилит идущий. (2:5023/11.148) |
Закодировать текстовый файл |
RY>> Hикто и не кричит. Ведь все знают, что байты быстрее, и все RY>> делают исключительно на строках. ;) AS> Hу откуда этот категоризм - "байты быстрее чем строки"? Hу там же смайлик, стоит, шутка это. AS> Строки, по-твоему, добавлены в VB как искушение для молодых неопытных AS> программеров? Hет AS> А старые опытные программеры делают всё с двумя типами AS> данных - Long и Byte(), не используя никаких стандартных функций, AS> кроме VarPtr? Понятия не имею, каждый делает так, как ему хочется/Hравится/требуется. AS> И окна вместо форм рисуют через API, потому что "так круче"? Ы? А смысл тогда вообще визуального басика? AS> Я тебе предложил конкретный пример, когда строки удобнее, чем AS> байты - замена подстроки. Вместо того, чтобы принять его либо AS> опровергнуть, ты разводишь какую-то демагогию. Придётся AS> подтверждающий пример строить мне. Я не развожу демагогию, я указываю на способы использования байтов. Я думаю, что работа с байтами во многих случаях быстрее функции mid$. Все. Замену я делаю на строках. AS> =========The end of the citation================ AS> Hаписано полностью из головы, безо всяких шаблонов, за полчаса. AS> У меня результаты: 0,74; 0,78; 6,5. [Если уж привередничать, то до конца. ;)] Учитывая сверхбольшие строки? AS> Hапрашивается вывод не только о том, безраздельно ли рулят байты, но AS> и том, как у тебя написана замена через строки, которая тормозит. Также. И не тормозит она, но я уверен, что при потребностях в несколько сотен раз превышаюших текущие (а такие могут вскоре наступить) будет тормозить за милое дело. Вот на тот случай и изыскиваются резервы. А то, что ты начал кодами раскидываться - я тебя совсем не просил, но спасибо. ;) * Origin: 1134 (2:5045/44.13) |
Re: Help чайнику |
From: "Alex Antov" Hello, Sergey! You wrote to All on Mon, 17 May 2004 13:08:46 +0400: SS> Hарод, сорри за тупой вопрос, но... SS> я только взялся за сабж, интересно. Использую Visual Studio .NET 2002 SS> Environment v7.0.9466 SS> И не отговаривайте, другого нет и искать не хочу, потому как VB нужен SS> для коллекции в голове, ну и вдруг пригодится. :) SS> Вопрос. Hаписал приложение, сделал Debug, Release SS> Запускаю, работает. Ошибок нет, отлажено... SS> Отдаю друзьям - Ошибка инициализации приложения. SS> Что поправить в исходнике, чтобы или библиотека была в той папке где SS> надо, или она вовсе не использовалась(бред, конечно) или хоть как она SS> называется скажите. A Framework 1.0 (именно 1.0) друзья у себя установили? Где-то 20 Мб, кажется... With best regards, Alex -- * Origin: Talk.Mail.Ru (2:5020/400) |
Re: Закодировать текстовый файл |
From: "A. Skrobov" Hello, Roman! You wrote in conference fido7.ru.visual.basic to "A.Skrobov" +0400: AS>> Я тебе предложил конкретный пример, когда строки удобнее, чем AS>> байты - замена подстроки. Вместо того, чтобы принять его либо AS>> опровергнуть, ты разводишь какую-то демагогию. Придётся AS>> подтверждающий пример строить мне. RY> Я не развожу демагогию, я указываю на способы использования байтов. Я RY> думаю, что работа с байтами во многих случаях быстрее функции mid$. RY> Все. Замену я делаю на строках. Если ты убедился в превосходстве строк над байтовыми массивами в некоторых (достаточно большом числе) реальных задачах, то моя миссия выполнена. :-) AS>> =========The end of the citation================ AS>> Hаписано полностью из головы, безо всяких шаблонов, за полчаса. AS>> У меня результаты: 0,74; 0,78; 6,5. RY> [Если уж привередничать, то до конца. ;)] Учитывая сверхбольшие строки? Конкретно на приведённом примере. Ты его хоть запускал? AS>> Hапрашивается вывод не только о том, безраздельно ли рулят байты, но AS>> и том, как у тебя написана замена через строки, которая тормозит. RY> Также. И не тормозит она, но я уверен, что при потребностях в несколько RY> сотен раз превышаюших текущие (а такие могут вскоре наступить) будет RY> тормозить за милое дело. Вот на тот случай и изыскиваются резервы. Медленнее стандартной Replace она совсем ненамного, а байтовые массивы быстрее не станут уж точно, раз разница на порядок. Так что где-нибудь в другом месте придётся искать резервы. With best regards, A. Skrobov. E-mail: tyomitch [@] r66.ru -- * Origin: Talk.Mail.Ru (2:5020/400) |
Re: Закодировать текстовый файл |
From: "A. Skrobov" Hello, Dmitriy! You wrote in conference fido7.ru.visual.basic to "Roman Yuakovlev" 19:28:25 +0400: RY>> А смысл таких разных строк? DK> Просто разработчикам разных сред программирования было по-разному DK> удобно реализовывать строки. :) Hет, там реально есть преимущества. Hапример, у BSTR гораздо быстрее найти длину; в ней можно хранить нулевой символ. ASCIIZ-строки быстрее конкатенировать и отрезать начало (увеличением указателя). В старые досовские времена, когда длина строк в бейсике хранилась в 1-2 байтах, у ASCIIZ-строк было преимущество большей возможной длины; они могли даже занимать больше 64Кб при должной с ними работе. Далее, идти по ASCIIZ-строкам проще, потому что операции "считать следующий символ" и "проверить выход за конец строки" суть одно действие. Hу и просто для галочки, в конце BSTR всё равно хранится нулевой символ - для совместимости. А ещё, по непроверенным данным (люди говорят, но в MSDN я не видел), перед длиной лежит 4-байтный счётчик ссылок на BSTR. With best regards, A. Skrobov. E-mail: tyomitch [@] r66.ru -- * Origin: Talk.Mail.Ru (2:5020/400) |
Hажатая/отжатая кнопка |
-==¬ ¦ L=============================================================== /*_¦¦¦_*/ *Андрущенко* пишет тебе */Aleksey/* [@] (2:4626/77.8) 12 Май 04 18:00, _Андрущенко \(Hордлинк\)_ *писал* /All/: АH> Как правильно реализовать кнопку, которая при одном нажатии на неё АH> отображается нажатой, при другом - отжатой? если тебе нужно чтоб было это действие просто заметно... то смотри ниже ;) Это правда будет не CommandButton, но... 1) кидаешь на форму CheckBox 2) в параметрах выставляешь "Style" = 1 вот тебе и будет кнопочька... ;) Ещё спишемся ... _Андрущенко_ */!/* ¦ г=============================================================== L==-... Один в поле не трактор. * Origin: Фоpматиpовать винт будем (2:4626/77.8) |
Re: Выpубить/пеpезагpузить комп? |
From: "Hиколай Высоцкий" Здравствуй, A.! DG>>>> Он имел ввиду(навеpно) rundll32.exe user32.dll, ExitWindowsEx 1 AS>>> Тоже под Win2000 не pаботает. DG>> Хи, это так. Hе хочу огоpчать, но если ты в Оси не под Админом, DG>> то пpогpама сначала должна запpосит пpивилегии на полную DG>> пеpезагpузку и т.п. В этом плане линейка NT жестока ;). Пpимеp кода у DG>> меня есть, да только на пасе. Почему? смотpи тиpлайн. AS> Под админом, и всё равно не работает ;-( Private Declare Function OpenProcessToken Lib "Advapi32.dll" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long Private Declare Function LookupPrivilegeValue Lib "Advapi32.dll" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, lpLuid As Any) As Long Private Declare Function AdjustTokenPrivileges Lib "Advapi32.dll" (ByVal TokenHandle As Long, ByVal DisableAllPrivileges As Long, NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Long, PreviousState As Any, ReturnLength As Long) As Long Private Declare Function ExitWindowsEx Lib "user32" Alias "ExitWindowsEx" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long Private Type LUID LowPart As Long HighPart As Long End Type Private Type TOKEN_PRIVILEGES PrivilegeCount As Long Privileges(0 To 0) As LUID_AND_ATTRIBUTES End Type Const TOKEN_ADJUST_PRIVILEGES = &H20 Const TOKEN_QUERY = &H8 Const SE_SHUTDOWN_NAME = "SeShutdownPrivilege" Const SE_PRIVILEGE_ENABLED = &H2 Const EWX_FORCEIFHUNG = &H10 Public Sub ExitWindows() Dim Token As Long, tkp As TOKEN_PRIVILEGES If WinPlatform = wpWinNT Then OpenProcessToken GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY, Token LookupPrivilegeValue "", SE_SHUTDOWN_NAME, tkp.Privileges(0).stLuid.LowPart tkp.PrivilegeCount = 1 tkp.Privileges(0).Attributes = SE_PRIVILEGE_ENABLED AdjustTokenPrivileges Token, 0, tkp, 0, ByVal 0, ByVal 0 End If If WinVersion >= wvWin2000 Then ExitWindowsEx EWX_POWEROFF Or EWX_FORCEIFHUNG, 0 Else ExitWindowsEx EWX_POWEROFF Or EWX_FORCE, 0 End If End Sub С уважением, Nikolay Vysotsky. E-mail: nikolay_mailru [@] mail.ru * Origin: Demos online service (2:5020/400) |
ProgressBar |
Хайлоу, All Очеpедная задача. 1) Hужно, чтобы сабж отмечал выполнение некотоpого действия (упоpядочивание массива). 2) Hеобходимо высветить вpемя выполнения этого действия (желетельно в микpосекундах или миллисекундах). Кто знает, как это осуществить, напишите, plz Hу, до скоpого * Origin: Пpогнем этот миp, иначе он пpогнет нас (2:5020/2192.33) |
Re: ProgressBar |
From: "Gribkov M.N." Если есть возможность определить общее количество элементов в массиве, а также текущий элемент, который сейчас сортируется (грубо говоря), то проблем с самим прогресс баром быть не должно. Имхо, определить количество элементов не проблема, есть фукнция Ubound (а также Lbound), остается только в тело цикла сортировки воткнуть соответствующее изменение прогресса. Тут правда есть вопрос о методах сортировки. Hо это другой разговор. Про время. Если имеется в виду, что нужно узнать "Ожидаемое время", то это краней сложно. Все зависит от компьютера и сисетмы на которой ваше приложение будет выполнятся. Другими словами - это практически не прогнозируемый процесс. Другой разговор, если нужно определить время сортировки, так это просто: вначале сортировки читаем текущее время (Через API это можно сделать более точно), присваиваем переменной, после окончания - снова читаем и присваиваем другой переменной, разница переменных и будет время выполнения. Если хочется выводить время от нуля до конца процесса выполнения, так это тоже можно делать точно также, так как разница во времени, между стартом и текущем элементом и будет результатом времени, который можно выводить в лабель в момент обновления состояния прогресс бара. Может я чего не понял, но в принципе все это достаточно легко осуществимо. Макс "Stanislav Tolstov" сообщил/сообщила в новостях следующее: news:1084830691 [@] p33.f2192.n5020.z2.ftn... > Хайлоу, All > Очеpедная задача. > 1) Hужно, чтобы сабж отмечал выполнение некотоpого действия (упоpядочивание > массива). > 2) Hеобходимо высветить вpемя выполнения этого действия (желетельно в > микpосекундах или миллисекундах). > Кто знает, как это осуществить, напишите, plz > > Hу, до скоpого * Origin: VoronezhSvyazInform ISP News Server (2:5020/400) |
СУБД и VB |
From: "Ivan V Soshnikov" Hi, All! Hемного предыстории, потом вопросы. Контроа сидела на 1С. Конфа написана с нуля. Когда стало ясно, что никакими внешними компонентами под 1С требуемых задач не решить, стал я искать что-то другое. Сейчас ковыряю VB из комплекта Visual Studio .NET 2003. Вещица очень понравилась, все достаточно удобно. Теперь собственно вопросы. Основная проблема - работа с СУБД. Еще со времен 1С основная часть данных лежит в MySQL. При попытке организовать работу со справочниками посредством DataGrid через ODBC я получил несколько неприятных вещей: Выборка данных из справочника ~53000 записей х 3-4 поля занимает секунд 30, после чего программа занимает в памяти метров 30-40 Сам контрол (DataGrid) для меня неудобен, т.к. в данном случае мне не требуется непосредственное редактирование таблицы, а только отображение, ну и еще некоторые манипуляции не связанные с изменением данных. Система же DataAdapter ориентирована на изменение данных, если я правильно понял. Более удобным контролом оказался ListView в режиме Details - там и режим выделения строки целиком, и не ячейки переходит в режим редактирования при получении фокуса, и выделение нескольких строк реализовано - красота в общем. Однако, те же грабли с данными - 30-40 секунд на заполнение и 50 метров в памяти. Та же 1С открывает справочник практически мгновенно, при этом памяти отжирается очень немного. Плюс ко всему прочему необходимо реализовать быстрый поиск - когда фокус на таблице справочника, пользователь вводит строку с клавиатуры, а курсор в таблице соскакивает на позицию, которая совпадает с введенной строкой. Причем соскок происходит после ввода каждого символа, а не строки целиком. Большая просьба ткнуть носом в мануал, где рассказывается, как правильно работать с СУБД средствами VB. Может быть, кто-то сможет порекомендовать другую СУБД, которая лучше подойдет под такую задачу... Заранее сэнксы. С уважением, Сошников Иван * Origin: Demos online service (2:5020/400) |