Я искал по словам связанным с этим и ничего не получил.
Вопросы новичка (продолжение…)
Сообщений 601 страница 630 из 990
Поделиться60222.07.2011 15:54:25
Спасибо Пётр как всегда.
Поделиться60323.07.2011 23:37:13
Добрый день!
Подскажите, кокой командой можно перейти на следующую строчку в файле.
Поделиться60424.07.2011 12:49:34
Это нужно?
File.s=OpenFileRequester("","","Текстовые файлы|*.txt|Все файлы|*.*",0)
If File
If ReadFile(0, File) ; if the file could be read, we continue...
While Eof(0) = 0 ; loop as long the 'end of file' isn't reached
Debug ReadString(0) ; display line by line in the debug window
Wend
CloseFile(0) ; close the previously opened file
Else
MessageRequester("Information","Не получилось открыть файл")
EndIf
EndIfПоделиться60524.07.2011 13:53:24
Нет не то.Мне, например, надо записать в файл масив, я делаю так:
For i.c=1 To 10 Step 1
WriteString(1, st.s(i))
next i
В файле, например, получается так:
1 2 3 4 5 6 7 8 9
А мне надо чтобы получилось так:
1
2
3
4
5
6
7
8
9
Поделиться60624.07.2011 14:58:41
Нужно использовать функцию WriteStringN в место WriteString.
Поделиться60724.07.2011 19:08:42
Спасибо! Всё получилось.
И ещё вопрос, мне например нужно загрузить двумерный массив из файла, в файле он представлен так:
1 2 3
4 5 6
7 8 9
Если не трудно, напишите как это сделать.
Поделиться60804.08.2011 15:21:43
Здравствуйте, у меня проблема со структурой. Вот код:
Structure dua dua_actoid.s; актоид кластера Dim duacid.s(5,1); массив со всеми Дуацидами EndStructure nomer_duacid.l = 0; количество элементов для массива дуацидов (один элемент для одного кластера) Global mas_duacid.dua(nomer_duacid); сам массив структур
При запуске выдаёт ошибку: a field a structure needs an explicit declared type
Если пишу вот так:
Structure dua dua_actoid.s; актоид кластера Array duacid.s(5,1); массив со всеми Дуацидами EndStructure nomer_duacid.l = 0; количество элементов для массива дуацидов (один элемент для одного кластера) Global mas_duacid.dua(nomer_duacid); сам массив структур
При запуске выдаёт такую ошибку: Multi-dimension array are not supported inside structure
Это значит, нет вообще ни какого способо объявить многомерный массив внутри структуры?
А ещё вопрос, как сделать какой нибудь гаджет не видимым на форме?
Поделиться60904.08.2011 17:08:12
Это значит, нет вообще ни какого способо объявить многомерный массив внутри структуры?
Статические массивы в структурах
Тут написано интересно
Статические массивы в структурах немного отличаются от обычных массивов, которые были
описаны ранее. Статические массивы в самой своей природе являются статичными и поэтому не могут быть изменены,
после того, как они определены. Эти типы массивов существуют только в рамках структуры.Статические массивы также имеют различный набор правил, которые учитывается при их использовании:
1). Как только статический массив определен, его внутренняя структура не может быть изменена.
2). Статические массивы (как структуры) не могут быть переопределены.
3). Они могут быть сделаны только из одного типа переменной (структурированного или стандартного типа переменной).
4). Размер массива ограничен только установленной оперативной памятью текущей машины.
5). У статических массивов может только быть одна размерность.
6). Они могут быть динамически определены, используя переменную или выражение, в которой задается размер
7). При определении размера , вы определите кол-во индексов и оно показывает реальный размер массива.
8). Статические массивы могут быть доступны только через структуру переменных, в которых они определены.
Скрыть гаджет
HideGadget(#Gadget, State)
Поделиться61004.08.2011 17:39:19
Это значит, нет вообще ни какого способо объявить многомерный массив внутри структуры?
Ну почему же, можно создать еще одну структуру с массивом и тогда массив будет двухмерный.
Structure duacid Array a.s(1) EndStructure Structure dua dua_actoid.s; актоид кластера Array duacid.duacid(5); массив со всеми Дуацидами EndStructure nomer_duacid.l = 0; количество элементов для массива дуацидов (один элемент для одного кластера) Global mas_duacid.dua mas_duacid\duacid(2)\a(1) = ""
Поделиться61105.08.2011 16:02:09
ВиниПур, Пётр благодарю.
Поделиться61205.08.2011 18:03:45
Здравствуйте, У меня на форме editirgadget, мне нужно, чтобы на нём строки были разного цвета. Вот пример кода:
OpenWindow(1,200,300,300,300, "Окно", #PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget)
EditorGadget(2, 10, 20, 1020, 80)
CompilerSelect #PB_Compiler_OS;условная компиляция, чтобы Api константы могли подставится для нужной ОС,
CompilerCase #PB_OS_Windows; эти константы нужны для разрешения переноса по словам в EditorGadget
SendMessage_(GadgetID(2),#EM_SETTARGETDEVICE, #Null, 0); разрешено для Windows и Linux
CompilerCase #PB_OS_Linux
gtk_text_view_set_wrap_mode_(GadgetID(2), #GTK_WRAP_NONE)
CompilerEndSelect
SetGadgetColor(2,#PB_Gadget_FrontColor,RGB(20,20,160)) ; Цвет текста
SetGadgetText(2,GetGadgetText(2)+"Первая строка"+ Chr(13))
SetGadgetColor(2,#PB_Gadget_FrontColor,RGB(200,20,0)) ; Цвет текста
SetGadgetText(2,GetGadgetText(2)+"Вторая строка"+ Chr(13))
Repeat
event=WaitWindowEvent()
Until event=#PB_Event_CloseWindowИ цвет обоих строк всё равно один, который указан последним, а как сделать, чтобы для каждой строки определять свой цвет?
Поделиться61305.08.2011 19:13:55
В КодАрхиве есть много требуемых примеров.
Вот один из них:
Structure CHARFORMAT2_
cbSize.l
dwMask.l
dwEffects.l
yHeight.l
yOffset.l
crTextColor.l
bCharSet.b
bPitchAndFamily.b
szFaceName.b[#LF_FACESIZE]
_wPad2.w
wWeight.w
sSpacing.w
crBackColor.l
lcid.l
dwReserved.l
sStyle.w
wKerning.w
bUnderlineType.b
bAnimation.b
bRevAuthor.b
bReserved1.b
EndStructure
Procedure EditorBackColor(Gadget, Color.l)
format.CHARFORMAT2_
format\cbSize = SizeOf(CHARFORMAT2_)
format\dwMask = $4000000 ; = #CFM_BACKCOLOR
format\crBackColor = Color
SendMessage_(GadgetID(Gadget), #EM_SETCHARFORMAT, #SCF_SELECTION, @format)
EndProcedure
Procedure EditorSelect(Gadget, LineStart.l, CharStart.l, LineEnd.l, CharEnd.l)
sel.CHARRANGE
sel\cpMin = SendMessage_(GadgetID(Gadget), #EM_LINEINDEX, LineStart, 0) + CharStart - 1
If LineEnd = -1
LineEnd = SendMessage_(GadgetID(Gadget), #EM_GETLINECOUNT, 0, 0)-1
EndIf
sel\cpMax = SendMessage_(GadgetID(Gadget), #EM_LINEINDEX, LineEnd, 0)
If CharEnd = -1
sel\cpMax + SendMessage_(GadgetID(Gadget), #EM_LINELENGTH, sel\cpMax, 0)
Else
sel\cpMax + CharEnd - 1
EndIf
SendMessage_(GadgetID(Gadget), #EM_EXSETSEL, 0, @sel)
EndProcedure
; Set the Text color for the Selection
; in RGB format
Procedure EditorColor(Gadget, Color.l)
format.CHARFORMAT
format\cbSize = SizeOf(CHARFORMAT)
format\dwMask = #CFM_COLOR
format\crTextColor = Color
SendMessage_(GadgetID(Gadget), #EM_SETCHARFORMAT, #SCF_SELECTION, @format)
EndProcedure
; Set Font Size for the Selection
; in pt
Procedure EditorFontSize(Gadget, Fontsize.l)
format.CHARFORMAT
format\cbSize = SizeOf(CHARFORMAT)
format\dwMask = #CFM_SIZE
format\yHeight = FontSize*20
SendMessage_(GadgetID(Gadget), #EM_SETCHARFORMAT, #SCF_SELECTION, @format)
EndProcedure
; Set Font for the Selection
; You must specify a font name, the font doesn't need
; to be loaded
Procedure EditorFont(Gadget, FontName.s)
format.CHARFORMAT
format\cbSize = SizeOf(CHARFORMAT)
format\dwMask = #CFM_FACE
PokeS(@format\szFaceName, FontName)
SendMessage_(GadgetID(Gadget), #EM_SETCHARFORMAT, #SCF_SELECTION, @format)
EndProcedure
; Set Format of the Selection. This can be a combination of
; the following values:
; #CFM_BOLD
; #CFM_ITALIC
; #CFM_UNDERLINE
; #CFM_STRIKEOUT
Procedure EditorFormat(Gadget, Flags.l)
format.CHARFORMAT
format\cbSize = SizeOf(CHARFORMAT)
format\dwMask = #CFM_ITALIC|#CFM_BOLD|#CFM_STRIKEOUT|#CFM_UNDERLINE
format\dwEffects = Flags
SendMessage_(GadgetID(Gadget), #EM_SETCHARFORMAT, #SCF_SELECTION, @format)
EndProcedure
; -------------------------------------------------------------
; Source Example:
;- Save *******
Procedure StreamFileOut_Callback(hFile, pbBuff, cb, pcb)
ProcedureReturn WriteFile_(hFile, pbBuff, cb, pcb, 0)!1
EndProcedure
; Hier eine Procedure + Callback zum speichern einer Datei:
;
; FileID freie ID fьr Dateioperationen
; File Die Datei ggf. mit Pfad
; Gadget Gadget ID vom EditorGadget()
Procedure FileStreamOut(FileID.l, File.s, Gadget.l)
r.b=0
Protected StreamData.EDITSTREAM
;Wenn die Datei erzeugt werden kann, fortfahren.
If CreateFile(FileID, File)
;Das Handle der Datei speichern
StreamData\dwCookie = FileID(FileID)
StreamData\dwError = #Null
;Die Adresse der Callback Procedure speichern
StreamData\pfnCallback = @StreamFileOut_Callback()
;Das RichEdit Control anweisen, den Stream zu aktivieren
SendMessage_(GadgetID(Gadget), #EM_STREAMOUT, #SF_RTF, @StreamData)
;Datei schliessen
CloseFile(FileID)
r.b=1
EndIf
ProcedureReturn r
EndProcedure
#Editor = 1
If OpenWindow(0, 0, 0, 500, 500, "EditorGadget", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
If CreateGadgetList(WindowID(0))
ButtonGadget(0,40,10,220,28,"Сохранить в файле и открыть в Ворде")
EditorGadget(#Editor, 10, 50, 480, 430)
AddGadgetItem(#Editor, 0, "This is a blue, bold and underlined big text")
AddGadgetItem(#Editor, 1, "Times new Roman, red, striked out and italic")
AddGadgetItem(#Editor, 2, "This is usual text, with a yellow background color")
AddGadgetItem(#Editor, 3, "This is usual Text.")
EditorSelect(#Editor, 0, 1, 0, -1) ; select line 1
EditorColor(#Editor, RGB(0,0,255))
EditorFontSize(#Editor, 18)
EditorFormat(#Editor, #CFM_UNDERLINE)
EditorSelect(#Editor, 1, 1, 1, -1) ; select line 2
EditorColor(#Editor, RGB(255,0,0))
EditorFont(#Editor, "Times New Roman")
EditorFormat(#Editor, #CFM_ITALIC|#CFM_STRIKEOUT)
EditorSelect(#Editor, 2, 1, 2, -1) ; select line 2
EditorBackColor(#Editor, RGB(255,200,100))
EditorSelect(#Editor, 0, 0, 0, 0) ; select nothing again
Repeat
Event=WaitWindowEvent()
If Event=#PB_Event_Gadget
If EventGadget()=0
FileStreamOut(0, "Temp.rtf", 1)
Delay(200)
If FileSize("Temp.rtf")>0
RunProgram("Temp.rtf")
Else
MessageRequester("", "Проблемы при создании файла!", #MB_OK|#MB_ICONERROR)
EndIf
EndIf
EndIf
Until Event = #PB_Event_CloseWindow
EndIf
EndIf
EndПоделиться61427.08.2011 11:48:41
А можно ли из процедуры вывести несколько переменных? Или так, чтобы одним из входных параметров для процедуры было название массива, а процедура работала с самим массивом??
Поделиться61527.08.2011 16:11:20
А можно ли из процедуры вывести несколько переменных?
Можно.
Проще всего это сделать через структуру.
Structure Proba x.l y.l Text.s EndStructure test.Proba ; Объявление структуры Procedure Test(*var.Proba) *var\x=1 *var\y=2 *var\Text="Текст" EndProcedure Test(@test) ; Вызываем процедуру и передаём ей указатель на структуру ; Отображаем в отладочном окне данные из структуры Debug test\x Debug test\y Debug test\Text
Или так, чтобы одним из входных параметров для процедуры было название массива, а процедура работала с самим массивом??
Это тоже возможно.
Procedure fill(Array B.l(1)) ; the 1 stays for the number of dimensions in the array
length = ArraySize(B())
For i = 0 To length
B(i) = i
Next i
EndProcedure
Dim A.l(10)
fill(A()) ; the array A() will be passed as parameter here
Debug A(5)
Debug A(10)Поделиться61627.10.2011 04:09:51
Подскажите, как определить сколько и какие буквы (c:\ d:\) винчестеров есть на компьютере? 
Поделиться61727.10.2011 07:49:17
Подскажите, как определить сколько и какие буквы (c:\ d:\) винчестеров есть на компьютере?
В примере List_ComputerDrives.pb есть такой код
Procedure GetAllDrives()
; create linked list to store drive name
Global NewList Drive.DriveInfos()
; Get all drives letter
AllDrivesNames.s = Space(255) ; AllDrivesNames receive string from GetLogicalDriveStrings API
*AllDrivesNames.l = @AllDrivesNames
DrivesExist.l = GetLogicalDriveStrings_(255,*AllDrivesNames)
NbOfDrives.b = 0
If DrivesExist
NbOfDrives = DrivesExist/4
lpFileSystemNameBuffer.s = Space(255)
For i.b = 1 To NbOfDrives
AddElement(Drive())
;;-------- Drive letter
;; Drive()\Name have 3 chars : first the drive letter
;; second ":"
;; third "\"
Drive()\DriveLetter = UCase(PeekS(*AllDrivesNames,3))
*AllDrivesNames + 4
;;-------- Volume name
Drive()\NameOfVolume = ""
GetVolumeInformation_(Drive()\DriveLetter,Drive()\NameOfVolume,255,0,0,0,lpFileSystemNameBuffer,255)
If Len(Drive()\NameOfVolume)
Drive()\NameOfVolume = UCase(Left(Drive()\NameOfVolume ,1)) + LCase(Mid(Drive()\NameOfVolume ,2,Len(Drive()\NameOfVolume)-1))
Else
Drive()\NameOfVolume = ""
EndIf
; determine type of drive
Drive()\DriveType = GetDriveType_(@Drive()\DriveLetter)
Select Drive()\DriveType
Case 0 ; drive not determined
Drive()\DriveTypeString = "Indetermined Type"
Case 1 ; 1 The root directory does not exist
Drive()\DriveTypeString = "Root directory does not exist"
Case #DRIVE_REMOVABLE ;The drive can be removed from the drive.
Drive()\DriveTypeString = "Floppy disk"
Case #DRIVE_FIXED ; The disk cannot be removed from the drive.
Drive()\DriveTypeString = "Not removed disk"
Case #DRIVE_REMOTE ; The drive is a remote (network) drive.
Drive()\DriveTypeString = "Remote (network) drive"
Case #DRIVE_CDROM ; The drive is a CD-ROM drive.
Drive()\DriveTypeString = "CD-ROM"
Case #DRIVE_RAMDISK ; The drive is a RAM disk.
Drive()\DriveTypeString = "RAM disk"
Default
Drive()\DriveTypeString = "Indetermined Type"
EndSelect
Next i
EndIf
EndProcedureПоделиться61827.10.2011 13:54:24
SadStar, спасибо 
Только матюкается в строке - Global NewList Drive.DriveInfos(), на DriveInfos() - Говорит не найдено
И ещё как написать уделание одинаковых строк в файле. Часа 2 мучался не как не придумал
Отредактировано Виталий (28.10.2011 01:13:08)
Поделиться61927.10.2011 16:17:49
Как вариант:
Загрузить все строки из файла в связанный список.
Скопировать строки в другой список проверяя чтобы не было совпадений.
Сохранить в файле строки из этого, другого списка.
Поделиться62028.10.2011 01:03:41
Где можно почитать про подоюные функции - GetDriveType_ ?
В стандарном Хелпе такого нет
Поделиться62128.10.2011 01:32:56
Где можно почитать про подоюные функции - GetDriveType_ ?
Нужно ввести имя функции в поисковике и как правило, первая же ссылка будет описанием http://msdn.microsoft.com/en-us/library … p/aa364939(v=vs.85).aspx
Поделиться62229.10.2011 13:27:49
Нужно ввести имя функции в поисковике и как правило, первая же ссылка будет описанием http://msdn.microsoft.com/en-us/library … p/aa364939(v=vs.85).aspx
Может есть какойто help.CHM по функциям. А то хотелось бы почитать, про функции которых ещё не знаю.
Поделиться62429.10.2011 15:23:10
Win32.zip
Вот эту справку нужно распаковать (будут 3 файла) и скопировать в папку Help, PureBasic. Если такой папки нет, то ее нужно создать.
Тогда справка на WinAPI функцию будет вызываться по F1, что довольно удобно. Подробней здесь.
Поделиться62530.10.2011 07:08:33
Пытаюсь написать плагин для программы rainmeter. Вот пример плагина на С++. Как сделать dllexport на purebasic?
Этот кусок
extern "C"
{
__declspec( dllexport ) UINT Initialize(HMODULE instance, LPCTSTR iniFile, LPCTSTR section, UINT id);
__declspec( dllexport ) void Finalize(HMODULE instance, UINT id);
__declspec( dllexport ) double Update2(UINT id);
__declspec( dllexport ) UINT GetPluginVersion();
__declspec( dllexport ) LPCTSTR GetPluginAuthor();
}
Поделиться62630.10.2011 13:14:10
Нужно создать DLL?
Об этом можно прочитать здесь.
Должно быть примерно так:
ProcedureCDLL Initialize(instance, *iniFile, *section, id) EndProcedure ProcedureCDLL Finalize(instance, id) EndProcedure ProcedureCDLL.d Update2(id) EndProcedure ProcedureCDLL GetPluginVersion() EndProcedure ProcedureCDLL.s GetPluginAuthor() EndProcedure
Поделиться62731.10.2011 15:30:36
а вы не подскажете: как мне запихнуть картинку в массив.
(их будеть много)
---
dim images_my (16,16) images(1,0)= ... --...--- images(16,16)= ...
---
что бы я не загружал их а что бы они были в коде (images(x,x))
и один файл (*.exe) и все. 
(шась 1 - exe, 256 - images)
Поделиться62831.10.2011 16:36:50
GGGraz примерно так
CatchImage(images_1, ?images_my1)
CatchImage(images_2, ?images_my2)
CatchImage(images_3, ?images_my3)
CatchImage(images_4, ?images_my4)
;....................
;все остальные имаджи
;....................
CatchImage(images_253, ?images_my253)
CatchImage(images_254, ?images_my254)
CatchImage(images_255, ?images_my255)
CatchImage(images_256, ?images_my256)
IncludePath "путь/до/папки/с/картинками"
DataSection
images_my1: IncludeBinary "Logo1.bmp"
images_my2: IncludeBinary "Logo2.bmp"
images_my3: IncludeBinary "Logo3.bmp"
images_my4: IncludeBinary "Logo4.bmp"
;.................................
;все остальные картинки
;.................................
images_my253: IncludeBinary "Logo253.bmp"
images_my254: IncludeBinary "Logo254.bmp"
images_my255: IncludeBinary "Logo255.bmp"
images_my256: IncludeBinary "Logo256.bmp"
EndDataSectionПоделиться62931.10.2011 17:19:44
Если рисунков много, то их целесообразно запихнуть в один архив, который будет запихиваться в EXE и во время старта программы - распаковываться в память для использования рисунков.
В одном из моих проектов (рисунков было порядка 150) я так и поступил, что значительно упростило код программы и уменьшило размер EXE-файла за счет сжатия рисунков в архиве.
Для сжатия и распаковки можно использовать пару функций PackMemory() и UnpackMemory().
Похожие темы
| Какая версия? | OffTop | 03.10.2021 |
| Мне постоянно пищет вот это | Вопросы по PureBasic | 14.10.2011 |
| Размер экрана в пикселях | Вопросы по PureBasic | 13.02.2011 |
| консоль | Вопросы по PureBasic | 19.03.2015 |
| Полноэкранные приложения на purebasic | Вопросы по PureBasic | 08.03.2011 |

