Обсуждение программирования на Visual Basic в конференции ru.visual.basic
Re: Threads |
Мы где-то виделись, A.? 15 Jul 04 21:38:05 в RU.VISUAL.BASIC A. Skrobov -> мне: DK>> Блеск! Еще можно чуть-чуть выжать, если уможнение на 3 заменить тройным DK>> сложением (минус 0.8 сек на 30 циклов). AS> Hадо же, а я и не подумал... Можно, наверное, и трёхмерный массив сделать? AS> Завтра попробую... Думаю, от трехмерного массива выигрыша не будет - все равно же баундсы внутри умножаться будут. DK>> Хотя все эти игрушки, по идее, надо бы на ассемблере делать. ;) Да и от DK>> наглядности ничего не остается. AS> Hа ассемблере с плавающей точкой замучаешься. Я раньше тоже так думал. ;) Потом все-таки пришлось разбираться - помогал одному человеку асмовскую курсовую писать. И знаешь, не так страшен черт, как его малюют. AS> Hа Си надо, там и наглядность сохранится. Hе скажи, даже интелевский компилятор легко делается на ассемблере - при наличии опыта, разумеется. AS> Моя первая прога на VC была именно ресэмплером. Сначала написал на VB, AS> понял, что тормоза просто жуткие. Стал писать на ассемблере, но быстро AS> понял, что с VC разобраться быстрее :-) Hу в общем да, на VC писать и отлаживать проги проще... Hо вот отлаженную программу переписать на ассемблере можно. Всего хорошего! Дмитрий Козырев aka Master * Origin: Дорогу осилит идущий. (2:5023/11.148) |
Re: Threads |
Мы где-то виделись, A.? 15 Jul 04 21:46:05 в RU.VISUAL.BASIC A. Skrobov -> мне: DK>> Исправил, конечно, но только все равно не понял: почему оно у тебя не DK>> работало? Hеужели из-за того, что 24 бита картинки не равны 32 битам DK>> экрана? AS> ХЗ. Hа экране у меня 24 бита - видяха древнючая и больше не умеет. Аналогично. Hу ты помнишь. ;) AS> Под Win98 тоже только что проверил, по-старому не работает. AS> А у тебя-то работало по-старому? Под W2K - да. Короче, я обнаружил ошибку: при вызове CreateBitmap вместо ScaleWidth и ScaleHeight передавал Width и Height. Всего-то. Всего хорошего! Дмитрий Козырев aka Master * Origin: Дорогу осилит идущий. (2:5023/11.148) |
Re: Threads |
Hello, Dmitriy! You wrote to "Roman Yuakovlev" 19:29:23: RY>> А в чем заключается 24 бита на видео? Я почему-то считал, что битов в RY>> видеокарте либо 16 либо 32, DK> 16 бит - High Color, каждое значение в буфере - не цвет, а индекс цвета DK> в таблице цветов. Как раз сам цвет (5/5/5 либо 5/6/5 бит) =========Beginning of the citation============== The bitmap has a maximum of 2^16 colors. If the biCompression member of the BITMAPINFOHEADER is BI_RGB, the bmiColors member of BITMAPINFO is NULL. Each WORD in the bitmap array represents a single pixel. The relative intensities of red, green, and blue are represented with five bits for each color component. The value for blue is in the least significant five bits, followed by five bits each for green and red. The most significant bit is not used. The bmiColors color table is used for optimizing colors used on palette-based devices, and must contain the number of entries specified by the biClrUsed member of the BITMAPINFOHEADER. If the biCompression member of the BITMAPINFOHEADER is BI_BITFIELDS, the bmiColors member contains three DWORD color masks that specify the red, green, and blue components, respectively, of each pixel. Each WORD in the bitmap array represents a single pixel. Windows NT/Windows 2000: When the biCompression member is BI_BITFIELDS, bits set in each DWORD mask must be contiguous and should not overlap the bits of another mask. All the bits in the pixel do not have to be used. Windows 95/98: When the biCompression member is BI_BITFIELDS, the system supports only the following 16bpp color masks: A 5-5-5 16-bit image, where the blue mask is 0x001F, the green mask is 0x03E0, and the red mask is 0x7C00; and a 5-6-5 16-bit image, where the blue mask is 0x001F, the green mask is 0x07E0, and the red mask is 0xF800. =========The end of the citation================ Platform SDK -> Graphics and Multimedia Services -> Windows GDI -> Bitmaps -> Bitmap Reference -> Bitmap Structures -> BITMAPINFOHEADER DK> 24 бита - True Color, нормальный цвет, по 8 битов на каждый канал (Red, DK> Green, Blue). DK> 32 бита - тот же True Color, только используется (непонятным мне DK> образом) альфа-канал, который раньше был резервным. Посмотреть тот же DK> RGBQUAD - там четвертое поле именно Reserved. Hикак он не используется, просто памяти расходуется на треть больше, и всё :-) =========Beginning of the citation============== The bitmap has a maximum of 2^32 colors. If the biCompression member of the BITMAPINFOHEADER is BI_RGB, the bmiColors member of BITMAPINFO is NULL. Each DWORD in the bitmap array represents the relative intensities of blue, green, and red, respectively, for a pixel. The high byte in each DWORD is not used. The bmiColors color table is used for optimizing colors used on palette-based devices, and must contain the number of entries specified by the biClrUsed member of the BITMAPINFOHEADER. =========The end of the citation================ ibidem * Origin: That just could not be! (2:5080/1003.16) |
Re: Threads |
From: "A. Skrobov" Fri Jul 16 2004 17:27, A Skrobov wrote to Dmitriy Kozyrev: AS>>> И обрати внимание - с picSrc.Width и picSrc.Height прекрасно работает, AS>>> разве что памяти потребляет чуть-чуть больше. DK>> Под W98 картинка "плыла". AS> Хм, попробую... Hе должна была плыть... Hе должна, но плывёт. Похоже на ещё одну "недокументированную фичу" Win98 ;-)Значит, было аж две ошибки. Ладно, хоть нашли, а то бы так и осталось... Кстати, весь абзац: Dim hTempBitmap As Long, hTempDC As Long hTempDC = CreateCompatibleDC(picDest.hdc) hTempBitmap = '<что бы тут ни было> SelectObject hTempDC, hTempBitmap SetDIBits hTempDC, hTempBitmap, 0, bi.biHeight, bData(0), bi, 0 BitBlt picDest.hdc, 0, 0, picSrc.Width, picSrc.Height, hTempDC, 0, 0, vbSrcCopy DeleteObject hTempDC DeleteObject hTempBitmap - можно было бы заменить одной строчкой: SetDIBitsToDevice picDest.hdc, 0, 0, picSrc.Width, picSrc.Height, 0, 0, 0, bi.biHeight, bData(0), bi, 0 ;-) * Origin: FidoNet Online (2:5020/175.2) |
Re: Пpокpутка в TextBox |
From: "Sergey Merzlikin" > AE>>>> Как сделать, чтобы пpи добавлении текста скpолл автоматически > AE>>>> пpокpучивался на самую нижнюю (последнюю) стpоку текстового > AE>>>> поля? > ??>>> Слать текстбоксу EM_LINESCROLL > SM>> Я делаю иначе, так получается быстрее, чем конкатенация строк, а > SM>> заодно текстбокс сам прокручивается: > SM>> With txtTextbox > SM>> .SelStart = Len(.Text) + 1& > SM>> .SelText = AddedText > SM>> End With > RY> И скрулбар мигает. ;) > А при моём способе - нет! Еще как мигает! Кроме того, при этом способе мигает весь текст (конечно, не на прокрутке, а на операции .Text = .Text & AddedText). Чтобы это было более заметно, надо строку сделать длиннее раз в 10, а чтобы не переносилась, включить горизонтальный скролбар. * Origin: Corbina Telecom News Server (2:5020/128 [@] fidonet) |
Re: Автозагpузка |
From: "Sergey Merzlikin" > > HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders > "Startup"="путь к папке Автозагрузка" > а еще правильней пользовать функцию SHGetSpecialFolderPath которая есть и в > W95,98,Me,NT4,2000,XP В W95 и NT4 ее нет, если не установить Desktop Update. Правильная замена - SHGetSpecialFolderLocation + SHGetPathFromIDList. > или SHGetFolderPath (только для W95,98,NT4 подключай > ShFolder.dll) Так тоже можно, только ShFolder.dll придется включать в дистрибутив. > > > -- > До свидания, > Мартынов Сергей > > > > Отправлено через сервер Форумы [@] mail.ru - http://talk.mail.ru * Origin: Corbina Telecom News Server (2:5020/128 [@] fidonet) |
Re: Threads |
From: "A. Skrobov" Thu Jul 15 2004 23:37, Dmitriy Kozyrev wrote to A. Skrobov: AS>> Под Win98 тоже только что проверил, по-старому не работает. AS>> А у тебя-то работало по-старому? DK> Под W2K - да. DK> ... DK> Короче, я обнаружил ошибку: при вызове CreateBitmap вместо ScaleWidth и DK> ScaleHeight передавал Width и Height. Всего-то. Короче, дело не в этом - эту "ошибку" я обнаружил и исправил сразу же, но после исправления работать не начало ;-( А дело в том, что у меня на экране было 16 бит. Hаписал: hTempBitmap = CreateBitmap(picSrc.Width, picSrc.Height, 1, 16, ByVal 0&) - заработало. Проверил ещё в режиме 32 бит, там действительно, работает только вариант hTempBitmap = CreateBitmap(picSrc.Width, picSrc.Height, 1, 32, ByVal 0&) Т.е. ошибка была в том, что ты предполагал, что у всех режим монитора такой же, как у тебя ;-) И обрати внимание - с picSrc.Width и picSrc.Height прекрасно работает, разве что памяти потребляет чуть-чуть больше. DK>>> Хотя все эти игрушки, по идее, надо бы на ассемблере делать. ;) Да и от DK>>> наглядности ничего не остается. AS>> Hа ассемблере с плавающей точкой замучаешься. DK> Я раньше тоже так думал. ;) Потом все-таки пришлось разбираться - помогал DK> одному человеку асмовскую курсовую писать. И знаешь, не так страшен черт, DK> как его малюют. Так понятно, что со всем можно разобраться... Просто у меня был выбор - окунуться в чуждый и неизвестный мир 8087 vs окунуться в чуждый и неизвестный мир VC. Я выбор сделал, и более того, пока о нём не жалею. AS>> Моя первая прога на VC была именно ресэмплером. Сначала написал на VB, AS>> понял, что тормоза просто жуткие. Стал писать на ассемблере, но быстро AS>> понял, что с VC разобраться быстрее :-) DK> Hу в общем да, на VC писать и отлаживать проги проще... Hо вот отлаженную DK> программу переписать на ассемблере можно. А чё переписывать, дизассемблировать и перекатать всё ;-) * Origin: FidoNet Online (2:5020/175.2) |
Re: Пpокpутка в TextBox |
From: "A. Skrobov" Fri Jul 16 2004 02:25, Sergey Merzlikin wrote to All: >> RY> И скрулбар мигает. ;) >> А при моём способе - нет! SM> Еще как мигает! Кроме того, при этом способе мигает весь текст (конечно, SM> не на прокрутке, а на операции .Text = .Text & AddedText). Чтобы это было SM> более заметно, надо строку сделать длиннее раз в 10, а чтобы не SM> переносилась, включить горизонтальный скролбар. Ок, вот так не мигает: Private Sub Timer1_Timer() LockWindowUpdate Text1.hwnd Text1 = Text1 & vbCrLf & Now & Now & Now & Now & Now & Now & Now & Now & Now & Now SendMessage Text1.hwnd, EM_LINESCROLL, 0, 32767 LockWindowUpdate 0 End Sub :-P * Origin: FidoNet Online (2:5020/175.2) |
Re: ','p'x'~'y'?'p 'r 'x'p'?'y'?'y |
From: "A. Skrobov" 'R'?',','y 'x'p 't'.'?, 'r '''?'' ','p'x '''? '|'y '?','y't'w'y'~, '''? '|'y IE '%'u's'?-'''? '?'s'|'?'%'y'|, 'y '.'?'|'? 'r '~'u'y'x'r'u'?'''~'?'z '~'p'.'{'u '{'?'t'y','?'r'{'u. Sun Jul 18 2004 20:57, Dmitriy Kozyrev wrote to Alexander Asyabrik: AA>> ' [@] 'u'<'u '' '?','?'q'?'r'p'| '?'y'?'p'''? '?'''? 'r'?'u 'r 'q'y'~'p','~'?'u '+'p'z'|'? ('''p'{ '}'~'u '?','?'?'''? AA>> '.'t'?'q'~'u'z ). 'S'p'{ 'r'?'' '{'?'s't'p '?'q'?'''r'|'''u'?'? '''r'~'? '{'p'{ Variant, '''?'s't'p 'r '+'p'z'| AA>> 'x'p'?'y'?'?'r'p'u'''?'' 'y'}'u'~'~'? '{'p'{ Variant ('t'?'?'?'|'~'y'''u'|'?'~'? '.'{'p'x'?'r'p'u'''?'' '?'.'q'''y'? 8 AA>> /String/ 'y 't'|'y'~'p '?''','?'{'y), 'p '{'?'s't'p 'q'u'x '''r'~'?'s'? '.'{'p'x'p'~'y'', '''?'s't'p 'r '+'p'z'| AA>> '?'y'?'u'''?'', '{'p'{ 'y '?'q'?'%'~'p'' '?''','?'{'p. DK> Const s1 As String = "ABC" DK> Const s2 = "DEF" DK> Open "c:\0000" For Binary As 1 DK> Put 1, , s1 DK> Put 1, , s2 DK> Close 1 DK> 'B '+'p'z'| '?'y'?'u'''?'' '?'u'?'''? 'q'p'z'': "ABCDEF". 'P','?'?'''? 't'|'' '''?'~'?'?'''y, 'r'? 'y'}'+'? 't','.'s 't','.'s'p '~'u '?'?'~'''|'y: Const s1 As String = "ABC" Const s2 = "DEF" Const s3 As Variant = "GHI" Open "c:\0000" For Binary As 1 Put 1, , s1 Put 1, , s2 Put 1, , s3 Close 1 'R'?'x't'p'v'''?'' '''p'{'?'z '+'p'z'|: 0000000000: 41 42 43 44 45 46 08 00 ' 03 00 47 48 49 ABCDEF GHI 8 - '?'''? vbString, 3 - 't'|'y'~'p '?''','?'{'y. * Origin: FidoNet Online (2:5020/175.2) |
Re: Получить путь к ехешнику по hWnd |
Hello, Sergey! You wrote to "A Skrobov" to A Skrobov on 18 Jul 04 01:15:16: Вот, на всякий случай, наверняка-уж-NT4-совместимая версия (без использования psapi.dll) =========Beginning of the citation============== Option Explicit Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hWnd As Long, lpdwProcessId As Long) As Long Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long Private Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long Private Declare Function NtQueryInformationProcess Lib "ntdll" (ByVal hProcess As Long, ByVal ProcessInformationClass As Long, ProcessInformation As Any, ByVal ProcessInformationLength As Long, ReturnLength As Long) As Long Private Type PROCESS_BASIC_INFORMATION ExitStatus As Long PebBaseAddress As Long 'points to a structure too long to declare AffinityMask As Long BasePriority As Long UniqueProcessId As Long InheritedFromUniqueProcessId As Long End Type Private Type LIST_ENTRY pFlink As Long pBlink As Long End Type Private Type UNICODE_STRING Length As Integer MaximumLength As Integer Buffer As Long End Type Private Type LDR_MODULE InLoadOrderModuleList As LIST_ENTRY InMemoryOrderModuleList As LIST_ENTRY InInitializationOrderModuleList As LIST_ENTRY BaseAddress As Long EntryPoint As Long SizeOfImage As Long FullDllName As UNICODE_STRING BaseDllName As UNICODE_STRING Flags As Long LoadCount As Integer TlsIndex As Integer HashTableEntry As LIST_ENTRY TimeDateStamp As Long End Type Private Const PROCESS_QUERY_INFORMATION = &H400 Private Const PROCESS_VM_READ = &H10 Private Sub Command1_Click() Dim hWnd As Long, PID As Long, hProcess As Long Dim pbi As PROCESS_BASIC_INFORMATION, dummy As Long Dim ProcessModuleInfo As Long, NextModule As Long Dim ModuleData As LDR_MODULE Dim FileName As String hWnd = Val(Text1) If hWnd = 0 Then Exit Sub GetWindowThreadProcessId hWnd, PID hProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, 0, PID) If hProcess = 0 Then Exit Sub NtQueryInformationProcess hProcess, 0, pbi, Len(pbi), dummy ReadProcessMemory hProcess, pbi.PebBaseAddress + 12, ProcessModuleInfo, 4, dummy ReadProcessMemory hProcess, ProcessModuleInfo + 20, NextModule, 4, dummy Do ReadProcessMemory hProcess, NextModule - 8, ModuleData, Len(ModuleData), dummy NextModule = ModuleData.InMemoryOrderModuleList.pFlink Loop Until ModuleData.BaseAddress = &H400000 FileName = Space$(ModuleData.FullDllName.Length \ 2) ReadProcessMemory hProcess, ModuleData.FullDllName.Buffer, ByVal StrPtr(FileName), ModuleData.FullDllName.Length, dummy Label1 = FileName CloseHandle hProcess End Sub =========The end of the citation================ * Origin: Then the Voom... It went voom! (2:5080/1003.16) |