Я искал по словам связанным с этим и ничего не получил.
Вопросы новичка (продолжение…)
Сообщений 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 |