PureBasic - форум

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

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


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


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

Сообщений 331 страница 360 из 1000

331

Думаю что в этом случае, рисунки нужно хранить отдельно от EXE, лучше в заархивированом виде.

0

332

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

лучше в заархивированом виде.

это как?

0

333

Чтобы не забивать оперативную память рисунками, их целесообразно загружать по мере необходимости, а когда не нужны - выгружать. Рисунков то много!
Для уменьшения занимаемого дискового пространства, файлы желательно архивировать, т. е. поместить в один архив, но это не обязательно.
Можно использовать RAR архив (разархивирование с помощью unrar.dll), Zip архив (разархивирование с помощью библиотеки PureZIP) или функции среды из Packer.

0

334

Давайте не будем о каждом примере говорить, а например возьмем dll, я так понимаю с ней легче работать. Я прочитал твою статью о dll и с чего мне можно начать всю эту работу с фотками если учесть, что пользователь из списка будет выбирать название, по которому в IMAGE уже будет загружаться фотка из dll. Как то так.

0

335

Если ты хочешь упрятать ресурсы, то dll это плохое хранилище. Любой юзер, с помощью самого допотопного редактора ресурсов, достанет твои фото.

0

336

мне не нцжно прятать, мне нужно сделать как можно компактней, практичней и легче

0

337

Сейчас нет проблем у пользователей с объемом жестких дисков. Положи их в отдельную папку и не заморачивайся, меньше глюков будет.

0

338

Спасибо, так и сделаю. + к этому раньше возникала ошибка, когда создаешь IMAGE и не помещаешь туда фото. Тогда при запуске проги вылетает ошибка. Можно ли как ниб этого избежать

0

339

Везде в загрузках используй проверку:

if openfile(1,"")
endif

if loadimage(1,"")
endif

с оператором IF-ENDIF

0

340

Можно ли с помощью команд раздела справки file возвратить список файлов, находящихся в папке?

0

341

Требуемые функции находятся в разделе FileSystem

Код:
  Directory$ = "C:\"   ; Lists all entries in the Windows directory (without the contents of sub-directories)
  If ExamineDirectory(0, Directory$, "*.*")  
    While NextDirectoryEntry(0)
      If DirectoryEntryType(0) = #PB_DirectoryEntry_File
        Type$ = " [File] "
      Else
        Type$ = " [Sub-Dir] "
      EndIf
      Debug DirectoryEntryName(0) + Type$ + "- Size in byte: " + Str(DirectoryEntrySize(0))
    Wend
    FinishDirectory(0)
  EndIf

0

342

Подскажите почему у меня не действует команда SetGadgetItemState(#Listview_5, 0, 1)? Верней не происходит выделение строчки. Вопрос такой: как с помощью этой команды выделить (сделать активной) первую строчку списка?
PS: Самое главное, что команда SetGadgetState(#Gadget, State) работает, но не правильно, так как она выделает вторую строчку списка, а мне нужно первую

Отредактировано daiomik (24.04.2010 17:27:41)

0

343

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

Самое главное, что команда SetGadgetState(#Gadget, State) работает, но не правильно, так как она выделает вторую строчку списка, а мне нужно первую

Функция выделяет первую строчку!

Код:
  If OpenWindow(0, 0, 0, 270, 140, "ListViewGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    ListViewGadget(0, 10, 10, 250, 120)
    For a = 1 To 12
      AddGadgetItem (0, -1, "Item " + Str(a) + " of the Listview") ; define listview content
    Next
    SetGadgetState(0, 0) ; set (beginning with 0) the tenth item as the active one
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf

0

344

Ха, спасибо, просто до этого момента не так понимал действие команды SetGadgetState

0

345

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

Directory$ = "C:\"   ; Lists all entries in the Windows directory (without the contents of sub-directories)
  If ExamineDirectory(0, Directory$, "*.*") 
    While NextDirectoryEntry(0)
      If DirectoryEntryType(0) = #PB_DirectoryEntry_File
        Type$ = " [File] "
      Else
        Type$ = " [Sub-Dir] "
      EndIf
      Debug DirectoryEntryName(0) + Type$ + "- Size in byte: " + Str(DirectoryEntrySize(0))
    Wend
    FinishDirectory(0)
  EndIf

А как на основе данного примера добиться того, что бы файлы искались не только в папке, но и в подпапках и тд.  А то данным способом только происходит поиск в одной папке

0

346

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

А как на основе данного примера добиться того, что бы файлы искались не только в папке, но и в подпапках и тд

Создать рекурсивную процедуру поиска.

Код:
Global v=0 

Procedure x(Directory$) 
If Right(Directory$,1)<>"\":Directory$ + "\":EndIf 
   z=ExamineDirectory(#PB_Any, Directory$, "*.*")  
   v=v+1 
   If v>1000 ; Это чтобы не сканировать весь диск - долго очень 
    End 
   EndIf 
  If z 
    While NextDirectoryEntry(z) 
     EntryName.s=DirectoryEntryName(z) 
      
      If EntryName = "." Or EntryName = ".." 
       Continue 
      EndIf 
      
      
      If DirectoryEntryType(z) = #PB_DirectoryEntry_Directory 
        x(Directory$+EntryName) 
      EndIf 
      
      Debug Directory$+"    "+DirectoryEntryName(z) 
    Wend 
    FinishDirectory(z) 
  EndIf 
EndProcedure 

x("C:\")

0

347

Можно ли в ComboBoxGadget создать что то типа сепарейта как в меню, что бы он разделял строки

0

348

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

Можно ли в ComboBoxGadget создать что то типа сепарейта как в меню, что бы он разделял строки

Можно нарисовать линии.

посмотри справку по функции LINE() , или исходник судоку, там есть рисование линий.

0

349

Можно так сделать

Код:
If OpenWindow(0, 0, 0, 270, 140, "ComboBoxGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

    ComboBoxGadget(1, 10, 40, 250, 21)
      For a = 1 To 5
        If a=3
          AddGadgetItem(1, -1,"---------------------------")
        EndIf
        AddGadgetItem(1, -1,"ComboBox item " + Str(a))
      Next

    SetGadgetState(1, 0)
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf

0

350

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

Можно так сделать

Вот что значит опыт!

0

351

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

0

352

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

то есть сделать неактивной

Можно, но скорей всего придёстя самому список прорисовывать. Тогда там можно нормальную линию нарисовать.
Но это сплошные API функции!

0

353

ну тогда и этого хватит)

0

354

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

0

355

Вот простенький пример из КОДАРХИВА:

Код:
; German forum: http://www.purebasic.fr/german/archive/viewtopic.php?t=1990&highlight=
; Author: freedimension + GPI (extended event loop by Andre, updated for PB4.00 by blbltheworm)
; Date: 15. August 2003
; OS: Windows
; Demo: No

#CBG_DIRECTORY = 1 
#txt_Directory = 2 

hWndMain = OpenWindow(0, 100, 200, 400, 40, "ComboBoxDirectoryList", #PB_Window_SystemMenu) 
CreateGadgetList(hWndMain) 
TextGadget(#txt_Directory, 10,10,150,20,"") 
ComboBoxGadget(#CBG_DIRECTORY, 220, 10, 170, 200) 
DlgDirListComboBox_(hWndMain, "C:\", #CBG_DIRECTORY, #txt_Directory, #DDL_DIRECTORY | #DDL_EXCLUSIVE) 

Repeat 
  event = WaitWindowEvent() 
  If event = #PB_Event_Gadget
    If EventGadget()=#CBG_DIRECTORY
      SetGadgetText(#txt_Directory,GetGadgetText(#CBG_DIRECTORY))
    EndIf
  EndIf
Until event = #PB_Event_CloseWindow

0

356

Ну я тоже самое делал и у меня ошибка почему то:

Код:
If event=#PB_Event_Gadget 
Select gadget
Case #Combo_1 
   aktiv.s=GetGadgetState(#Combo_1)
   If aktiv="Мышечная система"
    ImageGadget(#Image_16, 15, 90, 172, 448,ImageID(6))
   ElseIf aktiv="Костная система"
    ImageGadget(#Image_16, 15, 90, 172, 448,ImageID(7)) 
   EndIf 
 EndSelect 
EndIf

вот это подчеркивает. Я уже и формат менял и че только не делал: aktiv.s=GetGadgetState(#Combo_1)

0

357

Зачем ты строковой переменной присваиваешь число?

0

358

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

Код:
#CBG_DIRECTORY = 1 
#txt_Directory = 2 

hWndMain = OpenWindow(0, 100, 200, 400, 40, "ComboBoxDirectoryList", #PB_Window_SystemMenu) 
CreateGadgetList(hWndMain) 
TextGadget(#txt_Directory, 10,10,150,20,"") 
ComboBoxGadget(#CBG_DIRECTORY, 220, 10, 170, 200) 
DlgDirListComboBox_(hWndMain, "C:\", #CBG_DIRECTORY, #txt_Directory, #DDL_DIRECTORY | #DDL_EXCLUSIVE) 

Repeat 
  event = WaitWindowEvent() 
  If event = #PB_Event_Gadget
    If EventGadget()=#CBG_DIRECTORY
      SetGadgetText(#txt_Directory,Str(GetGadgetState(#CBG_DIRECTORY)))
    EndIf
  EndIf
Until event = #PB_Event_CloseWindow

0

359

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

Зачем ты строковой переменной присваиваешь число?

Да, тупанул, учусь пока :) Мне даже не эту команду надо было применить, эту: GetGadgetText. Спасибо, разобрался

0

360

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

Код:
; German forum: http://www.purebasic.fr/german/archive/viewtopic.php?t=1990&highlight=
; Author: freedimension + GPI (extended event loop by Andre, updated for PB4.00 by blbltheworm)
; Date: 15. August 2003
; OS: Windows
; Demo: No

#CBG_DIRECTORY = 1 
#txt_Directory = 2 

hWndMain = OpenWindow(0, 100, 200, 400, 40, "ComboBoxDirectoryList", #PB_Window_SystemMenu) 
CreateGadgetList(hWndMain) 
TextGadget(#txt_Directory, 10,10,150,20,"") 
ComboBoxGadget(#CBG_DIRECTORY, 220, 10, 170, 20) 
DlgDirListComboBox_(hWndMain, "C:\", #CBG_DIRECTORY, #txt_Directory, #DDL_DIRECTORY | #DDL_EXCLUSIVE) 

Repeat 
  event = WaitWindowEvent() 
  If event = #PB_Event_Gadget
    If EventGadget()=#CBG_DIRECTORY
      If EventType()=1 ; Список закрылся с выбором пункта
        SetGadgetText(#txt_Directory,GetGadgetText(#CBG_DIRECTORY))
      EndIf
    EndIf
  EndIf
Until event = #PB_Event_CloseWindow

0


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