Страница: 1 | 2 |
Вопрос: Блокнот
Добавлено: 22.07.05 11:04
Автор вопроса: Nord
Киньте пожалуйста ктонить код что бы когда блокнот открывался курсор стоял в такой то строке такойто позиции
Например чтоб при нажатии на кнопку открывался блокнот а курсор стоял в 25 строке между 6 и 7 символом
Заране пасиб
Ответы
Всего ответов: 23
Номер ответа: 1
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #1
Добавлено: 22.07.05 11:14
Через оконные сообщения.
Номер ответа: 2
Автор ответа:
Nord
Вопросов: 15
Ответов: 28
Профиль | | #2
Добавлено: 22.07.05 11:16
Ни о чем не сказало!
Номер ответа: 3
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #3
Добавлено: 22.07.05 11:33
Тебе нужно сначала найти хендл окна редактирования в блокноте, а затем послать ему сообщения о смене выделения (EM_...) с спомощью функции SendMessage.
Номер ответа: 4
Автор ответа:
Nord
Вопросов: 15
Ответов: 28
Профиль | | #4
Добавлено: 22.07.05 11:35
Я не настолько крут ((
Номер ответа: 5
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #5
Добавлено: 22.07.05 11:48
Ну тогда ищи пример или жди когда другие помогут.
Как посылать сообщения окну редактирования можешь посмотреть здесь:
http://basicproduction.nm.ru/TxBxHlpr.rar
А искать хендл окна блокнота можно перебором всех окон или FindWindowEx. Привязаться можно к индентификатору процесса, возвращаемого функцией Shell.
Номер ответа: 6
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #6
Добавлено: 22.07.05 11:51
Тогда возьми SDK/MSDN и по индексу и по порядку:
FindWindow
(FindWindowEx + параметр названия класса "EDIT"/(EnumChildWindows + (GetClassName = "EDIT")
SendMessage + WM_SETCURSOR
Номер ответа: 7
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #7
Добавлено: 22.07.05 12:09
Да ладно, пусть лучше через SendKeys сделает, так доходчивее
Номер ответа: 8
Автор ответа:
Nord
Вопросов: 15
Ответов: 28
Профиль | | #8
Добавлено: 22.07.05 12:18
Через SendKeys У мя в файле 4800 строк как это интересно будет выполнятся ))
Номер ответа: 9
Автор ответа:
User Unknown
Вечный Юзер!
ICQ: uu@jabber.cz
Вопросов: 120
Ответов: 3302
Профиль | | #9
Добавлено: 22.07.05 12:24
Да лучше б свой написал с рич текст контролом... ей богу... а автоматизировать чего-то таким способом.. тем более блокнот - это крайне неблагодарно...
Номер ответа: 10
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #10
Добавлено: 22.07.05 12:29
Ну как, как... PageDown, KeyDown, End )))
Ты нашел с чем работать, блин. Блокнот
Номер ответа: 11
Автор ответа:
Nord
Вопросов: 15
Ответов: 28
Профиль | | #11
Добавлено: 22.07.05 12:36
Блокнот самая рульная софтина!!!
Простая до безобразия )
Ну млин скинте ктонить код!!!! :\ ПОЖАЛУЦТА
Номер ответа: 12
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #12
Добавлено: 22.07.05 13:16
Ну, можешь че-то типа этого
код формы
Option Explicit
Private Sub Command1_Click()
Dim CharIndex As Long
Dim CharInLine As Long
Dim LineIndex As Long
LineIndex = 1000 'Номер нужной строки
CharInLine = 5 'Номер нужного символа
CharIndex = SendMessage(hWindow, EM_LINEINDEX, LineIndex, 0) 'Номер первого символа нужной строки
SendMessage hWindow, EM_LINESCROLL, 0, LineIndex 'Скролим текст на нужную строку
SendMessage hWindow, EM_SETSEL, CharIndex + CharInLine, CharIndex + CharInLine 'Устанавливаем курсор на нужную строку и символ
End Sub
Private Sub Form_Load()
Dim mWnd As Long
mWnd = FindWindow(vbNullString, "WIN32API - Notepad"
EnumChildWindows mWnd, AddressOf EnumChildProc, ByVal 0&
End Sub
код модуля
Option Explicit
Declare Function EnumChildWindows Lib "user32" (ByVal hWndParent As Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Const EM_LINESCROLL = &HB6
Public Const EM_LINEINDEX = &HBB
Public Const EM_SETSEL = &HB1
Public hWindow As Long
Public Function EnumChildProc(ByVal hwnd As Long, ByVal lParam As Long) As Long
Dim strClass As String
strClass = Space$(255)
GetClassName hwnd, strClass, 255
If Left(strClass, 4) = "Edit" Then hWindow = hwnd
EnumChildProc = 1
End Function
В моем примере был открыть NotePad с файлом WIN32API.TXT, начальное положение курсора - в начале файла.
Номер ответа: 13
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #13
Добавлено: 22.07.05 13:20
Если нужно несколько раз позиционировать строку или позиционирование производится не сразу после открытия - то либо сначала ставь курсор в начало файла и делай скроллинг оттуда, либо получай текущую строку и делай поправку на нее.
Номер ответа: 14
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #14
Добавлено: 22.07.05 13:34
Если непонятно - то слегка измени код
код формы
Dim FirstLine As Long
FirstLine = SendMessage(hWindow, EM_GETFIRSTVISIBLELINE, 0, 0)
'..........
SendMessage hWindow, EM_LINESCROLL, 0, LineIndex - FirstLine
код модуля
Public Const EM_GETFIRSTVISIBLELINE = &HCE
Всё. И желательно чтобы у тебя ничего не было до этого выделено.
Номер ответа: 15
Автор ответа:
Nord
Вопросов: 15
Ответов: 28
Профиль | | #15
Добавлено: 22.07.05 16:10
Спасибо РАБОТАЕТ!!!