Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 | 3 | 4 |

 

  Вопрос: проблема с меню в mdi и отобр. текста в textbox Добавлено: 28.07.06 17:51  

Автор вопроса:  Dixon | ICQ: 262-393-953 
Начал изучать vb6 совсем недавно и решил написать простенький текстовый редактор с мнооконным интерфейсом. Но возникло несколько проблем.
1)когда в первый раз кликаешь по меню Правка, оно сразу закрывается и приложение становится не активным (теряет фокус). Вот код, который у меня выполняется при клике по меню Правка. Пробывал задокументировать отдельные части, даже всю процедуру! Та же проблема. Это только в первый раз, а дальше все идет нормально.
Private Sub mnuEdit_Click()
   
    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-сайт: gvin.net
 Профиль | | #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-сайт: hware.org.ua
 Профиль | | #3
Добавлено: 28.07.06 20:44
Для TextBox выставь шрифт Terminal или какой либо другой с одинаковой шириной символов.
Ну пришли... Глянем... Мыло в профиле.

Ответить

Номер ответа: 4
Автор ответа:
 Sacred Phoenix



ICQ: 304238252 

Вопросов: 52
Ответов: 927
 Профиль | | #4 Добавлено: 28.07.06 20:47
это наверняка не решит проблему, но и цель моего поста другая...
Private Sub mnuEdit_Click()
    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-сайт: houselab.narod.ru
 Профиль | | #8
Добавлено: 29.07.06 14:04
3)как узнать номер символа в строке, и номер столбца

- Честно говоря, не понял, что имелось в виду под номером столбца. Вот тебе код, который определяет начало и конец выделеной области в тексте.
На форму закинь Text1 & Text2.
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal lParam As Any) As Long
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.
Возьмём пример:

mnuEditPaste.Enabled = (Clipboard.GetText <> "";)

Сначала вычисляется результат сравнения 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
насчет первого пункта: попробывал не документировать, а вырезать процедуру, тогда все пашет норм, значит дело в самом ивенте, но хз что

Ответить

Страница: 1 | 2 | 3 | 4 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам