как работать с RichEdit?

Раздел посвящен программированию с использованием Power Basic.
SLUTER
Новичок
Новичок
 
Сообщения: 49
Зарегистрирован: 06.06.2010 (Вс) 18:26

как работать с RichEdit?

Сообщение SLUTER » 11.08.2010 (Ср) 14:26

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

Начал было общаться на оф.форуме с помощью гуглопереводчика, но буквально после двух постов ко мне в ЛС постучал админ с предложением предъявить серийный номер компилятора (якобы это поможет мне получать обновления, жись будет сказкой и всякое такое). В общем забанили меня по IP. А лазить через прокси вообще жесть. :)

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: как работать с RichEdit?

Сообщение jangle » 12.08.2010 (Чт) 7:07

SLUTER писал(а):Никак не разберусь, как, например, поменять цвет текста, начиная с определённого символа, или как вставить в текст кликабельную ссылку.

Начал было общаться на оф.форуме с помощью гуглопереводчика, но буквально после двух постов ко мне в ЛС постучал админ с предложением предъявить серийный номер компилятора (якобы это поможет мне получать обновления, жись будет сказкой и всякое такое). В общем забанили меня по IP. А лазить через прокси вообще жесть. :)


А можно ссылку на тред, в котором ты общался с помощью гуглопереводчика?

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: как работать с RichEdit?

Сообщение Денис » 12.08.2010 (Чт) 11:37

Ахаха, я представляю!
Гив ми плис кряк эбаут ай донт ноу.
:lol:
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: как работать с RichEdit?

Сообщение jangle » 12.08.2010 (Чт) 14:16

Денис писал(а):Ахаха, я представляю!
Гив ми плис кряк эбаут ай донт ноу.
:lol:


А мне вот в личку никто из админов не писал. Даже обидно :)

SLUTER
Новичок
Новичок
 
Сообщения: 49
Зарегистрирован: 06.06.2010 (Вс) 18:26

Re: как работать с RichEdit?

Сообщение SLUTER » 12.08.2010 (Чт) 14:42

тута спрашивал о панели задач
http://www.powerbasic.com/support/pbfor ... hp?t=44257

успел заскринить :)
Изображение



так как всё-таки в ричедит вставить кликабельную ссылку? дайте хоть направление куда копать.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: как работать с RichEdit?

Сообщение jangle » 12.08.2010 (Чт) 15:59

Пример как поменять цвет текста в RichEdit:

Код: Выделить всё
#Compile Exe
#Dim All
#Include "WIN32API.INC"
#Include "COMMCTRL.INC"
#Include "RICHEDIT.INC"

%ID_RICHEDIT  = 500

Global hEdit As Long
Declare CallBack Function DlgCallback()
Declare Function MarkAll (ByVal myText As String) As Long
Declare Function setRichTextColor( ByVal NewColor As Long) As Long

Function PBMain
    Local hDlg As Long, hRichEd As Long, rText As String
    hRichEd = LoadLibrary("RICHED32.DLL")
    Call InitCommonControls
    Dialog New 0, "Раскраска текста",,, 200, 138, %WS_SysMenu To hDlg
    Control Add Button, hDlg, %IdOk,     "&Color",  140,  6, 50, 14
    Control Add Button, hDlg, %IdCancel, "E&xit", 140, 22, 50, 14
    Control Add "RichEdit", hDlg, %ID_RICHEDIT, "", 6, 6, 126, 110, _
                %WS_Child Or %WS_Visible Or %ES_MultiLine Or %WS_VScroll Or _
                %WS_HScroll Or %ES_AutoVScroll Or %ES_WantReturn Or  _
                %ES_NoHideSel, %WS_Ex_ClientEdge

    Control Handle hDlg, %ID_RICHEDIT To hEdit
    rText = Repeat$(30, "Старт и Стоп ") 'Create and set some text
    Call SendMessage(hEdit, %WM_SETTEXT, 0, StrPtr(rText))
    SetFocus hEdit
    Dialog Show Modal hDlg Call DlgCallback
End Function

Function setRichTextColor( ByVal NewColor As Long) As Long
  Local cf As CHARFORMAT
  cf.cbSize      = Len(cf)
  cf.dwMask      = %CFM_COLOR
  cf.crTextColor = NewColor
  Call SendMessage(hEdit, %EM_SETCHARFORMAT, %SCF_SELECTION, VarPtr(cf))
End Function


Function MarkAll (ByVal myText As String) As Long
   Local AllText As String, tLen As Long, stopPos As Long
   tLen = SendMessage(hEdit, %WM_GETTEXTLENGTH, 0, 0) + 1
   AllText = Space$(tLen)
   Call SendMessage(hEdit, %WM_GETTEXT, tLen, StrPtr(AllText))
   Call SendMessage(hEdit, %WM_SETREDRAW, 0, 0)
   stopPos = InStr(AllText, myText)
   Do While stopPos
      Call SendMessage(hEdit, %EM_SETSEL, stopPos - 1, stopPos + Len(myText) - 1)
      Call setRichTextColor(&HFF)
      stopPos = InStr(stopPos + Len(myText) - 1, AllText, myText)
   Loop
   Call SendMessage(hEdit, %EM_SETSEL, 0, 0)
   SetFocus hEdit
   SendMessage hEdit, %WM_SETREDRAW, 1, 0
   InvalidateRect hEdit, ByVal %NULL, 0 : UpdateWindow hEdit
End Function

CallBack Function DlgCallback()
  If CbMsg = %WM_Command Then
    Select Case CbCtl
      Case %IdOk
         Call MarkAll("Стоп")
      Case %IdCancel
        Dialog End CbHndl, (CbCtl = %IdOk)
    End Select
  End If
End Function
Последний раз редактировалось jangle 12.08.2010 (Чт) 16:00, всего редактировалось 1 раз.

SLUTER
Новичок
Новичок
 
Сообщения: 49
Зарегистрирован: 06.06.2010 (Вс) 18:26

Re: как работать с RichEdit?

Сообщение SLUTER » 12.08.2010 (Чт) 16:00

УХ ТЫ УХ ТЫ *истерический смайл*

спасибо!!11

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: как работать с RichEdit?

Сообщение jangle » 12.08.2010 (Чт) 16:01

SLUTER писал(а):УХ ТЫ УХ ТЫ *истерический смайл*

спасибо!!11


Еще раз код скопируй, в первом варианте была ошибка. Я шас исправил

SLUTER
Новичок
Новичок
 
Сообщения: 49
Зарегистрирован: 06.06.2010 (Вс) 18:26

Re: как работать с RichEdit?

Сообщение SLUTER » 12.08.2010 (Чт) 16:04

быть может уже после исправления взял, ибо работает.

я так понял richedit не имеет собственного контекстного меню?

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: как работать с RichEdit?

Сообщение jangle » 12.08.2010 (Чт) 16:14

SLUTER писал(а):быть может уже после исправления взял, ибо работает.

я так понял richedit не имеет собственного контекстного меню?


Не помню уже. Повесь создание своего меню на событие WM_RBUTTONDOWN

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: как работать с RichEdit?

Сообщение jangle » 12.08.2010 (Чт) 16:25

Пример с гиперссылками в RichEdit

Код: Выделить всё
#Compile Exe
#Dim All

#Include "WIN32API.INC"
#Include "COMMCTRL.INC"
#Include "RICHEDIT.INC"
Global hRichEd As Long

Type charformat2a
    cbSize As Long
    dwMask As Dword
    dwEffects As Dword
    yHeight As Long
    yOffset As Long
    crTextColor As Dword
    bCharSet As Byte
    bPitchAndFamily As Byte
    szFaceName As Asciiz * %LF_FACESIZE
    wpad2 As Integer
    wWeight As Word
    sSpacing As Integer
    crBackColor As Dword
    lcid As Long
    dwReserved As Dword
    sStyle As Integer
    wKerning As Word
    bUnderlineType As Byte
    bAnimation As Byte
    bRevAuthor As Byte
    bReserved1 As Byte
End Type

%ID_RICHEDIT = 500
%IDURLLABEL = 502
%EM_AUTOURLDETECT = ( %WM_User + 91 )
%EN_LINK = &H70b
%ENM_LINK = &H4000000
Global hEdit As Long
Declare CallBack Function DlgCallback()

Function richEd_Hyperlink_UrlClicked( theLink As String ) As Long
    Call ShellExecute( %NULL, "open", ByCopy theLink, "", "", %SW_Show )
End Function


Function richEd_Hyperlink_HandleURL( ByVal hWnd As Long, lpLink As Dword ) As Long
    Local enLink2 As ENLINK
    Local enlinkPtr As ENLINK Ptr
    Local linkCf2 As charformat2a
    Local chrg As CHARRANGE
    Local tr As TEXTRANGE
    Local linkText As String

    enlinkPtr = lpLink
    enLink2 = @enlinkPtr
    tr.chrg = enLink2.chrg
    linkText = Space$( tr.chrg.cpMax - tr.chrg.cpMin + 2 )
    tr.lpstrText = StrPtr( linkText )
    SendMessage( hEdit, %EM_GETTEXTRANGE, ByVal 0, VarPtr( tr ))

Select Case enLink2.msg
    Case %WM_LButtonDown
    Call richEd_Hyperlink_UrlClicked( linkText )
    Control Set Text hWnd, %IDURLLABEL, linkText
    Function = %True: Exit Function

    Case %WM_LButtonDblClk, %WM_LButtonUp
    Function = %True: Exit Function
    Case %WM_MouseMove
    Control Set Text hWnd, %IDURLLABEL, linkText
    Function = %True: Exit Function
    End Select

    Function = %False
End Function

Function PBMain
    Local hDlg As Long, rText As String
    Local chrg As CHARRANGE
    hRichEd = LoadLibrary( "Riched20.DLL" )
    Call InitCommonControls
    Dialog New 0, "DDT RichEdit %EM_AUTOURLDETECT demo",,, 320, 138, %WS_ThickFrame Or %WS_Caption Or %WS_SysMenu Or %WS_MaximizeBox To hDlg
    Control Add Label, hDlg, %IDURLLABEL, "", 2, 2, 100, 14
    Control Add "RichEdit20A", hDlg, %ID_RICHEDIT, "", 6, 6, 126, 110, _
    %WS_Child Or %WS_Visible Or %ES_MultiLine Or %WS_VScroll _
    Or %ES_NoHideSel Or %ES_AutoVScroll Or %ES_WantReturn _
    , %WS_Ex_ClientEdge '
    Control Handle hDlg, %ID_RICHEDIT To hEdit
    Call SendMessage( hEdit, %EM_AUTOURLDETECT, %True, 0 )
    Call SendMessage( hEdit, %EM_SETEVENTMASK, 0, %ENM_LINK )
    rText = Repeat$( 30, "Link:    http://www.powerbasic.com     or :    http://bbs.vbstreets.ru/  test  " )
    Call SendMessage( hEdit, %WM_SETTEXT, 0, StrPtr( rText ))
    Dialog Show Modal hDlg Call DlgCallback
End Function


CallBack Function DlgCallback()
    Local lpnmhdr As NmHdr
    Local lpnmhdrPtr As NmHdr Ptr
    Select Case CbMsg
        Case %WM_Notify
            lpnmhdrPtr = CbLParam
            lpnmhdr = @lpnmhdrPtr
            If lpnmhdr.idFrom = %ID_RICHEDIT Then
            Select Case lpnmhdr.code
        Case %EN_LINK
            Call SetWindowLong( CbHndl, %DWL_MSGRESULT, richEd_Hyperlink_HandleURL( CbHndl, CbLParam ))
            End Select

            Function = %True
            End If
            Function = %False

        Case %WM_Size
            MoveWindow GetDlgItem( CbHndl, %ID_RICHEDIT ), 4, 40, LoWrd( CbLParam ) - 8, HiWrd( CbLParam ) - 50, - 1

    End Select
End Function         

SLUTER
Новичок
Новичок
 
Сообщения: 49
Зарегистрирован: 06.06.2010 (Вс) 18:26

Re: как работать с RichEdit?

Сообщение SLUTER » 12.08.2010 (Чт) 16:27

чтоб тебе все бабы давали! очень помог.
спасибо


Вернуться в Power Basic

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 40

    TopList