purebasic.info

PureBasic forum
Текущее время: Сб янв 20, 2018 11:38 am

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: Скрытый текст в Editorgadget
СообщениеДобавлено: Ср июл 19, 2017 3:43 pm 
Не в сети
док

Зарегистрирован: Пн сен 27, 2010 10:30 am
Сообщений: 143
Откуда: Уренгой
Благодарил (а): 0 раз.
Поблагодарили: 10 раз.
Пункты репутации: 5
Может пригодится кому. Для себя открыл возможность скрывать текст в Editorgadget. Выложу сюда, чтобы не потерять.
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
#EN_LINK = $70B 
#ENM_LINK = $4000000
#CFM_LINK = $20
#CFE_LINK = $20
#CFM_HIDDEN = $0100
 
 
; Теги
#Chr2=Chr(2)
#Chr3=Chr(3)
#Chr4=Chr(4)
 
 
Procedure.s GetURL(gadget,min,max)
text.s=GetGadgetText(gadget)
text.s=ReplaceString(text.s,Chr(13)+Chr(10),Chr(10))
hidetext.s=Left(text.s,max)
hidetext.s=StringField(hidetext.s, CountString(hidetext.s,#Chr2), #Chr4)
hidetext.s=Mid(hidetext.s,FindString(hidetext.s,#Chr2,1),Len(hidetext.s))
         
urltext.s=Left(hidetext.s,FindString(hidetext.s,#Chr3,1))
urltext.s=RemoveString(urltext.s,#Chr2)
urltext.s=RemoveString(urltext.s,#Chr3)
 ProcedureReturn urltext.s
EndProcedure
 
Procedure WndProc(hWnd, uMsg, wParam, lParam)
  result = #PB_ProcessPureBasicEvents
  Select uMsg  
    Case #WM_NOTIFY
      *el.ENLINK = lParam  
      If *el\nmhdr\code=#EN_LINK
        gadget=GetActiveGadget()
        Select *el\msg
           Case #WM_LBUTTONDOWN
             url.s= GetURL(gadget,*el\chrg\cpMin ,*el\chrg\cpMax)
            If url.s
               RunProgram(url.s)
            EndIf
        EndSelect
      EndIf
  EndSelect
  ProcedureReturn result
EndProcedure
 
Procedure LoadTxt(gadget,urltxt.s)
hndGdt=GadgetID(gadget)
SetGadgetText(gadget,urltxt.s)
min=1
 
For a=1 To CountString(urltxt.s, #Chr4)
urltxt.s=GetGadgetText(gadget)
urltxt.s=ReplaceString(urltxt.s,Chr(13)+Chr(10),Chr(10))
 
  min=FindString(urltxt.s, #Chr2, min+1)
  max=FindString(urltxt.s, #Chr4, min+1)
  url.s= Mid(urltxt.s,min+1,max-min)
 
st=Min-1
en=Max
 
 
SendMessage_(hndGdt, #EM_SETSEL, st, en)
SendMessage_(hndGdt, #EM_EXGETSEL, 0, chr.CHARRANGE)
SendMessage_(hndGdt, #EM_HIDESELECTION, #True, 0)
SendMessage_(hndGdt, #EM_SETSEL, st, en)
 
cf.CHARFORMAT2
cf\cbSize = SizeOf(CHARFORMAT2)
SendMessage_(hndGdt, #EM_GETCHARFORMAT, #SCF_SELECTION, cf)
cf\cbSize = SizeOf(CHARFORMAT2)
cf\dwMask|#CFM_HIDDEN
cf\dwEffects|#CFM_HIDDEN
SendMessage_(hndGdt, #EM_SETCHARFORMAT, #SCF_SELECTION, cf)
SendMessage_(hndGdt, #EM_EXSETSEL, 0, chr)
SendMessage_(hndGdt, #EM_HIDESELECTION, #False, 0)
 
Next a
 
 
 
min=1
 
For a=1 To CountString(urltxt.s, #Chr4)
urltxt.s=GetGadgetText(gadget)
 
urltxt.s=ReplaceString(urltxt.s,Chr(13)+Chr(10),Chr(10))
 
  min=FindString(urltxt.s, #Chr2, min+1)
  min2=FindString(urltxt.s, #Chr3, min+1)
  max=FindString(urltxt.s, #Chr4, min+1)
  url.s= Mid(urltxt.s,min2+1,max-min2)
st=max
en=max+Len(url.s)-1
 
 
SendMessage_(hndGdt, #EM_SETSEL, st, en)
SendMessage_(hndGdt, #EM_EXGETSEL, 0, chr.CHARRANGE)
SendMessage_(hndGdt, #EM_HIDESELECTION, #True, 0)
SendMessage_(hndGdt, #EM_SETSEL, st, en)
 
cf1.CHARFORMAT2
cf1\cbSize = SizeOf(CHARFORMAT2)
SendMessage_(hndGdt, #EM_GETCHARFORMAT, #SCF_SELECTION, cf1)
cf1\cbSize = SizeOf(CHARFORMAT2)
cf1\dwMask|#CFM_LINK
cf1\dwEffects|#CFE_LINK;|#CFM_BOLD
SendMessage_(hndGdt, #EM_SETCHARFORMAT, #SCF_SELECTION, cf1)
SendMessage_(hndGdt, #EM_EXSETSEL, 0, chr)
SendMessage_(hndGdt, #EM_HIDESELECTION, #False, 0)
SendMessage_(hndGdt, #EM_SETSEL, 0, 0)
Next a
 
EndProcedure
 
Procedure InsertHidenText(gadget,hiddentext$)
hndGdt=GadgetID(gadget)
 
SendMessage_(hndGdt, #EM_GETSEL, @Min,@Max)
If Min=0
Min=1
EndIf
 
SendMessage_(hndGdt, #EM_SETSEL, Min, Min)
en=Min+Len(hiddentext$)
SendMessage_(hndGdt,#EM_REPLACESEL,0,@hiddentext$)
SendMessage_(hndGdt, #EM_EXGETSEL, 0, chr.CHARRANGE)
SendMessage_(hndGdt, #EM_HIDESELECTION, #True, 0)
SendMessage_(hndGdt, #EM_SETSEL, Min, en)
 
cf.CHARFORMAT2
cf\cbSize = SizeOf(CHARFORMAT2)
SendMessage_(hndGdt, #EM_GETCHARFORMAT, #SCF_SELECTION, cf)
cf\cbSize = SizeOf(CHARFORMAT2)
cf\dwMask|#CFM_HIDDEN
cf\dwEffects=#CFM_HIDDEN
SendMessage_(hndGdt, #EM_SETCHARFORMAT, #SCF_SELECTION, cf)
SendMessage_(hndGdt, #EM_EXSETSEL, 0, chr)
SendMessage_(hndGdt, #EM_HIDESELECTION, #False, 0)
EndProcedure
 
Procedure.s CreateURL(gadget,url.s)
url.s=#Chr2+url.s+#Chr3
hndGdt=GadgetID(gadget)
SendMessage_(hndGdt, #EM_GETSEL, @Min,@Max)
If Min=0 ; c нулевой позицией текст не прячется
Min=1
EndIf
 
showtxt.s=GetGadgetText(gadget)
showtxt.s=ReplaceString(showtxt.s,Chr(13)+Chr(10),Chr(10))
 
 showtxt.s=Mid(showtxt.s,Min+1,Max-Min)
 url.s=url.s+showtxt.s+#Chr4
 ProcedureReturn url.s
EndProcedure
 
 
 
 
 
 
If OpenWindow(0, 500, 200, 505, 260, "PureBasic Window", #PB_Window_SystemMenu)=0:End:EndIf
; If CreateGadgetList(WindowID(0))=0:End:EndIf
 
EditorGadget(0, 0, 0, WindowWidth(0)-50, WindowHeight(0))
SendMessage_(GadgetID(0), #EM_SETEVENTMASK, 0, #ENM_LINK|SendMessage_(GadgetID(0), #EM_GETEVENTMASK, 0, 0))
 
ButtonGadget(1,WindowWidth(0)-50,80,50,20,"Set Link")
 
EditorText$ = "Выделите любое место в тексте и нажмите кнопку "+Chr(34)+GetGadgetText(1) +Chr(34)
 
SetGadgetText(0, EditorText$)
 
SetWindowCallback(@WndProc())
 
Link.s="http://purebasic.info/phpBB3ex/index.php"
 
 
 
Repeat:
event=WaitWindowEvent()
gadget=EventGadget()
Select event
 
Case #PB_Event_Gadget
        Select gadget  
          Case 1
            InsertHidenText(0,CreateURL(0,Link.s))
            LoadTxt(0,GetGadgetText(0))
        EndSelect
EndSelect        
       
Until event=#PB_Event_CloseWindow
End



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Скрытый текст в Editorgadget
СообщениеДобавлено: Ср июл 19, 2017 5:34 pm 
Не в сети
док

Зарегистрирован: Ср апр 16, 2014 5:56 pm
Сообщений: 113
Благодарил (а): 7 раз.
Поблагодарили: 6 раз.
Пункты репутации: 5
КЭС писал(а):
...открыл возможность скрывать текст в Editorgadget.

Ну не скрывать, а делать ссылку, да?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Скрытый текст в Editorgadget
СообщениеДобавлено: Ср июл 19, 2017 7:22 pm 
Не в сети
док

Зарегистрирован: Пн сен 27, 2010 10:30 am
Сообщений: 143
Откуда: Уренгой
Благодарил (а): 0 раз.
Поблагодарили: 10 раз.
Пункты репутации: 5
Ссылка - это пример использования. Она ведь в тексте спрятана.


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: Yahoo [Bot] и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB