PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Вопросы новичка


Вопросы новичка

Сообщений 91 страница 120 из 1000

91

Спасибо! Попробую так.

0

92

Пётр написал(а):

Вот пример побайтового чтения файла.

Это хороший ход, раз нет решения в один ход. Большое спасибо, Петр!
Сделал так:
   

Код:
      For i=0 To Size
        t1 = PeekA(*mem+i)
      If t1>0
      Text$ +Chr(t1)
      EndIf
      Next i
 
   Debug "Text$ = " + Text$

Работает!

0

93

TovSax написал(а):

Работает!

Работать то работает, но чем больше файл, тем медлнее работать будет.
Тормоза будут визуально заметны, если файл будет иметь размер, больше 100КБ.
Это особность работы со строками. Для добавления текста, сначала производится поиск конца строки и чем длинее строка, тем долше ищется её конец!

0

94

Вот так будет работать намного быстрее с большими файлами

Код:
   *TempMem=AllocateMemory(Size)
   CountMem=-1
      For i=0 To Size
        t1.a = PeekA(*mem+i)
      If t1>0
        CountMem+1
        PokeA(*TempMem+CountMem,t1)
      EndIf
      Next i
   Text$=PeekS(*TempMem,CountMem)
   FreeMemory(*TempMem)
   Debug "Text$ = " + Text$

0

95

Пётр написал(а):

Вот так будет работать намного быстрее с большими файлами

Красиво!!!

0

96

Как можно вставить программно в редактор jaPBe текст из буфера обмена или из памяти?  Окно я нашел, активизировал, а дальше не знаю ......

0

97

Данные нужно слать не окну, а редактору Scintilla.
Сначала нужно найти активный редактор, а потом передать ему текст.

Код:
SendMessage_(ID, #EM_REPLACESEL, 0, @Text.s)

0

98

Пётр написал(а):

активный редактор

Вот этого то я как раз и не знаю. куча топов , как найти чужое окно  и не могу найти, как отыскать кнопки, текст, или ... 

Пётр написал(а):

SendMessage_(ID, #EM_REPLACESEL, 0, @Text.s)

Именно так и хотел, думал если окно активизирую, можно будет вставить из буфера, но обломился.

0

99

Есть один вариант, правда изващённый.
Можно узнать размеры окна  jaPBe, вычислить его центр (там точно будет Scintilla) и передать эти координаты  функции

Код:
Wnd = WindowFromPoint_(Cursor\X|(Cursor\Y<<32))

ну а дальше уже

Код:
SendMessage_(Wnd, #EM_REPLACESEL, 0, @Text.s)

Можно конечно сделать как положенно, но для этого, нужно немного подумать....

0

100

Вот так работает, но вставляет только один символ. o.O

Код:
Procedure jaPBe_Paste(jaPBe_ID, Text1.s)
; jaPBe_ID.l - Здесь хендл окна проги jaPBe
; Text - Вставляемый текст
 
 Result=0 : MainClass${255}
 Win.RECT
 Center.POINT
 GetWindowRect_(jaPBe_ID, @Win) ; Размеры окна jaPBe
 
 Center\x = (Win\left+Win\right)/2 ; Вычисляем координаты центра окна
 Center\y = (Win\top+Win\bottom)/2
 
 EditID = WindowFromPoint_(Center\X|(Center\Y<<32))
 If EditID
   GetClassName_(EditID,@MainClass$,$FF)  ;получаем имя класса по хэндлу окна
   If LCase(MainClass$)="scintilla"
     SendMessage_(EditID, #EM_GETSEL, @CharPos1, @CharPos2) ; Убираем выделение, если есть выделеный текст
     SendMessage_(EditID, #EM_SETSEL, CharPos1, CharPos1)
     SendMessage_(EditID, #EM_REPLACESEL, 0, Text1)        ; Вставляем текст
     Result=1
   EndIf
 EndIf
 
ProcedureReturn Result
EndProcedure

0

101

Спасибо Петр!  Хоть от чего то буду отталкиваться. Может повезет и найду решение.

0

102

Оказывается, с этим редактором изобретать велосипед и не надо. На английском форуме мне подсказали, что в папке с редактором jaPBe\Sources\Plugin  есть либа base.pb для изготовления плугов.

0

103

Если не секрет, почему используешь jaPBe в место стандартного редактора из дистрибутива?

0

104

Пётр написал(а):

Если не секрет, почему используешь jaPBe в место стандартного редактора из дистрибутива?

Я не нашел DLL о которой ты мне упоминал как то. Для меня главное в написании программы это удобство. Плохая структура кода, пусть даже и моя, будет бесить меня когда начинаешь отлаживать и теряешь время на поиски той или иной части кода. А в редакторе jaPBe, автор просто умница, постарался на радость другим. Создал отличные условия для работы в этом редакторе. Начиная от ввода любой команды, появляется список возможных команд. Далее автоматом выставляется структура кода и не надо об этом заботиться. Я как то писал про линию отделяющую операторы процедуры и т д. Так вот в нем это тоже реализовано. Кроме того теперь понимаю, что есть возможность писать свои плуги. Это тоже немаловажно, поскольку что удобно для кого то, необязательно удобно для меня. И самое главное не теряется ничего из родного редактора, разве что русификкация. Но с этим делом я знаком более чем. Когда будет настрой, переведу редактор. Мне не понравился только встроенный плуг шаблоны, вот им и занимаюсь пока что.

0

105

haav написал(а):

Я не нашел DLL о которой ты мне упоминал как то

Напомни что за DLLка.

haav написал(а):

Начиная от ввода любой команды, появляется список возможных команд

Это есть и в редакторе пурика.
http://s54.radikal.ru/i144/1003/74/308a61321b6f.png

haav написал(а):

Кроме того теперь понимаю, что есть возможность писать свои плуги.

Для стандартного редактора тоже можно. Где-то был пример, но немогу найти. :(
Этот плагин как раз автоматом выставлял отступы.

0

106

Напомни что за DLLка.

Я неправильно выразился, плагин для автоотступа частей кода пример:

procedure
    if a=4
      end
    endif
endprocedure

0

107

Похоже я нашел этот плуг. Петр этот или был другой какой?  http://www.purebasic.fr/english/viewtop … mp;start=0

0

108

Похоже что он.

0

109

А нормально сделано, мне понравилось, молодец автор.

0

110

Пётр написал(а):

Если не секрет, почему используешь jaPBe в место стандартного редактора из дистрибутива?

Похоже, jaPBe  при компиляции из одного и того же исходника делает более короткие файлы... По крайней мере, несколько попыток на сравнительно коротких программах дали такой результат.

0

111

TovSax написал(а):

Похоже, jaPBe  при компиляции из одного и того же исходника делает более короткие файлы...

Как такое может быть? Ведь компилятор один и тот-же!

0

112

Пётр написал(а):

Как такое может быть? Ведь компилятор один и тот-же!

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

0

113

Пётр написал(а):

Как такое может быть? Ведь компилятор один и тот-же!

Мне это тоже непонятно. Проверить можно на файле:

Код:
; [url=https://purebasic.mybb.ru/viewtopic.php?id=17&p=2]Вопросы новичка[/url]   post 46



; Эта процедура вызывается по таймеру два раза в секунду.
Procedure DateStatusBar() 
  Time.s = FormatDate("%hh:%ii:%ss", Date() ) ; Узнаём текущее время
  StatusBarText(0, 0,Time) ; Выводим его на строку состояния
EndProcedure 
; Открываем окно
If OpenWindow(0,0,0,200,100,"Строка состояния",#PB_Window_MinimizeGadget | #PB_Window_ScreenCentered)
 If CreateGadgetList(WindowID(0))
   ; Создаём строку состояния
   CreateStatusBar(0, WindowID(0))
   ; Делим её на области
   AddStatusBarField(80)
   AddStatusBarField(120)
  StatusBarText(0, 1, " Текущее время") ; Выводим строку в область с идентификатором 1.
  
  SetTimer_(WindowID(0), 1, 500, @DateStatusBar() ) ; Вызываем функцию "SetTimer"
    
  Repeat
   Event=WaitWindowEvent()
  Until Event=#PB_Event_CloseWindow
  ; Вызываем функцию "KillTimer"
  KillTimer_(WindowID(0),1)
 
 EndIf
EndIf
End

Исполняемый файл у меня в одном случае получился 14, во втором 19.5 KB. Их внутреннюю структуру не смотрел.

0

114

Только что попробовал.
В том и другом случае, размер был 18.5КБ

0

115

TovSax написал(а):

Исполняемый файл у меня в одном случае получился 14, во втором 19.5 KB. Их внутреннюю структуру не смотрел.

Да.

http://file.qip.ru/file/123216875/eeae5 … nline.html

0

116

Кто нибудь, у кого есть Ollydbg запустите пожалуйста скомпилированный код, описанный ниже, из под него, меня интересует по какому адресу у вас будет прописана строка, обведенная в элипс: То есть выделить эту строку и скопировать в буфер, а потом отписать ее здесь. Прилагаю рисунок:

http://i023.radikal.ru/1003/cf/e7a9c3047bb4.jpg

Сам код:

Код:
 Enumeration
   #Window_0
EndEnumeration


Procedure Open_Window_0()
   If OpenWindow(#Window_0, 216, 0, 600, 600, "New window ( 0 )", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar)
      
   EndIf
EndProcedure

Open_Window_0()
ffff.s="12000"
Debug @ffff
  Repeat
    ev=WaitWindowEvent()
    
  Until ev=#PB_Event_CloseWindow

0

117

Вот
http://i051.radikal.ru/1003/30/ef123f970d08.png

PS.
Где русификатор взял для Ollydbg?

0

118

Пётр написал(а):

Где русификатор взял для Ollydbg?

Она частично русифицированная(в основном только меню), правда где то на каком то диске и была полностью русифицированная, но я ей пользоваться не смог.  Привык уже к английской. А эту поставил просто чтобы не искать свои сборки. Да и сейчас редко пользуюсь отладчиком, разве чтоб у казуалки жадность отбить. Эту скачивал на Cracklab(тоже чья то сборка)
А вообще ЗДЕСЬ посмотри:
Выберешь себе нужную сборку(там есть и русская, но похоже тоже наполовину русифицированная.

Насчет скрина, спасибо. Адреса разные, придется в моем случае все таки через файл INI данные между EXE передавать. WriteProcessMemory слишком гиморно будет. Надо как то адрес находить, но этого программным путем я пока делать не умею.  :(

0

119

На держи полностью русифицированный EXE:

Скачать

0

120

haav написал(а):

Адреса разные, придется в моем случае все таки через файл INI данные между EXE передавать. WriteProcessMemory слишком гиморно будет

Ну не так всё гиморно как кажется.
Можно через командную строку передать указатель на структуру, с помощью ReadProcessMemory скопировать структуру в свой процесс, изменить данные, а затем, отправить обратно с помощью WriteProcessMemory.
А что делать собираешся?

haav написал(а):

На держи полностью русифицированный EXE:

Спасибо! :cool:

0


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Вопросы новичка