Rody66 писал(а):Начну с текстбокса. Задача: крайне желателен такой текстбокс, в котором можно менять шрифт и цвет какой то определенной части текста (да, речь идет о RichTextBox, но не хотелось бы зависеть от его библиотеки, и носить ее с собой тоже не хочется)
Rody66 писал(а): Насколько мне известно, имеется лишь один вариант реализации - через UserControl, но с ним никогда не работал, поэтому желательно выяснить, как, например, заменять стандартные события текстбокса на свои (скажем, для собственного PopupMenu), etc
Rody66 писал(а):2: Столкнулся с необходимостью программным путем во время выполнения, без всяких кликов и кнопок менять выбранное (Selected) в ListBox, как это реализовать?
Rody66 писал(а):3: Также очень интересует как отловить событие <Scroll> (прокрутка текста) в текстбоксе. По умолчанию оного нет.
Rody66 писал(а):Последний вопрос насчет хорошего тона: подскажите, по правилам, какой префикс для обычного модуля будет правильным, mdl или mod?
Хакер писал(а):Носить с собой библиотеки — это хорошо и правильно. Взять любую хорошую большую программу: она носит с собой библиотеки. И от этого она не становится плохой. Носить с собой библиотеки — это престижно.
Хакер писал(а):В этом ключевой момент, а не в том, что на флешке будет один EXE-файл вместо EXE-файла в окружении трёх-пяти DLL-шек.
Но даже с учётом этого, носить с собой RichEdit-овскую библиотеку не нужно: она есть во всех системах, кроме самых старых.
Узнать о прокрутке — можно.
По чьим правилам?
ListIndex
может есть возможность без лишних контроллов заменить его на собственное?
Rody66 писал(а):Но даже с учётом этого, носить с собой RichEdit-овскую библиотеку не нужно: она есть во всех системах, кроме самых старых.
Вот и я ума не приложу как так вышло, но на чистой Win 7 файл RICHTX32.OCX отсутствует
Rody66 писал(а):Разумеется, узнать. И получить какие то данные (скажем, на сколько прокручено и тд).
Rody66 писал(а):По тем самым правилам хорошего тона, таким же, как и у форм - frm, у текстбоксов - txt и тд.
Rody66 писал(а):Про Popup так и не было ответа:
Интересно почему? Очень удобная вещь, если имеется Portable версия, то я всегда например предпочту ее обычной версии с установкой.Хакер писал(а):Хоть я и не люблю идею Portable-версий...
Вот вот! Это точно, если простые Dll'ки не требующие регистрации, то все хорошо, а вот с библиотеками в которых живут всевозможные контролы возникает множество заморочек с регистрацией, наличием админских прав и т.п. Конечно технология COM очень удобна, но удобна, когда все необходимое есть в системе уже по умолчанию, а дополнительные библиотеки с контролами нужно использовать если по другому уже никак нельзя или очень сложно (ИМХО). Например такие, как Common Dialog, лучше заменить соответствующими WinApi функциями, ну и другие по возможности тоже.alibek писал(а):Ключевой момент относительно сабжа не в этом.А в том, что почему-то у многих понятие "использование библиотек" ассоциируется с "требуется предварительная установка"
Интересное замечание, хотя по сути "ловить событие" очень распространенная фраза, я и сам ее использую. Может это и не правильно, то тем не менее всем понятно, какой процесс имеется ввиду. Это все равно как вместо "отключили электроэнергию" большинство говорит "выключили свет" и тем не менее все друг друга понимают. И от таких привычек очень трудно избавится.Хакер писал(а):События нельзя отловить. Они не рыба, ведь.
Тут главное этих правил потом придерживаться, без сильной нужды не менять, не метаться от одного правила к другому и все будет нормально, в противном случае потом собственный код фиг разберешь, особенно если в нем куча модулей, написанных в разное время по разным правилам. Главное правило это что-бы было самому понятно и удобно.Хакер писал(а):Ещё раз, неужели непонятно, что правила каждый придумывает и выбирает себе сам.
Rody66 писал(а):3: Также очень интересует как отловить событие <Scroll> (прокрутка текста) в текстбоксе. По умолчанию оного нет.
Единственное, что приходит мне на ум в данном случае так это только Сабкласинг (Subclassing) посредством которого можно будет ловить (вот опять этот термин проскочил все оконные сообщения, и таким образом можно реализовать то что надо. Как делается сабклассинг писать смысла нет, ибо про это инфы навалом, поищи по форуму. Может есть и другая метода получить, то что тебе надо, но я про нее не знаю.Хакер писал(а):Это не значит, что нельзя узнать о прокрутке. Узнать о прокрутке — можно.
Rody66 писал(а):Приветствую.
Начну с текстбокса. Задача: крайне желателен такой текстбокс, в котором можно менять шрифт и цвет какой то определенной части текста (да, речь идет о RichTextBox, но не хотелось бы зависеть от его библиотеки, и носить ее с собой тоже не хочется).
Кто их выдумал-то? Ой, а у меня у тексбоксов префикс «inp». Катастрофа, я нарушил некие незыблемые вечные правила хорошо тона, непонятно кем и для кого и когда выдуманные. Ещё раз, неужели непонятно, что правила каждый придумывает и выбирает себе сам.
Главное правило это что-бы было самому понятно и удобно.
апример такие, как Common Dialog, лучше заменить соответствующими WinApi функциями, ну и другие по возможности тоже.
Можно использовать Riched20.dll напрямую и не таскать с собой ocx, который только обертка над этой dll
Rody66 писал(а):Вот это тоже актуально. Подскажи, пожалуйста, что за функции?
Public Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (ByRef pOpenfilename As OPENFILENAME) As Long
Public Declare Function GetSaveFileName Lib "comdlg32.dll" Alias "GetSaveFileNameA" (ByRef pOpenfilename As OPENFILENAME) As Long
Public Declare Function FindText Lib "comdlg32.dll" Alias "FindTextA" (ByRef pFindreplace As FINDREPLACE) As Long
Public Declare Function ReplaceText Lib "comdlg32.dll" Alias "ReplaceTextA" (ByRef pFindreplace As FINDREPLACE) As Long
Public Declare Function ChooseColor Lib "comdlg32.dll" Alias "ChooseColorA" (ByRef pChoosecolor As CHOOSECOLOR) As Long
Public Declare Function ChooseFont Lib "comdlg32.dll" Alias "ChooseFontA" (ByRef pChoosefont As CHOOSEFONT) As Long
Public Declare Function PrintDlg Lib "comdlg32.dll" Alias "PrintDlgA" (ByRef pPrintdlg As PRINTDLG) As Long
Public Declare Function PrintDlgEx Lib "comdlg32.dll" Alias "PrintDlgExA" (ByRef TLPPRINTDLGEXA As PRINTDLGEXA) As Long
Option Explicit
Public Declare Function GetOpenFileName Lib "comdlg32.dll" _
Alias "GetOpenFileNameA" ( _
pOpenfilename As OPENFILENAME) As Boolean
Type OPENFILENAME
lStructSize As Long
hwndOwner As Long
hInstance As Long
lpstrFilter As String
lpstrCustomFilter As Long
nMaxCustrFilter As Long
nFilterIndex As Long
lpstrFile As String
nMaxFile As Long
lpstrFileTitle As String
nMaxFileTitle As Long
lpstrInitialDir As String
lpstrTitle As String
Flags As Long
nFileOffset As Integer
nFileExtension As Integer
lpstrDefExt As String
lCustrData As Long
lpfnHook As Long
lpTemplateName As Long
End Type
Public Type typeFileName
strFilePath As String
strFileName() As String
strFileTitle As String
posixName As Long
intCount As Integer
End Type
Public Const OFN_ALLOWMULTISELECT = &H200 'выбор нескольких файлов
Public Const OFN_CREATEPROMPT = &H2000 'Уст., что диалог. окно сообщ. пользователю об отсутствии файла и предлагает его создать
Public Const OFN_EXPLORER = &H80000
Public Const OFN_FILEMUSTEXIST = &H1000 'Уст., что польз. может выбрать только сущ. файл или увидит сообщение "Файл не существует. Проверьте правильность имени файла".
Public Const OFN_HIDEREADONLY = &H4 'Прячет галочку "Только чтение".
Public Const OFN_NOCHANGEDIR = &H8 'Открывать диалог в том же каталоге, в котором он был открыть первый раз
Public Const OFN_NODEREFERENCELINKS = &H100000
Public Const OFN_NONETWORKBUTTON = &H20000
Public Const OFN_NOREADONLYRETURN = &H8000
Public Const OFN_NOVALIDATE = &H100 'Можно использовать любые символы при указании имени файла.
Public Const OFN_OVERWRITEPROMPT = &H2
Public Const OFN_PATHMUSTEXIST = &H800
Public Const OFN_READONLY = &H1
Public Const OFN_SHOWHELP = &H10 'Показывает кнопку справки.
Public Const DbVbNullChar As String = vbNullChar & vbNullChar
'
Public Function OpenFile(ByVal Title As String, _
ByVal InitDir As String, _
Optional ByVal FileName As String, _
Optional ByVal Filter As String = vbNullString, _
Optional ByVal FilterIndex As Long = 1, _
Optional ByVal hWnd As Long = -1) As typeFileName
Dim strBuffer As String
Dim strTitle As String
Dim strFile As String * 1024
Dim OpFile As OPENFILENAME
Dim p%
If Filter = vbNullString Then Filter = "All Files (*.*)" & Chr$(0) & "*.*"
With OpFile
.hwndOwner = hWnd
.hInstance = 0
.lpstrCustomFilter = 0
.nMaxCustrFilter = 0
.lpfnHook = 0
.lpTemplateName = 0
.lCustrData = 0
.lpstrFilter = Filter
.nFilterIndex = FilterIndex
.lpstrFile = FileName & String$(1024 - Len(FileName), 0)
.nMaxFile = 1023
.lpstrFileTitle = String$(1024, 0)
.nMaxFileTitle = 1023
.lpstrTitle = Title
.lpstrInitialDir = InitDir
.lpstrDefExt = "mde"
.Flags = OFN_FILEMUSTEXIST + OFN_PATHMUSTEXIST + OFN_EXPLORER + OFN_ALLOWMULTISELECT
.lStructSize = Len(OpFile)
End With
If GetOpenFileName(OpFile) Then
strBuffer = OpFile.lpstrFile: strTitle = OpFile.lpstrFileTitle
strTitle = Left$(strTitle, InStr(1, strTitle, vbNullChar) - 1)
p% = InStr(1, strBuffer, DbVbNullChar)
strBuffer = Left(strBuffer, p% - 1)
If Len(strTitle) = 0 Then
'Обработка списка файлов
p% = InStr(1, strBuffer, vbNullChar)
OpenFile.strFilePath = Left(strBuffer, p% - 1) & "\"
OpenFile.strFileName() = Split(Mid$(strBuffer, p% + 1), vbNullChar)
Else
'Обработка одиночного файла
OpenFile.strFilePath = Left(strBuffer, Len(strBuffer) - Len(strTitle))
OpenFile.strFileName() = Split(strTitle, vbNullChar)
End If
OpenFile.posixName = OpFile.nFileOffset
OpenFile.intCount = UBound(OpenFile.strFileName)
OpenFile.strFileTitle = strTitle
Else
OpenFile.strFilePath = OpFile.lpstrInitialDir
ReDim OpenFile.strFileName(0)
OpenFile.strFileTitle = vbNullString
OpenFile.posixName = 0
OpenFile.intCount = 0
End If
End Function
Rody66 писал(а):Странно, сейчас попробовал покопаться на эту тему, и что-то как-то успехи не очень. Добавил я к проекту Riched20.dll , в проводнике объектов появилась библиотека tom, в ней ITextDocument и прочее. Пробовал объявлять переменную как ITextDocument, но толку от этого 0. В сети нашел что-то о RichEdit из ActiveX, но большей инфы не узрел. Или RichEdit из ActiveX это и есть RichTextBox ?.
Rody66 писал(а):А вот насчет С мне известно, что существует такая вещь, как ANSI (насколько я знаю, к префиксам эти стандарты тоже относится).
Раз уж ты употребляешь обороты "насколько мне известно" и "насколько я знаю", может быть ты сообщишь об источнике своих знаний и скажешь номер стандарта или дашь ссылку на документ, где бы описывался стандарт на префиксы?
alibek писал(а):такая вещь, как ANSI
Ну ты то не тултип не делаешь.
И в VB6 IDE окно ричэдита сабклассится.
Rody66 писал(а):Так я то как раз тултип делаю.
Хакер писал(а):Не нужно. Что это за болезнь, поражающая мозг, заставляющая делать рваные окна без бордеров у контролов.
Rody66 писал(а):Так я то как раз тултип делаю.
Ты принципиально игнорируешь вопросы?
А чем тебе не хватает стандартных тултипов?
В наборе CodeJock есть куча разных тултипов http://www.codejock.com/products/controls/tour_last.asp
Rody66 писал(а):Хотя бы тем, что там нет элементарного выделения жирным, что в моем случае очень важно.
MS_WINNOTE умеет выделять жирным?
Сейчас этот форум просматривают: AhrefsBot, Google-бот, Yandex-бот и гости: 74