Страница: 1 | 2 | 3 | 4 |
Вопрос: проблема с меню в mdi и отобр. текста в textbox
Добавлено: 28.07.06 17:51
Автор вопроса: Dixon | ICQ: 262-393-953
Начал изучать vb6 совсем недавно и решил написать простенький текстовый редактор с мнооконным интерфейсом. Но возникло несколько проблем.
1)когда в первый раз кликаешь по меню Правка, оно сразу закрывается и приложение становится не активным (теряет фокус). Вот код, который у меня выполняется при клике по меню Правка. Пробывал задокументировать отдельные части, даже всю процедуру! Та же проблема. Это только в первый раз, а дальше все идет нормально.
Dim sClipboard As String
If SendMessage(mdiMain.ActiveForm.txtMain.hwnd, EM_CANUNDO, 0, 0) <> 0 Then
mnuEditUndo.Enabled = True
Else
mnuEditUndo.Enabled = False
End If
If mdiMain.ActiveForm.txtMain.SelLength = 0 Then
mnuEditCopy.Enabled = False
mnuEditCut.Enabled = False
mnuEditDelete.Enabled = False
Else
mnuEditCopy.Enabled = True
mnuEditCut.Enabled = True
mnuEditDelete.Enabled = True
End If
sClipboard = Clipboard.GetText
If sClipboard = "" Then
mnuEditPaste.Enabled = False
Else
mnuEditPaste.Enabled = True
End If
If frmSearch.txtSearch.Text = "" Then
mnuEditFindNext.Enabled = False
Else
mnuEditFindNext.Enabled = True
End If
End Sub
2)почему-то неверно отображается текст в textbox. Например, есть небольшой документ в котором информация представлена в виде таблицы, в три столбца. В обычном блокноте все отображается просто отлично. А у меня почему-то пропадают некоторые пробелы, из-за чего рушится весь вид таблицы
3)как узнать номер символа в строке, и номер столбца
Если у кого-нибудь есть время и желание помочь, могу скинуть исходники, чтоб помогли разобраться с траблой.
Заранее благодарен,
с уважением Диксон
Ответы
Всего ответов: 55
Номер ответа: 1
Автор ответа:
Alexandr.R
Вопросов: 9
Ответов: 115
Web-сайт:
Профиль | | #1
Добавлено: 28.07.06 18:16
какой понт в наше время начинать с vb6
Номер ответа: 2
Автор ответа:
Dixon
ICQ: 262-393-953
Вопросов: 8
Ответов: 78
Профиль | | #2
Добавлено: 28.07.06 19:01
на мой взгляд, это один из самых простых языков, с него проще начинать, но это был пост не по теме
Номер ответа: 3
Автор ответа:
Softer
ICQ: 203660381
Вопросов: 29
Ответов: 205
Web-сайт:
Профиль | | #3
Добавлено: 28.07.06 20:44
Для TextBox выставь шрифт Terminal или какой либо другой с одинаковой шириной символов.
Ну пришли... Глянем... Мыло в профиле.
Номер ответа: 4
Автор ответа:
Sacred Phoenix
ICQ: 304238252
Вопросов: 52
Ответов: 927
Профиль | | #4
Добавлено: 28.07.06 20:47
это наверняка не решит проблему, но и цель моего поста другая...
mnuEditUndo.Enabled = (SendMessage(mdiMain.ActiveForm.txtMain.hwnd, EM_CANUNDO, 0, 0) <> 0)
mnuEditCopy.Enabled = (mdiMain.ActiveForm.txtMain.SelLength <> 0 )
mnuEditCut.Enabled = (mdiMain.ActiveForm.txtMain.SelLength <> 0)
mnuEditDelete.Enabled = (mdiMain.ActiveForm.txtMain.SelLength <> 0)
mnuEditPaste.Enabled = (Clipboard.GetText <> ""
mnuEditFindNext.Enabled = (frmSearch.txtSearch.Text <> ""
End Sub
разницу в размере кода видишь? )
Номер ответа: 5
Автор ответа:
Dixon
ICQ: 262-393-953
Вопросов: 8
Ответов: 78
Профиль | | #5
Добавлено: 28.07.06 23:25
Спасибо Софтеру. Его вариант с заменой шрифта помог. Терминал не получился, т.к. вместо текста получалась абракадабра, как я понял этот шрифт досовский. Поставил Lucida Console и все стало ок.
2Sacred Phoenix:
такую запись кода я вижу в первый раз, не мог бы ты немного пояснить?
Номер ответа: 6
Автор ответа:
Dixon
ICQ: 262-393-953
Вопросов: 8
Ответов: 78
Профиль | | #6
Добавлено: 28.07.06 23:40
софтер, не могу тебе отослать, сервер отправляет мне отчет об ошибке
Номер ответа: 7
Автор ответа:
Dixon
ICQ: 262-393-953
Вопросов: 8
Ответов: 78
Профиль | | #7
Добавлено: 29.07.06 11:35
одну проблему решили, ост. ещё 2
Номер ответа: 8
Автор ответа:
Серёга
ICQ: 262809473
Вопросов: 17
Ответов: 561
Web-сайт:
Профиль | | #8
Добавлено: 29.07.06 14:04
- Честно говоря, не понял, что имелось в виду под номером столбца. Вот тебе код, который определяет начало и конец выделеной области в тексте.
На форму закинь Text1 & Text2.
Private Const EM_GETSEL = &HB0
Private Sub Text1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim tend As Long, tbeg As Long, ret As Long, wp As Long, lp As Long
ret = SendMessage(Text1.hwnd, EM_GETSEL, wp, lp)
tbeg = ret Mod 65536
ret = ret - tbeg
tend = ret / 65536
Text2.Text = "begin of sel - " + CStr(tbeg) + " | end of sel - " + CStr(tend)
End Sub
Напиши чё-нить в Text1 и выдели, результат - в Text2.
Номер ответа: 9
Автор ответа:
Dixon
ICQ: 262-393-953
Вопросов: 8
Ответов: 78
Профиль | | #9
Добавлено: 29.07.06 15:07
Серега меня немного не понял, объясню. Допустим есть тект:
1234567890
1234D67890
1234567890
В нем буква D находится во второй строке, в 5 столбце.
Вот я и хотел узнать, как можно выяснить где находится курсор в текстовом поле, т.е. после курсора стоит символ, и нужно узнать его строку и столбец. Пример можно посомтреть в виндвоском блокноте, когда включишь статусбар.
Номер ответа: 10
Автор ответа:
Sacred Phoenix
ICQ: 304238252
Вопросов: 52
Ответов: 927
Профиль | | #10
Добавлено: 29.07.06 15:33
2 Серега: проще так: идёшь в блокнот, показываешь строку состояния. Видишь что-то вроде "Стр 1, стлб 1". Вот те номера строки и столбца )
2 Dixon: фишка в следующем: все св-ва, которые ты менял в своём обработчике, булевские, т.е. могут иметь только два значения: True или False. Ты сначала проверял то-то, и, в зависимости от результата сравнения, присваивал св-вам True или False.
Возьмём пример:
Сначала вычисляется результат сравнения Clipboard.GetText c пустой строкой. Результат присваивается булевому св-ву .Enabled. Т.е. св-ву .Enabled присваивается True, если в буфере есть текст, а если его нет, присваивается False.
ЗЫ. Надеюсь, понятно написал...
Номер ответа: 11
Автор ответа:
Sacred Phoenix
ICQ: 304238252
Вопросов: 52
Ответов: 927
Профиль | | #11
Добавлено: 29.07.06 15:34
2 Серёга: а что, .SelStart и .SelLength уже не модно?
Номер ответа: 12
Автор ответа:
Dixon
ICQ: 262-393-953
Вопросов: 8
Ответов: 78
Профиль | | #12
Добавлено: 29.07.06 16:47
и еще вопросик, как узнать, когда юзер поставил курсор в текстовом поле в другое место?
Номер ответа: 13
Автор ответа:
Dixon
ICQ: 262-393-953
Вопросов: 8
Ответов: 78
Профиль | | #13
Добавлено: 29.07.06 16:49
спасибо священному фениксу за объяснение , код стал намного короче
Номер ответа: 14
Автор ответа:
Dixon
ICQ: 262-393-953
Вопросов: 8
Ответов: 78
Профиль | | #14
Добавлено: 29.07.06 16:58
и еще вопросик, как узнать, когда юзер поставил курсор в текстовом поле в другое место?
Сам дотумкал , просто код написал в ивентах MouseUp и KeyUp
Номер ответа: 15
Автор ответа:
Dixon
ICQ: 262-393-953
Вопросов: 8
Ответов: 78
Профиль | | #15
Добавлено: 29.07.06 17:28
насчет первого пункта: попробывал не документировать, а вырезать процедуру, тогда все пашет норм, значит дело в самом ивенте, но хз что