Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Assembler

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

 

  Вопрос: x3mEd, редактор с подсветкой asm Добавлено: 15.12.05 08:45  

Автор вопроса:  mc-black | Web-сайт: mc-black.narod.ru/dzp.htm | ICQ: 308-534-060 
Вот, это конечно далеко не RadASM, и даже не QEditor, просто текстовый редактор с подсветкой синтаксиса ассембрера masm32, и минимум функций.

http://mc-black.narod.ru/x3mEd016.zip

Программка незаконченная, до этого пока далеко, поэтому выкладываю без исходников. Просто интересно послушать ваши мнения. Просьба не судить строго ;)

Ответить

  Ответы Всего ответов: 18  

Номер ответа: 1
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #1
Добавлено: 15.12.05 11:56
Как раз наоборот, недоделанные программы надо выкладывать с исходниками, чтобы 1) юзер сам мог добавить нехватающую функциональность и послать ее автору, 2) чтобы можно было понять и исправить возникающие ошибки (опять-таки с отсылкой автору)

Ответить

Номер ответа: 2
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #2 Добавлено: 15.12.05 12:15
Выделенное слово плохо читается (теряется на синем фоне выделения). Может попробовать старый ричедит? У него выделение черного цвета.

Ответить

Номер ответа: 3
Автор ответа:
 AndreyMp



ICQ: 237822510 

Вопросов: 28
Ответов: 1182
 Профиль | | #3 Добавлено: 15.12.05 12:51
Toolbar было бы неплохо сделать.

Ответить

Номер ответа: 4
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #4
Добавлено: 15.12.05 13:06
Sharp
Ой, мне-то этого не надо может рассказывать. Я не собирался из какого-то редактора делать открытый проект. Старые исходники на wasm.ru/forum есть, а более новых может никто и не увидит. Исправлением багов собираюсь заниматься сам. Продукт из этого делать не планировал.

Кто хочет, может добавить нехватающую функциональность на основе многочисленных редакторов в исходниках того же wasm.ru А сказать, что x3mEd чем-то лучше тех, что там есть я не берусь. Просто ещё один.

HOOLIGAN
Там наверняка можно сделать двуцветное выделение без того, чтобы таскать за собой старый richedit, тоже обратил внимание - будем работать! :) Добавлю в 2do list.

Ответить

Номер ответа: 5
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #5
Добавлено: 15.12.05 13:14
Toolbar.. может быть, но это как-нить потом, не скоро. Слишком много багов. Слабый пока поиск, нет замены текста, нет help'а :) Не хранимые настройки. Ограниченный размер открываемых файлов. Нет нумерации строк и перехода к строке по номеру. Много всего в общем. Кстати, может кому встречался пример прорисовки картинки ПОД текстом Rich Edit, т.е. фоновой рисунок?

Ответить

Номер ответа: 6
Автор ответа:
 Александр



Разработчик Offline Client

ICQ: 204034 

Вопросов: 106
Ответов: 1919
 Профиль | | #6 Добавлено: 15.12.05 21:36
и перехода к строке по номеру


Думаю, ты разберешься что к чему:
Private Sub mnuFindJumpOnLine_Click()
    On Error Resume Next
    Dim mPos As Long
    mPos = Val(InputBox("Введите номер строки для перехода на нее", "Переход на строку", mRichEdit.CurrentLine + 1))
    With cRich
        .SelStart = SendMessage(.hwnd, &HBB, mPos - 1, 0&;) 'EM_LINEINDEX
    End With
End Sub

Private Sub mnuFindJumpOnLineSymbol_Click()
    On Error Resume Next
    Dim mPos As String, mLineLen As Long, mPosLine As Long, mPosString As Long, mInput() As String
    With cRich
        mPos = InputBox("Введите номер строки и столбца. Например:" & vbCrLf & "24:5, где 24 - строка, а 5 - символ в строке", "Переход на строку и столбец", CStr(mRichEdit.CurrentLine + 1) & ":" & CStr(cRich.SelStart - SendMessage(cRich.hwnd, &HBB, mRichEdit.CurrentLine, 0&;) + 1))
        mInput = Split(mPos, ":";)
        ' Вычисление нужной строки
        mPosLine = SendMessage(.hwnd, &HBB, CLng(Val(Trim(mInput(0)))) - 1, 0&;)
        ' Если строки с введенным номером нету, то берем в конец текста
        If mPosLine = (-1) Then mPosLine = SendMessage(.hwnd, &HBB, SendMessage(.hwnd, &HBA, 0&, 0&;) - 1, 0&;)
        ' Вычисление номера символа в строке для переходана него
        mLineLen = SendMessage(.hwnd, &HC1, mPosLine, 0&;)
        ' Если он больше, чем длина, то делаем его равным длине
        If CLng(Val(Trim(mInput(1)))) > mLineLen + 1 Then mPosString = mLineLen + 1 Else mPosString = CLng(Val(Trim(mInput(1)))) - 1
        If CLng(Val(Trim(mInput(1)))) > &H0 Then .SelStart = mPosLine + mPosString
    End With
End Sub

Ответить

Номер ответа: 7
Автор ответа:
 Александр



Разработчик Offline Client

ICQ: 204034 

Вопросов: 106
Ответов: 1919
 Профиль | | #7 Добавлено: 15.12.05 21:38

Private Const cNull As Long = &H0

Public Property Get CurrentLine() As Long
    CurrentLine = SendMessage(hRichEdit,EM_EXLINEFROMCHAR, cNull, ByVal GetTextSel.cpMin)
End Property

Ответить

Номер ответа: 8
Автор ответа:
 Александр



Разработчик Offline Client

ICQ: 204034 

Вопросов: 106
Ответов: 1919
 Профиль | | #8 Добавлено: 15.12.05 21:39

Private Const cNull As Long = &H0

Public Property Get CurrentLine() As Long
    CurrentLine = SendMessage(hRichEdit,EM_EXLINEFROMCHAR, cNull, ByVal GetTextSel.cpMin)
End Property

Ответить

Номер ответа: 9
Автор ответа:
 Александр



Разработчик Offline Client

ICQ: 204034 

Вопросов: 106
Ответов: 1919
 Профиль | | #9 Добавлено: 15.12.05 21:51
Нумерацией тоже могу поделиться - пиши на аську или на мыло.

Ответить

Номер ответа: 10
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #10
Добавлено: 16.12.05 11:49
Спасибо за помощь, Александр, я мог бы наверное и сам переход к строке, символу. Теперь и в справочник не надо лезьть смотреть нужные сообщения. Только пишу на masm32. С нумерацией у меня не то, чтобы проблемы как это сделать, сложнее определиться куда писать номера строк чисто технически: в отдельный контрол или при перерисовке Rich Edit рисовать их на правом поле. В общем надо браться и делать, чего уж там...

Насчёт тулбара: его скорее всего не будет вообще. Дело в том, что мысль была всё управление редактора сделать на горячих клавишах. Меню, ещё пусть будет, там к тому же написаны сочетания клавиш. :) Статус строка пусть будет, там некоторая инфа, которая нужна постоянно. Тулбар, я считаю - это уже лишнее. Потом всегда можно будет добавить. Пока, я считаю, важнее наращивать возможности программы, устранять баги, а не наворачивать интерфейс. Успеется ещё.

Ответить

Номер ответа: 11
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #11
Добавлено: 18.12.05 10:07
Немного доработанная версия, есть две хранимых настройки: язык интерфейса и перенос слов

http://mc-black.narod.ru/x3mEd017.zip

Ответить

Номер ответа: 12
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #12 Добавлено: 18.12.05 13:21
Маленький совет:
Все настройки объединить в структуру типа
SETTINGS struct
    langID        dd ?
    lpFont        LOGFONT <?>
    BackColor     dd ?
    lastCursorPos dd ?
    ......
SETTINGS ends


и завести переменную
MySettings SETTINGS<?>

И сохранять всю переменную скопом в файл или в реестр, как бинарные данные. При открытии программы читать из файла в переменную MySettings.
По мере развития не надо будет раз за разом переписывать процедуру сохранения настроек. Только добавляешь в структуру новое поле.

Ответить

Номер ответа: 13
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #13
Добавлено: 19.12.05 10:16
Хорошая мысль, мне она жизнь облегчит существенно. Только не знаю, как пользователю: не будет же он при желании лезть с HEX-редактором и описанием в .ini. А так сложней мне, но наглядней файл с настройками. Хотел как в totcmd, чтобы просто, наглядно и понятно. Можно таким способом объединить некоторые взамисвязанные настройки, например размеры и положение окна на экране.

Ответить

Номер ответа: 14
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #14 Добавлено: 19.12.05 11:38
Юзеру необязательно лазить с hex-редактором в реестр :)
Пример: юзер меняет язык интерфейса. При этом в WndProc посылается соответствующее сообщение. По этому сообщению пишешь код:

    .elseif uMsg==80
        invoke  GetKeyboardLayout, NULL
        and eax,0FFFFh
        mov MySettings.landID, eax
        xor eax,eax
        ret


И всё. Никаких редакторов.
А при закрытии программы сохраняешь MySettings
Точно так же решается и сохранение размеров окна, и выбранный шрифт и т.д. и т.п.

Ответить

Номер ответа: 15
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #15 Добавлено: 19.12.05 11:56
Поделюсь с тобой примером, как я меняю шрифт и сохраняю сделанный выбор:

Есть структура типа упоминавшейся MySettings - tmpDATA.

appDATA struct
    dwWidth             dd ?            ;ширина окна
    BackColor           dd ?            ;цвет заливки
    FrameColor          dd ?            ;цвет рамки
    ForeColor           dd ?            ;цвет шрифта
    FrameBrush          dd ?            ;хэндл кисти по цвету FrameColor
    lpFont              LOGFONT <?>     ;структура шрифта
    hFont               dd ?            ;хэндл шрифта, созданного по данным в lpFont
    SndPath             db 256 dup(?)   ;буфер для имени файла
appDATA ends

tmpDATA         appDATA <?>

GetFont proc
    LOCAL cf                :CHOOSEFONT
    LOCAL buffer[128]       :BYTE
    
    ;получаем текущие данные структуры LOGFONT по хэндлу шрифта
    ;прямо передавая адреса внутри переменной tmpDATA в ф-цию GetObject
    invoke  GetObject, tmpDATA.hFont, sizeof LOGFONT, addr tmpDATA.lpFont
    invoke  RtlZeroMemory, addr cf, sizeof CHOOSEFONT
    mov     cf.lStructSize, sizeof CHOOSEFONT
    m2m     cf.hwndOwner, hDlg
    mov     cf.iPointSize, 8
    ;указываем буфер для сохранения выбора юзера - tmpDATA.lpFont
    mov     cf.lpLogFont, offset tmpDATA.lpFont
    mov     cf.Flags, CF_EFFECTS or CF_INITTOLOGFONTSTRUCT or CF_SCREENFONTS
    m2m     cf.hInstance, hInstance
    
    invoke  ChooseFont, addr cf
    .if     (eax)
        ;теперь если юзер сделал выбор шрифта, его выбор сидит в tmpDATA.lpFont
        ;создаем шрифт в соответствии с его выбором
        invoke  CreateFontIndirect, addr tmpDATA.lpFont
        ;и сохраняем в нашу же переменную: tmpDATA.hFont
        mov     tmpDATA.hFont,eax
        invoke  lstrcpy, addr buffer, addr szFont
        invoke  lstrcat, addr buffer, addr tmpDATA.lpFont.lfFaceName
        invoke  SetDlgItemText, hDlg, STC_FONT, addr buffer
    .endif
    ret

GetFont endp


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

Ответить

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

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



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