Страница: 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-сайт:  
 Профиль |  | #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-сайт:  
 Профиль |  | #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-сайт:  
 Профиль |  | #5
      
Добавлено:  15.12.05 13:14
       
    
       
  
Toolbar.. может быть, но это как-нить потом, не скоро. Слишком много багов. Слабый пока поиск, нет замены текста, нет help'а  
    
 Не хранимые настройки. Ограниченный размер открываемых файлов. Нет нумерации строк и перехода к строке по номеру. Много всего в общем. Кстати, может кому встречался пример прорисовки картинки ПОД текстом Rich Edit, т.е. фоновой рисунок?
		
	  
			 
	
		 
    
       
    
Номер ответа: 6 
      
Автор ответа:
 Александр
![]()
![]()
Разработчик Offline Client
ICQ: 204034 
Вопросов: 106
Ответов: 1919
      
 Профиль |  | #6
       
Добавлено:  15.12.05 21:36
       
    
       
  
 
    
Думаю, ты разберешься что к чему:
    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-сайт:  
 Профиль |  | #10
      
Добавлено:  16.12.05 11:49
       
    
       
  
Спасибо за помощь, Александр, я мог бы наверное и сам переход к строке, символу. Теперь и в справочник не надо лезьть смотреть нужные сообщения. Только пишу на masm32. С нумерацией у меня не то, чтобы проблемы как это сделать, сложнее определиться куда писать номера строк чисто технически: в отдельный контрол или при перерисовке Rich Edit рисовать их на правом поле. В общем надо браться и делать, чего уж там...
 
    
Насчёт тулбара: его скорее всего не будет вообще. Дело в том, что мысль была всё управление редактора сделать на горячих клавишах. Меню, ещё пусть будет, там к тому же написаны сочетания клавиш. 
 Статус строка пусть будет, там некоторая инфа, которая нужна постоянно. Тулбар, я считаю - это уже лишнее. Потом всегда можно будет добавить. Пока, я считаю, важнее наращивать возможности программы, устранять баги, а не наворачивать интерфейс. Успеется ещё.
		
	  
			 
	
		 
    
       
    
Номер ответа: 11 
      
Автор ответа:
 mc-black
![]()
![]()
ICQ: 308-534-060 
Вопросов: 20
Ответов: 1860
      
 Web-сайт:  
 Профиль |  | #11
      
Добавлено:  18.12.05 10:07
       
    
       
  
Немного доработанная версия, есть две хранимых настройки: язык интерфейса и перенос слов
 
    
http://mc-black.narod.ru/x3mEd017.zip
		
	  
			 
	
		 
    
       
    
Номер ответа: 12 
      
Автор ответа:
 HOOLIGAN
![]()
Вопросов: 0
Ответов: 1066
      
 Профиль |  | #12
       
Добавлено:  18.12.05 13:21
       
    
       
  
Маленький совет:
 
    
Все настройки объединить в структуру типа
    langID        dd ?
    lpFont        LOGFONT <?>
    BackColor     dd ?
    lastCursorPos dd ?
    ......
SETTINGS ends
и завести переменную 
MySettings    SETTINGS<?>
И сохранять всю переменную скопом в файл или в реестр, как бинарные данные. При открытии программы читать из файла в переменную MySettings.
По мере развития не надо будет раз за разом переписывать процедуру сохранения настроек. Только добавляешь в структуру новое поле.
		
	  
			 
	
		 
    
       
    
Номер ответа: 13 
      
Автор ответа:
 mc-black
![]()
![]()
ICQ: 308-534-060 
Вопросов: 20
Ответов: 1860
      
 Web-сайт:  
 Профиль |  | #13
      
Добавлено:  19.12.05 10:16
       
    
       
  
Хорошая мысль, мне она жизнь облегчит существенно. Только не знаю, как пользователю: не будет же он при желании лезть с HEX-редактором и описанием в .ini. А так сложней мне, но наглядней файл с настройками. Хотел как в totcmd, чтобы просто, наглядно и понятно. Можно таким способом объединить некоторые взамисвязанные настройки, например размеры и положение окна на экране.
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 14 
      
Автор ответа:
 HOOLIGAN
![]()
Вопросов: 0
Ответов: 1066
      
 Профиль |  | #14
       
Добавлено:  19.12.05 11:38
       
    
       
  
Юзеру необязательно лазить с hex-редактором в реестр  
    
Пример: юзер меняет язык интерфейса. При этом в WndProc посылается соответствующее сообщение. По этому сообщению пишешь код:
        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. 
    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
Опять же никаких редакторов для изменения не нужно 
Диалог выбора шрифта сам заполняет нашу переменную настроек, надо только ему дать адреса полей этой переменной.