Появилась идея, не знаю, как реализовать!

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

Сообщение Serge Gavrilov » 30.10.2006 (Пн) 21:18

Хакер писал(а):
Dromok писал(а):а зачем такие сложности с текстбоксами? В WebBrowser есть режим редактирования. Где-то на форуме здесь это уже обсуждалось, непомню где. А подставлять текстбоксы не самая лучшая идея.


Да ну? Может быть этот режим, это абсолютно другой контрол? :lol:


Ну почему же, обычный WebBrowser Control
Код: Выделить всё
WebBrowser1.Document.designMode = "On"


Где WebBrowser1 - WebBrowser control

marvan
Бывалый
Бывалый
 
Сообщения: 269
Зарегистрирован: 22.06.2004 (Вт) 13:26
Откуда: Москва

Сообщение marvan » 31.10.2006 (Вт) 12:27

Давно хотел такую штуку заделать. Да мотивации небыло.
Однако, вот и мотивация подоспела:
Хакер писал(а):Абсурден весь топик. И надо попытаться наставить автора на путь истины. И дать ему понять, что для подсветки и редактирования кода надо юзеать RTB или CodeMax-ы или самодельные контролы, но никак не вэб броузеры.


Сразу предупреждаю. Это только пример реализации. Работает в одной строке и есть где оптимизировать его производительность.
Код: Выделить всё
'Редактор с подсветкой синтаксиса на основе WebBrowser

'References: Microsoft HTML Object Library
'Controls: Microsoft Internet Controls
'добавить на форму WebBrowser с именем WebBrowser1
'добавить на форму Timer1 с именем Timer

Option Explicit
    Private WithEvents mDiv As MSHTML.HTMLInputElement
    Private WithEvents mDoc As MSHTML.HTMLDocument
   
Private Sub Form_Load()
    Dim mStr As String
    Dim iDoc As MSHTML.IHTMLDocument
    Me.KeyPreview = True
    'загрузка простого документа
    WebBrowser1.Navigate "res://mshtml.dll/blank.htm"
    While WebBrowser1.Document Is Nothing
    'ждём создания документа
        DoEvents
    Wend
    Set iDoc = WebBrowser1.Document
        mStr = "<html><body>" & _
           "  <head><style type=""text/css"">" & _
           "    body {overflow-y: visible;}" & _
           "    span.keyword {color: #000080;}" & _
           "    span.remark {color: #008000;}" & _
           "  </style></head>" & _
           "  <SPAN id=""Line1"" style=""font-size: 8pt; font-family: Courier;""></SPAN>" & _
           "  <input name=txtFind id=Cursor type=""text"" tabindex=""1"" style=""position:absolute; " & _
           "   left:" & 10 & "px; " & _
           "   top:16px; width:1px; height:12px; z-index:1; " & _
           "   border: solid 1px #000000; background-color:#000000""></div>" & _
           "</body></html>"
    'меняем содержание всего документа
    iDoc.Write mStr
    'получаем элемент div по его идентифекатору
    Set mDiv = iDoc.All.cursor
    mDiv.focus
    mDiv.setActive
    Set mDoc = iDoc
End Sub

Private Sub mDiv_onfocusout()
    mDoc.parentWindow.event.cancelBubble = False
    mDoc.parentWindow.event.returnValue = False
End Sub

Private Sub mDiv_onpropertychange()
     mDiv.Style.Left = Len(mDiv.Value) * 8 + 10 & "px"
     mDoc.All.Line1.innerHTML = FormatCode(mDiv.Value)
End Sub

Private Sub Timer1_Timer()
    Static f As Boolean
    f = Not f
    mDiv.Style.BorderColor = IIf(f, "#000000", "#FFFFFF")
    mDiv.Style.Left = Len(mDiv.Value) * 8 + 10 & "px"
    mDiv.focus
    mDiv.setActive
End Sub

Private Function FormatCode(sCode As String) As String
    'Процедура форматирования кода
   
    Dim aStr(0 To 199) As String 'массив искомых слов
    Dim sCodeLen As Long 'длина входящей строки
    Dim mStrOut As String 'выходящая строка
    Dim mStrSub As String 'выделенная подстрока
    Dim mChr As String 'выделенный символ
    Dim mNum As Long 'текущая позиция
    Dim mNumOld As Long 'предыдущая позиция
    Dim bOk As Boolean 'признак обнаружения подстроки
    Dim i As Byte 'счётчик
    Dim arr1 As Variant
    Dim arr2 As Variant
               
    'массив ключевых слов
    arr1 = Array("#If", "#End", "#ElseIf", "#Else", "#Const", "Xor", "Write", _
       "WithEvents", "With", "Width", "While", "Wend", "Variant", _
       "Until", "Unknown", "Unlock", "Unload", "UBound", "TypeOf", _
       "Type", "True", "To", "Then", "Text", "Tab", "Sub", "String$", _
       "String", "StrComp", "Stop", "Step", "Static", "Spc", "Single", _
       "Shared", "Sgn", "Set", "Select", "Seek", "Scale", "RSet", _
       "RGB", "Return", "Resume", "Rem", "ReDim", "Read", "Randomize", _
       "Random", "RaiseEvent", "Put", "Public", "PSet", "Property", _
       "Private", "Print", "Preserve", "ParamArray", "Output", "Or", _
       "Optional", "Option", "Open", "On", "Object", "Null", "Nothing", _
       "Not", "Next", "New", "Name", "Module", "Mod", "MidB$", "MidB", _
       "Mid$", "Mid", "Me", "LSet", "Loop", "Long", "Lock", "Local", _
       "Load", "LINEINPUT", "Line", "Like", "Lib", "Let", "LenB", "Len", _
       "Left", "LBound", "Is", "Integer", "Int", "InStrB", "InStr", _
       "InputB$", "InputB", "Input$", "Input", "In", "Implements", _
       "Imp", "If", "GoTo", "GoSub", "Go", "Global", "Get", "Function", _
       "Friend", "FreeFile", "Format$", "Format", "For", "Fix", "False", _
       "F", "Explicit", "Exit", "Event", "Error$", "Error", "Erase", _
       "Eqv", "Enum", "EndIf", "End", "Empty", "ElseIf", "Else", "Each", _
       "Double", "DoEvents", "Do", "Dir$", "Dir", "Dim", "DefVar", "DefStr", _
       "DefSng", "DefObj", "DefLng", "DefInt", "DefDbl", "DefDec", "DefDate", _
       "DefCur", "DefByte", "DefBool", "Declare", "Decimal", "Debug", "Date$", _
       "Date", "Database", "Currency", "CVErr", "CVDate", "CVar", "CurDir$", _
       "CurDir", "CStr", "CSng", "Const", "Compare", "Close", "CLng", "Circle", _
       "CInt", "ChDir", "CDecl", "CDbl", "CDec", "CDate", "CCur", "CByte")
    'ограничение на размер массива, определяемого таким способом
    arr2 = Array("CBool", "Case", "Call", "ByVal", "Byte", "ByRef", "Boolean", _
       "Binary", "BF", "Base", "B", "Assert", "As", "Array", "Append", "Any", _
       "And", "Alias", "AddressOf", "Access", "Abs")

    For i = 0 To 178
        aStr(i) = arr1(i)
    Next
    For i = 0 To 20
        aStr(179 + i) = arr2(i)
    Next

    mNumOld = 0
    sCodeLen = Len(sCode)

    For mNum = 1 To sCodeLen 'перечисляем все символы входящей строки
        mChr = Mid$(sCode, mNum, 1) 'выделяем символ
        If mChr = " " Or mChr = vbCr Or mChr = vbLf Or mChr = "(" Or mChr = ")" _
           Or mChr = "," Or mNum = Len(sCode) Then

            If mChr = " " Then mChr = "&nb" & "sp;"
            'обнаружен разделитель слов
            mStrSub = Mid$(sCode, mNumOld + 1, mNum - mNumOld - 1) 'выделяем подстроку
            bOk = False

            For i = 0 To 199 'поиск подстроки
                If UCase$(mStrSub) = UCase$(aStr(i)) Then
                    mStrSub = aStr(i)
                    bOk = True
                    Exit For
                End If
            Next
           
            If bOk = True Then 'подстрока найдена
                mStrOut = mStrOut & "<span class=""keyword"">" & mStrSub & _
                                    "</span>" & mChr
            Else
                mStrOut = mStrOut & mStrSub & mChr
            End If
            mNumOld = mNum
        End If

        If mChr = Chr$(39) Then 'обнаружен коментарий
            mNum = InStr(mNum, sCode, vbCrLf)
            If mNum = 0 Then mNum = Len(sCode)
            mStrSub = Mid$(sCode, mNumOld + 1, mNum - mNumOld - 1) 'выделяем подстроку
            mStrOut = mStrOut & "<span class=""remark"">" & mStrSub & _
                                "</span>"
            mNumOld = mNum - 1
        End If

        If mChr = vbLf And Right$(mStrOut, 2) = vbCrLf Then
            mStrOut = Left$(mStrOut, Len(mStrOut) - 2)
            mStrOut = mStrOut & "&#" & "13"
        End If
    Next
    FormatCode = mStrOut

End Function

yaklit
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 129
Зарегистрирован: 09.09.2006 (Сб) 19:38

Сообщение yaklit » 31.10.2006 (Вт) 15:33

сам писал?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 31.10.2006 (Вт) 15:41

Ага :lol:
Ключевые слова, говоришь? :wink:
___________________________
Xor - оператор.
Width - свойство.
Variant - тип данных.
Unknown - ??? (вероятно имелось ввиду IUnknown)
Unload - просто функция.
UBound - тоже просто функция.
Text - ???
String - тип данных.
StrComp - функция.
Spc - функция.
Single - тип данных
Sgn - функция.
Scale - функция.
RGB - функция.
Randomize - функиця.
PSet" - Hidden Метод всех объектов, поддерживающиз графику внутри себя.
Or - оператор.
Object - тип данных.
Null - ну... в принципе это подтип.
Not - оператор.
Mod - оператор.
MidB$, MidB, Mid$, "Mid" - функции.
Long - тип данных.
Load - функция.
LINEINPUT - WHATITIS?
Line - hidden мембер.
Like - оператор.
LenB, Len - функции
Left - либо функция, либо свойство, но уж никак не кейворд.
Is - оператор.
Integer - типа данных.
Int - функция.
InStrB, InStr - функции.
Imp - оператор.
Go - куда?
FreeFile - функция.
Format$, Format - функция.
Fix - функция, как Int()
F - я знаю что краткость, сестра чья-то там, но не до такой же степени.
Error$ - функция.
Eqv - оператор.
Empty - подтип.
Double - тип данных.
DoEvents - функция.
Dir$, Dir - функции.
Decimal - ну, вообще это тип данных. Но где вы его видели в таком виде?
Currency - опять тип данных.
CVErr, CVDate, CVar - функции.
СurDir$, CurDir - функции.
CStr, CSng, CLng - фукнции.
Circle - Хайден метод.
CInt - функция.
ChDir - функция.
CDecl, CDbl, CDec, CDate, CCur, CByte - функции.
CBool - фукнция.
Byte - тип данных.
Boolean - тип данных.
Array - функция.
And - оператор.
AddressOf - оператор.
Abs - функция.
___________________________________________
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

marvan
Бывалый
Бывалый
 
Сообщения: 269
Зарегистрирован: 22.06.2004 (Вт) 13:26
Откуда: Москва

Сообщение marvan » 31.10.2006 (Вт) 16:06

Писал сам. Список ключевых слов не идеален, выдернут из VBA6.dll, где идёт открытым текстом именно в таком виде.
2 Хакер
эрудиция впечатляет.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 31.10.2006 (Вт) 16:12

Ну, жто всё равно не то. Вот в VB.NET IDE или в PHP Expert Editor 4.0
Вот там, да, настоящая подсветка. А здесь простая выделялка слов синим цветом. Причём бажная.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

marvan
Бывалый
Бывалый
 
Сообщения: 269
Зарегистрирован: 22.06.2004 (Вт) 13:26
Откуда: Москва

Сообщение marvan » 31.10.2006 (Вт) 17:23

Хакер писал(а):Ну, жто всё равно не то. Вот в VB.NET IDE или в PHP Expert Editor 4.0

А ни кто не претендует на лавры упомянутых редакторов.
Однако, я полностью поддерживаю начинание автора темы и уверен, что по возможностям редактор написанный на базе WebBrowser может получиться весьма продвинутым. Например сворачивание блоков кода, закладки, печать оносительно просто сделать с браузером, но не с RTF.
Хакер писал(а):Вот там, да, настоящая подсветка. А здесь простая выделялка слов синим цветом. Причём бажная.

Я не в курсе чем настоящая подсветка отличается от простой выделялки?

Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1667
Зарегистрирован: 17.06.2006 (Сб) 15:11

Сообщение Debugger » 31.10.2006 (Вт) 21:09

А вот и код. А при чём бажность? Вроде не глючит....

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 31.10.2006 (Вт) 23:24

Бажность, в RTE-5 при поптыке ввести комменты. В невозможности перейти на новую строчку.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 01.11.2006 (Ср) 10:05

уверен, что по возможностям редактор написанный на базе WebBrowser может получиться весьма продвинутым. Например сворачивание блоков кода, закладки, печать оносительно просто сделать с браузером, но не с RTF.
Рюшечки и бантики понавесить действительно просто, но непросто сделать главное - чтобы использование документа броузера при печати было таким же эргономичным, как какого-нибудь завалящего текстбокса. Ну, перемещение по тексту, копипейст и прочие прелести обычного ноутпада.
Лучший способ понять что-то самому — объяснить это другому.

NashRus
Постоялец
Постоялец
 
Сообщения: 388
Зарегистрирован: 18.03.2006 (Сб) 1:16

Сообщение NashRus » 01.11.2006 (Ср) 10:07

2Хакер, да что вы такое говорите, человек же написал, что это только ПРОТОТИП, показывающий принципиальную возможность, а вы про про какие то строчки.

2marvan, молодца.

Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1667
Зарегистрирован: 17.06.2006 (Сб) 15:11

Сообщение Debugger » 01.11.2006 (Ср) 10:13

Может, в холивары? "Можноли WB использовать как RTB?"
Кстати - ведь можно и всю прогу на WB заложить. Только отслеживать перемещение и ставить другой док. И всего.

И ещё: может быть, "настоящие" программы 50 программеров делает за 10 лет. Мы же не претендуем на их качество (подсветку)!?

marvan
Бывалый
Бывалый
 
Сообщения: 269
Зарегистрирован: 22.06.2004 (Вт) 13:26
Откуда: Москва

Сообщение marvan » 01.11.2006 (Ср) 11:06

Antonariy писал(а):Рюшечки и бантики понавесить действительно просто, но непросто сделать главное - чтобы использование документа броузера при печати было таким же эргономичным, как какого-нибудь завалящего текстбокса. Ну, перемещение по тексту, копипейст и прочие прелести обычного ноутпада.

Да, с редактированием будет не сложно, а очень сложно.
Даже простое позиционирование курсора для WB придётся писать с нуля. Тоже касается и контекстного меню.

Собственно, такой проект очень перспективен только как ASP приложение, а для редактирования кода уже понаписано достаточно прогамм на любой вкус и цвет.

Sergeant Pepper
Новичок
Новичок
 
Сообщения: 31
Зарегистрирован: 25.08.2006 (Пт) 8:49

Сообщение Sergeant Pepper » 01.11.2006 (Ср) 11:56

Antonariy писал(а):... но непросто сделать главное - чтобы использование документа броузера при печати было таким же эргономичным, как какого-нибудь завалящего текстбокса. Ну, перемещение по тексту, копипейст и прочие прелести обычного ноутпада.

Да нет в этом ничего сложного

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 01.11.2006 (Ср) 12:00

Да, с редактированием будет не сложно, а очень сложно.
Даже простое позиционирование курсора для WB придётся писать с нуля. Тоже касается и контекстного меню.
Интересно было бы посмотреть что и как получилось в этом направлении у google (не так давно он купил онлайновый текстовый редактор Writely) но сам "текстбокс", в котором происходит набор текста, находится в iframe, чей src ведет на url отличный от http://docs.google.com/, из-за чего документ iframe'а посмотреть невозможно - <Отказано в доступе>.

Sergeant Pepper, ну-ка покажи тут всем высший класс, до которого даже гуглу как от Бобруйска до Флориды.
Лучший способ понять что-то самому — объяснить это другому.

Sergeant Pepper
Новичок
Новичок
 
Сообщения: 31
Зарегистрирован: 25.08.2006 (Пт) 8:49

Сообщение Sergeant Pepper » 01.11.2006 (Ср) 12:15

Antonariy писал(а):Sergeant Pepper, ну-ка покажи тут всем высший класс, до
Если бы я был тщеславен, сейчас же бы все бросил и начал показывать :).
Будет свободное время, покажу. Функциональности блокнота вам хватит?
Последний раз редактировалось Sergeant Pepper 01.11.2006 (Ср) 12:21, всего редактировалось 1 раз.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 01.11.2006 (Ср) 12:18

Выдрал скрипт, который работает с этим ифреймом, щас почетайу
:twisted:

Гы, гугловцы называют этот редактор leftly.
Лучший способ понять что-то самому — объяснить это другому.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 01.11.2006 (Ср) 12:24

Sergeant Pepper писал(а):
Antonariy писал(а):Sergeant Pepper, ну-ка покажи тут всем высший класс, до
Если бы я был тщеславен, сейчас же бы все бросил и начал показывать :-)
Если бы не был, оставил бы мое замечание без внимания.
Sergeant Pepper писал(а):Функциональности вам хватит?
Минимальная функциональность - печать текста и навигация по оному. А так - равнение на гугл!
Лучший способ понять что-то самому — объяснить это другому.

Sergeant Pepper
Новичок
Новичок
 
Сообщения: 31
Зарегистрирован: 25.08.2006 (Пт) 8:49

Сообщение Sergeant Pepper » 01.11.2006 (Ср) 12:45

Antonariy писал(а):Минимальная функциональность - печать текста и навигация по оному.

Вы пробовали использовать Document.designMode = "On"?

Sergeant Pepper
Новичок
Новичок
 
Сообщения: 31
Зарегистрирован: 25.08.2006 (Пт) 8:49

Сообщение Sergeant Pepper » 01.11.2006 (Ср) 12:49

Antonariy писал(а):Если бы не был, оставил бы мое замечание без внимания.

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

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 01.11.2006 (Ср) 12:58

Попробовал, получается возможности ноутпада уже встроены в броузеры. Вернее в стандарт html. Изучение скрипта выявило, что гугловский редактор как раз и работает в этом режиме.
Лучший способ понять что-то самому — объяснить это другому.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 01.11.2006 (Ср) 13:05

NashRus писал(а):2Хакер, да что вы такое говорите, человек же написал, что это только ПРОТОТИП, показывающий принципиальную возможность, а вы про про какие то строчки.

2marvan, молодца.


Я когда писал какой-либо меня убрасывали тухлыми яйцами и угаживали нехорошими словами. И никто меня вот так не защищал.

Я точно также могу написать "только ПРОТОТИП" чего-нибудь, но если там что-то будет использоваться не по назначению, например для выделения байта из дворда будет использоваться Mid$-Hex$-связка, на меня тут же обрушется волна критики, и я даже знаю от кого. Здесь автор юзает WB не по назначению. Но его тем не менее защищают.

Закон подлости?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 01.11.2006 (Ср) 13:07

Sergeant Pepper писал(а):
Antonariy писал(а):Если бы не был, оставил бы мое замечание без внимания.

Ну что ж вы так, за простой вежливостью видите тщеславие?
Или я вас чем-то задел? Извините, постараюсь быть с вами внимательней.
Ничего личного, это же бизнес (с) :wink:
Просто заявление "легко", а потом демонстративный отказ в объяснении "как" выглядит как-то... не очень...

Оказалось действительно не так сложно, как мне представлялось. designMode видел раньше, но не оценил его возможностей. Теперь посмотрев, что в нем творит гугл, попсыпаю голову пеплом.
Лучший способ понять что-то самому — объяснить это другому.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 01.11.2006 (Ср) 13:13

Хакер писал(а):Здесь автор юзает WB не по назначению.
В свете последних исследований вынужден не согласиться. Вполне реально сделать web-редактор с подсветкой. Даже кроссброузерный.
Лучший способ понять что-то самому — объяснить это другому.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 01.11.2006 (Ср) 13:21

HP для интерфейса своих прог тоже использует WB, которые сабклассит, не давая тем самым пользователю райткликом вызвать контекстное меню. Однако WebBrowser иногда ставит не ту кодировку и окна всех их прог оказываются битыми. А выставить нужную кодировку просто так не получится, ведь меню они заблокировали.


Точно также, здесь мы можем встретить те же проблемы.

Имхо, нет ничего лучше чем PictureBox и кучу API (типа DrawText и тд.) чтобы заделать нормальную быструю подсветку. Я хоть и не поклонник быстрого кода, но в данном случае, быстрота действительно имеет значение ибо при быстром наборе задержки особенно ощутимы.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Sergeant Pepper
Новичок
Новичок
 
Сообщения: 31
Зарегистрирован: 25.08.2006 (Пт) 8:49

Сообщение Sergeant Pepper » 01.11.2006 (Ср) 13:29

Antonariy писал(а):Просто заявление "легко", а потом демонстративный отказ в объяснении "как" выглядит как-то... не очень...

Может вы и правы, но я уже не в том возрасте, чтобы задумываться о том как я выгляжу :-(
В приложении скриншот примера использования в форме контрола на основе WebBrowser, думаю, что повторить его несложно.
Вложения
Clipboard.jpg
Clipboard.jpg (50.99 Кб) Просмотров: 2914

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 01.11.2006 (Ср) 13:46

HP для интерфейса своих прог тоже использует WB, которые сабклассит, не давая тем самым пользователю райткликом вызвать контекстное меню.
Предположу, что это делается проще - <body oncontextmenu="window.event.returnValue=false">
Однако WebBrowser иногда ставит не ту кодировку и окна всех их прог оказываются битыми. А выставить нужную кодировку просто так не получится, ведь меню они заблокировали.
Это относится к конкретной кривой реализации, а не к концепции в целом.
Имхо, нет ничего лучше чем PictureBox и кучу API (типа DrawText и тд.) чтобы заделать нормальную быструю подсветку.
Фактически webbrowser это и есть пикчербокс, а апи для работы с ним сведены в mshtml.dll
Неужели document.execCommand("ForeColor",false,"blue") будет ощутимо медленнее, чем вызов кучи апи нужных для изменения цвета текста, тем более в реализации вб?
На самом деле основные тормоза будут в парсинге текста, а не его оформлении. Особенно в реализации программы-максимум - онлайн редакторе.
Лучший способ понять что-то самому — объяснить это другому.

marvan
Бывалый
Бывалый
 
Сообщения: 269
Зарегистрирован: 22.06.2004 (Вт) 13:26
Откуда: Москва

Сообщение marvan » 01.11.2006 (Ср) 14:11

Хакер писал(а):Я когда писал какой-либо меня убрасывали тухлыми яйцами и угаживали нехорошими словами. И никто меня вот так не защищал.

В качестве компенсации признаю, что полностью разделяю ниже сказанное.
Хакер писал(а):Имхо, нет ничего лучше чем PictureBox и кучу API (типа DrawText и тд.) чтобы заделать нормальную быструю подсветку. Я хоть и не поклонник быстрого кода, но в данном случае, быстрота действительно имеет значение ибо при быстром наборе задержки особенно ощутимы.

Более того. Когда я стоял перед выбором способа реализации своего редактора - я сделал его именно на PictureBox.

Пред.

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

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

Сейчас этот форум просматривают: Majestic-12 [Bot] и гости: 122

    TopList