purebasic.info

PureBasic forum
Текущее время: Сб дек 16, 2017 12:41 am

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




Начать новую тему Ответить на тему  [ Сообщений: 35 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Чт дек 30, 2010 10:43 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Сб окт 09, 2010 2:21 am
Сообщений: 326
Откуда: Киев
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Где-то так. С рекурсией не стал связываться, стек не резиновый.

Код:
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
EnableExplicit 
 
;----------------------------------
;Cимвол разделения строк
#ReturnSymbol="_"
 
;Пример:
;A="Привет _
;Медвед"
;Debug A
 
;----------------------------------
Enumeration
  #FILE_Input
  #FILE_Output
EndEnumeration
 
Global Dim FileToReplace$(0)
Global CurrentFile
Define Exit.b
 
Procedure.b ClearReturn()
 
  Define Temp$=GetTemporaryDirectory()+"ToolTest.pb"
  Define Line$, TMP$, File$
  Define.l Counter,I
  #IFile="Include"+"File "
 
  If CurrentFile>0
    If ArraySize(FileToReplace$())<CurrentFile
      ProcedureReturn 1
    EndIf
  EndIf
 
  File$=FileToReplace$(CurrentFile)
 
  If CopyFile(File$,Temp$)
    If ReadFile(#FILE_Input,File$)
      If CreateFile(#FILE_Output,Temp$)
        While Not Eof(#FILE_Input)
          Counter=0
          Line$=ReadString(#FILE_Input)
         
          I=FindString(Line$,#IFile,1)
          If I
            TMP$=Mid(Line$,I+Len(#IFile))
            TMP$=RemoveString(TMP$,#DQUOTE$)
            I=ArraySize(FileToReplace$())+1
            ReDim FileToReplace$(I)
            FileToReplace$(I)= TMP$
          EndIf
         
          While Right(Line$,Len(#ReturnSymbol))=#ReturnSymbol
            TMP$=Trim(ReadString(#FILE_Input))
            Line$=Left(Line$,Len(Line$)-Len(#ReturnSymbol))+ TMP$
            Counter+1
            MessageRequester("<" + TMP$ + ">",Line$)
          Wend
       
          WriteStringN(#FILE_Output, Line$)
          For I=1 To Counter
            WriteStringN(#FILE_Output, #NULL$)
          Next
         
        Wend
        CloseFile(#FILE_Output)
      EndIf
      CloseFile(#FILE_Input)
    EndIf
    DeleteFile(Temp$)
  EndIf
 
EndProcedure
 
FileToReplace$(0)=ProgramParameter()
 
Repeat
  Exit=ClearReturn()
  CurrentFile+1
Until Exit




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

P.S. Что там вы говорили за отлов дескриптора окна IDE? Или как сделать чтоб после компиляции загруженные исходники снова сохранялись в файлы.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн авг 01, 2011 12:25 am 
Не в сети
ассистент

Зарегистрирован: Вт июн 21, 2011 12:17 pm
Сообщений: 20
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Добавляем небольшую, но полезную кнопку на панель инструментов редактора кода PureBasic'а

Кликая левой кнопкой на зелёной области и перемещая мышь передвигаем CheckBox.
Клик правой кнопки мыши на зелёной области убирает кнопку с панели инструментов и закрывает её процесс.
Клик на CheckBox'e вкл/выкл перенос строк.

Будьте осторожны,пример требует более тщательного тестирования, сообщите об ошибках при случае их возникновения и помогите в их разрешении, на данный момент в редких случаях IDE PureBasic вылетает с сообщением "An Error has been detected in the IDE! Error Invalid Memory access" ?

Код:
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
Global hwnd1,hpbwnd,cln${10}
 
#CWP_SKIPINVISIBLE=1
#CWP_SKIPDISABLED=2
#CWP_SKIPTRANSPARENT=4
 
;{
; http://www.scintilla.org/ScintillaDoc.html
; константы - Scintilla.h
; http://scintilla.bzr.sourceforge.net/bzr/scintilla/files/head%3A/include/
 
; вкл/выкл перенос строк
#SCI_SETWRAPMODE=2268
#SCI_GETWRAPMODE=2269
 
#SC_WRAP_NONE=0
#SC_WRAP_WORD=1
#SC_WRAP_CHAR=2
 
; вкл/выкл символа отображающего перенос строки
#SCI_SETWRAPVISUALFLAGS=2460
#SCI_GETWRAPVISUALFLAGS=2461
 
#SC_WRAPVISUALFLAG_NONE=0
#SC_WRAPVISUALFLAG_END=1
#SC_WRAPVISUALFLAG_START=2
 
; отрисовывать символ переноса строки возле бордюра (по умолчанию) или текста
#SCI_SETWRAPVISUALFLAGSLOCATION=2462
#SCI_GETWRAPVISUALFLAGSLOCATION=2463
 
#SC_WRAPVISUALFLAGLOC_DEFAULT=0
#SC_WRAPVISUALFLAGLOC_END_BY_TEXT=1
#SC_WRAPVISUALFLAGLOC_START_BY_TEXT=2
 
; режим определяющий с каким отступом будет перенесена следующая строка по отношению к предыдущей
; фиксированный по умолчанию
#SCI_SETWRAPINDENTMODE=2472
#SCI_GETWRAPINDENTMODE=2473
 
#SC_WRAPINDENT_FIXED=0
#SC_WRAPINDENT_SAME=1
#SC_WRAPINDENT_INDENT=2
 
; размер отступа - кол-во символов
#SCI_SETWRAPSTARTINDENT=2464
#SCI_GETWRAPSTARTINDENT=2465
;}
 
Procedure EnumWindowsProc(hwnd,lParam)
  Static PBTitle$="PureBasic"
  Static WndText${9}
  If Not lParam
    If GetWindowText_(hwnd,@WndText$,10)
      If WndText$=PBTitle$
        hpbwnd=hwnd
        ProcedureReturn 0
      EndIf
    EndIf
  Else
    If GetClassName_(hwnd,@cln$,10)
      If cln$="Scintilla"
        If IsWindowVisible_(hwnd)
          If Not SendMessage_(hwnd,#SCI_GETWRAPMODE,0,0)
            PostMessage_(hwnd,#SCI_SETWRAPMODE,#SC_WRAP_CHAR,0)
            PostMessage_(hwnd,#SCI_SETWRAPVISUALFLAGS,#SC_WRAPVISUALFLAG_START|#SC_WRAPVISUALFLAG_END,0)
            PostMessage_(hwnd,#SCI_SETWRAPSTARTINDENT,2,0)
            SetGadgetState(0, State)
            SetGadgetState(0,1)
          Else
            PostMessage_(hwnd,#SCI_SETWRAPMODE,0,0)
            SetGadgetState(0,0)
          EndIf
          ProcedureReturn 0
        EndIf
      EndIf
    EndIf
  EndIf
  ProcedureReturn 1
EndProcedure
 
Procedure WndProc(Hwnd,Msg,wParam,lParam)
  Select Msg
    Case #WM_DESTROY
      PostMessage_(hwnd1,#WM_CLOSE,0,0)
    Case #WM_LBUTTONDOWN
      PostMessage_(hwnd1,#WM_NCLBUTTONDOWN,#HTCAPTION,0)
    Case #WM_RBUTTONUP
      PostMessage_(hwnd1,#WM_CLOSE,0,0)
  EndSelect
  ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
 
hwnd1=OpenWindow(0,0,0,13,13,"",#PB_Window_ScreenCentered|#PB_Window_BorderLess|#WS_CLIPCHILDREN)
hchb1=CheckBoxGadget(0,0,0,13,13,"")
EnumWindows_(@EnumWindowsProc(),0)
hpbtoolbar=FindWindowEx_(hpbwnd,0,@"ToolbarWindow32",0)
 
If hwnd1 And hpbwnd And hpbtoolbar
  SetWindowColor(0,$8DCC94)
  SetWindowLong_(hpbtoolbar,#GWL_STYLE,GetWindowLong_(hpbtoolbar,#GWL_STYLE)|#WS_CLIPCHILDREN);|#WS_CLIPSIBLINGS)
  SetParent_(hwnd1,hpbtoolbar)
  SetWindowPos_(hwnd1,#HWND_TOP,500,4,26,13,#SWP_SHOWWINDOW)
  SetWindowCallback(@WndProc())
 
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_Gadget
        If EventType()=#PB_EventType_LeftClick
          EnumChildWindows_(hpbwnd,@EnumWindowsProc(),1)
        EndIf
      Case #PB_Event_CloseWindow
        End
    EndSelect
  ForEver
EndIf



Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн авг 01, 2011 6:01 am 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6206
Благодарил (а): 16 раз.
Поблагодарили: 171 раз.
Пункты репутации: 48
kirtech писал(а):
Добавляем небольшую, но полезную кнопку на панель инструментов редактора кода PureBasic'а

А что, тоже вариант. Мне нравится!
Даже странно, что такой простой фишки нет в редакторе изначально. Лично я даже и не знал, что в Scintillе она есть в принципе :?
P.S. Покопался на официальном форуме - оказывается эта тема с подобным кодом уже поднималась давно. Странно, что в официальных настройках IDE до сих пор нет такой фишки.

_________________
read-only


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн авг 01, 2011 11:29 am 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11070
Благодарил (а): 4 раз.
Поблагодарили: 381 раз.
kvitaliy писал(а):
Лично я даже и не знал, что в Scintillе она есть в принципе
Есть и я упоминал об этом в 4 посте данной темы:
Пётр писал(а):
Движок редактора пурика поддерживает перенос по словам, но эта возможность не реализована.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн авг 01, 2011 11:38 am 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6206
Благодарил (а): 16 раз.
Поблагодарили: 171 раз.
Пункты репутации: 48
Пётр писал(а):
Есть и я упоминал об этом в 4 посте данной темы:

Да но кода не было и ещё написал:
Цитата:
Сложность в том, что это нужно делать однократно при создании новой вкладки.

А тут эта проблема решена - у меня переносит на всех вкладках, хотя код запущен только в одной.

_________________
read-only


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн авг 01, 2011 12:01 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11070
Благодарил (а): 4 раз.
Поблагодарили: 381 раз.
kvitaliy писал(а):
А тут эта проблема решена
Скажешь что это корректное решение?

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн авг 01, 2011 12:27 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6206
Благодарил (а): 16 раз.
Поблагодарили: 171 раз.
Пункты репутации: 48
Пётр писал(а):
Скажешь что это корректное решение?

Нет, конечно. Но для домашнего пользования сойдет. Тем более, что исходник ни как не модифицируется, а значит совместимость с любыми редакторами.
Меня другое удивляет - почему Фред не сделает эту фичу, если это поддерживается на уровне Scintilla?

_________________
read-only


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн дек 17, 2012 11:36 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11070
Благодарил (а): 4 раз.
Поблагодарили: 381 раз.
Если я правильно понял, Фред обещает что в следующей версии будет поддержка переноса кода на несколько строк.
Цитата:
Here is a scoop: it will be in the next version. It wasn't as easy as people think. The PB parser is somehow complex and you can't just add such feature like that. The most important to me was to avoid a compilation time degradation, so when I recently found a good way to do it, I did it with no speed penalty.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re:
СообщениеДобавлено: Чт дек 12, 2013 7:37 pm 
Не в сети
доцент
Аватар пользователя

Зарегистрирован: Чт мар 22, 2012 9:01 am
Сообщений: 43
Откуда: Брянщина
Благодарил (а): 6 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Пётр писал(а):
Если я правильно понял, Фред обещает что в следующей версии будет поддержка переноса кода на несколько строк.
Цитата:
Here is a scoop: it will be in the next version. It wasn't as easy as people think. The PB parser is somehow complex and you can't just add such feature like that. The most important to me was to avoid a compilation time degradation, so when I recently found a good way to do it, I did it with no speed penalty.

так и не раелизовано? а очень хочется...


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Чт дек 12, 2013 7:40 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11070
Благодарил (а): 4 раз.
Поблагодарили: 381 раз.
Реализовано, если не ошибаюсь в версии 5.10.
Код:
1
2
MessageRequester("Заголовок",
                 "Текст")

Но есть нюансы. Перенос строк возможен если в конце строки один из символов.
Цитата:
, | + And Or XOr

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Чт дек 12, 2013 9:03 pm 
Не в сети
доцент
Аватар пользователя

Зарегистрирован: Чт мар 22, 2012 9:01 am
Сообщений: 43
Откуда: Брянщина
Благодарил (а): 6 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Пётр писал(а):
Реализовано, если не ошибаюсь в версии 5.10.
Код:
1
2
MessageRequester("Заголовок",
                 "Текст")

Но есть нюансы. Перенос строк возможен если в конце строки один из символов.
Цитата:
, | + And Or XOr

понятно
не, у меня версия гораздо старее.... пока еще не знаю: буду покупать или в ломанной поработаю...
ПБ бывает надо раз в год...


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пн дек 04, 2017 4:24 pm 
Не в сети
доцент

Зарегистрирован: Вт апр 16, 2013 2:00 pm
Сообщений: 30
Откуда: Волгодонск
Благодарил (а): 1 раз.
Поблагодарили: 3 раз.
Пункты репутации: 5
Извините за возможный некропостинг, я так и не понял, альтернативы нет вижуалбейсиковскому подчеркиванию?

У меня тут уже который SQL запрос в программе, нормально не могу его отформатировать, приходится строки рвать на клочки, сам уже не понимаю где что, он нечитаем.
И я рву строковый ЛИТЕРАЛ, а не длинную строку кода.
То есть куски програмы выглядят как:
Код:
1
2
3
Query$ = "SELECT T1.aaa, T1.bbb, T2.ccc from ........  "
Query$ + "LEFT JOIN (SELECT aaa, bbb, ccc from ........ "
Query$ + "UNION ALL ........      "



и так далее чтобы более менее читать можно было.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пн дек 04, 2017 4:44 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11070
Благодарил (а): 4 раз.
Поблагодарили: 381 раз.
Код:
1
2
3
Query$ = "SELECT T1.aaa, T1.bbb, T2.ccc from ........  "+
         "LEFT JOIN (SELECT aaa, bbb, ccc from ........ "+
         "UNION ALL ........"


_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Чт дек 07, 2017 3:45 pm 
Не в сети
доцент

Зарегистрирован: Вт апр 16, 2013 2:00 pm
Сообщений: 30
Откуда: Волгодонск
Благодарил (а): 1 раз.
Поблагодарили: 3 раз.
Пункты репутации: 5
Спасибо, чуток получше, но всё равно огромная проблема переноса из кода в редактор запросов для отладки и обратно в код :(
Может как-то иначе можно, чтобы запросы по файликам *.sql лежали, а потом при сборке проекта подключить их? Сегодня один запрос, завтра их десять, а ещё когда надо параметры туда воткнуть или условия дополнить динамически, что делать?
Ужс, ужс...


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт дек 08, 2017 7:29 am 
Не в сети
профессор

Зарегистрирован: Вт май 13, 2014 4:12 am
Сообщений: 527
Благодарил (а): 51 раз.
Поблагодарили: 15 раз.
Пункты репутации: 5
doremi писал(а):
что делать?

как то так
Код:
1
2
3
4
5
6
 
Global qt.s=Chr(34), qt2.s=qt+qt; кавычка
"<meta charset="+qt+"utf-8"+qt+">"
"<th>"+srL()\l+">"+srL()\k+"</a></th><td>"
а с условиями сложней, сначала проверяешь и результат ложишь в переменную, а потом эту переменную вставляешь в строку
 


Пётр, а какая тут разница?
Код:
1
2
3
4
5
6
7
8
9
10
11
 
Query$ = "SELECT T1.aaa, T1.bbb, T2.ccc from ........  "
Query$ + "LEFT JOIN (SELECT aaa, bbb, ccc from ........ "
Query$ + "UNION ALL ........      "
 
 
Query$ = "SELECT T1.aaa, T1.bbb, T2.ccc from ........  "+
             "LEFT JOIN (SELECT aaa, bbb, ccc from ........ "+
             "UNION ALL ........"
 
 


так есть маленькая, но экономия строки, а в твоём варианте где выигрышь?, пробелы надо вбивать и при этом следить за выравниванием, морока да и только
длина строки одинакова в обоих вариантах, не вижу разницы, объясните
Код:
1
2
3
4
5
 
Query$ = "SELECT T1.aaa, T1.bbb, T2.ccc from ........  "+
"LEFT JOIN (SELECT aaa, bbb, ccc from ........ "+
"UNION ALL ........"
 





ну и риторический вопрос, а как это сделано в других редакторах? в нормальных редакторах проблемы нет


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

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


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

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


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

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