Сначала сортировка из блокнота, а потом вывод...

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Павлуша
Не годный к строевой
Не годный к строевой
Аватара пользователя
 
Сообщения: 884
Зарегистрирован: 01.01.2005 (Сб) 19:31
Откуда: Смотря кто?

Сначала сортировка из блокнота, а потом вывод...

Сообщение Павлуша » 03.03.2006 (Пт) 23:48

Привет всем!
Трабла вот в чем:
есть лист-бокс, в который выводится содержимое блокнота, потом, при щелчке на какой-нибудь элемент лист-бокса, должно выводиться на лейбл описание этого элемента.
Описание хранится в другом блокноте.
Кто сможет, помогите реализовать. Желательно код и комменты :oops:
Заранее спасибо.
Пошли все на фиг, я фея! :flower:

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 04.03.2006 (Сб) 17:13

Описание хранится в другом блокноте
Это как? :lol: Насколько я понял ты говоришь про два файла, в N-ной сторчке первого храниться значение, а в N-ной второго храниться описание, так?
Тебе нужно считывать строчки из второго файла в массив, а при клике в ListBoxe выводить соответствующий элемент массива на Label...
А я все практикую лечение травами...

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 04.03.2006 (Сб) 17:14

выводится содержимое блокнота
Или все-таки работа не с файлами, а именно с блокнотом?
А я все практикую лечение травами...

Павлуша
Не годный к строевой
Не годный к строевой
Аватара пользователя
 
Сообщения: 884
Зарегистрирован: 01.01.2005 (Сб) 19:31
Откуда: Смотря кто?

Сообщение Павлуша » 04.03.2006 (Сб) 17:36

Twister писал(а):
Описание хранится в другом блокноте
Это как? :lol: Насколько я понял ты говоришь про два файла, в N-ной сторчке первого храниться значение, а в N-ной второго храниться описание, так?
Тебе нужно считывать строчки из второго файла в массив, а при клике в ListBoxe выводить соответствующий элемент массива на Label...

Twister
Работа именно с блокнотами.
ты совершенно правильно понял. только вот так надо:
в N-ной сторчке первого блокнота храниться значение, а в N-ной второго блокнота храниться описание
Пошли все на фиг, я фея! :flower:

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 04.03.2006 (Сб) 17:44

Понял. Дома поколдую мал-мал, если что, потом код дам...
А я все практикую лечение травами...

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 04.03.2006 (Сб) 17:46

А что сам попробовать не хочешь? :wink:
А я все практикую лечение травами...

Павлуша
Не годный к строевой
Не годный к строевой
Аватара пользователя
 
Сообщения: 884
Зарегистрирован: 01.01.2005 (Сб) 19:31
Откуда: Смотря кто?

Сообщение Павлуша » 04.03.2006 (Сб) 17:47

Twister
жду... спасибо!
Пошли все на фиг, я фея! :flower:

Павлуша
Не годный к строевой
Не годный к строевой
Аватара пользователя
 
Сообщения: 884
Зарегистрирован: 01.01.2005 (Сб) 19:31
Откуда: Смотря кто?

Сообщение Павлуша » 04.03.2006 (Сб) 22:17

Twister
а сам не знаю как... недостаточно мозгов...
просто мне проще учиться, читая чужой код.
Пошли все на фиг, я фея! :flower:

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 06.03.2006 (Пн) 12:12

Ну вот смотри. Кидаешь на форму кнопку Command1 и текстовое поле txtHandle. Потом добавь следующий код:
Код: Выделить всё
Option Explicit
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long
Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
Const WM_GETTEXT As Long = &HD
Const WM_GETTEXTLENGTH As Long = &HE
Const GW_CHILD As Long = 5
Const GW_HWNDNEXT As Long = 2
Dim bArr() As Byte, Strings() As String

Private Sub Command1_Click()
Dim hW As Long, i, i1, j As Integer
hW = Val(txtHandle)
hW = GetWindow(hW, GW_CHILD)
hW = GetWindow(hW, GW_HWNDNEXT)
ReDim bArr(SendMessage(hW, WM_GETTEXTLENGTH, 0, 0))
SendMessage hW, WM_GETTEXT, UBound(bArr) + 1, bArr(0)
ReDim Strings(1 To 1)
j = 0
For i = 0 To UBound(bArr)
    If bArr(i) = 13 Or bArr(i) = 0 Then
        ReDim Preserve Strings(1 To UBound(Strings) + 1)
        For i1 = j To i - 1
            Strings(UBound(Strings)) = Strings(UBound(Strings)) + Chr(bArr(i1))
        Next
        j = i + 2
    End If
Next
'Вывод результата
For i = 1 To UBound(Strings())
    MsgBox Strings(i)
Next
End Sub
В текстовое поле нужно ввести хэндл главного окна Блокнота. По нажатию на кнопку массив Strings заполниться строчками из блокнота. Думаю сделать твою задачу, имея этот код не составит труда...
А я все практикую лечение травами...

CORBA
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 179
Зарегистрирован: 22.11.2003 (Сб) 13:41
Откуда: Ukraine-Crimea-Feodosia

Сообщение CORBA » 06.03.2006 (Пн) 15:28

Однако специфичная задача :), вот только для чего этот геммор никак не могу понять.
У каждой сложной задачи есть множество простых для понимания, но неправильных решений.

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 06.03.2006 (Пн) 19:51

Кстати, код писал в попыхах - он получился достаточно кривой и неоптимизированный. Если это тебя не устроит, могу доделать...
А я все практикую лечение травами...

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 07.03.2006 (Вт) 14:17

Вот, держи. Пофиксил баги:
Код: Выделить всё
Option Explicit
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long
Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
Private Declare Function GetClassName Lib "user32.dll" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Const WM_GETTEXT As Long = &HD
Const WM_GETTEXTLENGTH As Long = &HE
Const GW_CHILD As Long = 5
Const GW_HWNDNEXT As Long = 2
Dim bArr() As Byte, Strings() As String

Private Sub Command1_Click()
Dim hW As Long, i, i1, j, j1 As Integer, lpClassName As String * 256
hW = Val(txtHandle)
hW = GetWindow(hW, GW_CHILD)
GetClassName hW, lpClassName, 256
If Mid(lpClassName, 1, 4) <> "Edit" Then hW = GetWindow(hW, GW_HWNDNEXT)
ReDim bArr(SendMessage(hW, WM_GETTEXTLENGTH, 0, 0))
SendMessage hW, WM_GETTEXT, UBound(bArr) + 1, bArr(0)
If UBound(bArr) = 0 Then Exit Sub
ReDim Strings(1 To 1)
j = 0
For i = 0 To UBound(bArr)
    If bArr(i) = 13 Or bArr(i) = 0 Then
        For i1 = j To i - 1
            j1 = UBound(Strings)
            Strings(j1) = Strings(j1) + Chr(bArr(i1))
        Next
        If Not i = UBound(bArr) Then ReDim Preserve Strings(1 To UBound(Strings) + 1)
        j = i + 2
    End If
Next
'Вывод результата
For i = 1 To UBound(Strings())
    MsgBox Strings(i)
Next
End Sub
А я все практикую лечение травами...

Павлуша
Не годный к строевой
Не годный к строевой
Аватара пользователя
 
Сообщения: 884
Зарегистрирован: 01.01.2005 (Сб) 19:31
Откуда: Смотря кто?

Сообщение Павлуша » 07.03.2006 (Вт) 20:56

Спасибо!
Буду разбираться.!
Пошли все на фиг, я фея! :flower:

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 08.03.2006 (Ср) 17:49

ICQ писал(а):Привет Максим!
слухай, код, который ты дал. не пашет вообще. может чего-то не догоняю. сможешь добавить к нему комменты? просто он ничего не делает... ну саавсем ничего...((
Гм... все прекрасно работает, я тестировал не раз. Скорее всего ты задаешь не верный хэндл. Повторяю - необходимо задавать хэндл главного окна Блокнота - другие текстовые редакторы имеют другую структуру дочерних окон. Можешь скачать мой WnD Viewerи посмотреть - Блокнот должен иметь всего два дочерних окна, Edit и StatusBar (точное название не помню)...
А я все практикую лечение травами...

Павлуша
Не годный к строевой
Не годный к строевой
Аватара пользователя
 
Сообщения: 884
Зарегистрирован: 01.01.2005 (Сб) 19:31
Откуда: Смотря кто?

Сообщение Павлуша » 08.03.2006 (Ср) 20:57

Twister
тогда обясни популярно, а что ж такое хендл главного окна блокнота.

я делал так: вписывал вот что "D:\results\VB\dict\means.txt"
может не туда вписывал?
Пошли все на фиг, я фея! :flower:

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 08.03.2006 (Ср) 21:05

Павлуша
Ты вписывал в txtHandle вот то что ты сказал? :shock:
Если всё делать своими ручками, они скоро отвалятся !

Павлуша
Не годный к строевой
Не годный к строевой
Аватара пользователя
 
Сообщения: 884
Зарегистрирован: 01.01.2005 (Сб) 19:31
Откуда: Смотря кто?

Сообщение Павлуша » 08.03.2006 (Ср) 21:16

ну откровенно говоря да... а что? не туда? или не так.
ты имеешь ввиду вместо строк txtHandle надо вписывать? или еще куда-нибудь?[/code]
Пошли все на фиг, я фея! :flower:

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 08.03.2006 (Ср) 21:38

Ну вообще туда вписывается хэндл окна, а это число. Можно получить через FindWindow.
Да и сам подумай, что вернет Val(txtHandle) если там нет чисел? Правильно 0. :)
Если всё делать своими ручками, они скоро отвалятся !

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 09.03.2006 (Чт) 7:08

Павлуша
Да. Хэндл (по другому дескриптор) окна ищется через FindWindow. Именно так тебе предстоит искать хэндлы блокнотов, когда будешь делать готовую программу.
Что вписать в txtHandle? Открой WinSpy или мой WnDViewer, воспользуйся ручным поиском - перетащи лупу на главное окно блокнота. Ты получишь число - хэндл. Именно его нужно вписать в это текстовое поле.
А я все практикую лечение травами...

Павлуша
Не годный к строевой
Не годный к строевой
Аватара пользователя
 
Сообщения: 884
Зарегистрирован: 01.01.2005 (Сб) 19:31
Откуда: Смотря кто?

Сообщение Павлуша » 09.03.2006 (Чт) 15:36

Twister
Господи... как все сложно :lol:
прям системное программирование... :lol:
Пошли все на фиг, я фея! :flower:

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 09.03.2006 (Чт) 15:38

Павлуша
Да нет, всё достаточно просто :)
Если всё делать своими ручками, они скоро отвалятся !

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 09.03.2006 (Чт) 16:01

Павлуша, сообщи мне, разобрался ты или нет.
А я все практикую лечение травами...


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

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

    TopList  
cron