PureBasic - форум

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

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


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


Вопросы новичка (продолжение…)

Сообщений 721 страница 750 из 974

721

Спасибо

0

722

Здравствуйте! Есть код

Код:
Enumeration
  #Window_0
EndEnumeration

Enumeration
  #ListIcon_0
EndEnumeration

Declare TestProcedure()

Procedure Open_Window_0()
  If OpenWindow(#Window_0, 393, 81, 600, 300, "New window ( 0 )",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    ListIconGadget(#ListIcon_0, 15, 10, 565, 275, "Column0", 100, #PB_ListIcon_GridLines | #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection)
    For a = 0 To 50
      AddGadgetItem(#ListIcon_0,-1,Str(a))
    Next a
  EndIf
EndProcedure

Procedure TestProcedure()
  Debug EventwParam()
EndProcedure

Open_Window_0()

Repeat ; Start of the event loop
  
  Event = WaitWindowEvent() ; This line waits until an event is received from Windows
  WindowID = EventWindow() ; The Window where the event is generated, can be used in the gadget procedures
  GadgetID = EventGadget() ; Is it a gadget event?
  EventType = EventType() ; The event type
  
  Select Event 
    Case #PB_Event_Gadget
      Select GadgetID
        Case #ListIcon_0
          If EventType = #PB_EventType_LeftClick
            Loop:
            TestProcedure()
          EndIf
      EndSelect
    Case #WM_KEYDOWN
      If GetActiveGadget() = #ListIcon_0 And (EventwParam() = #PB_Shortcut_Down Or EventwParam() = #PB_Shortcut_Up)
        Goto Loop
      EndIf
  EndSelect
  
Until Event = #PB_Event_CloseWindow ; End of the event loop

End
;

Если ткнуть на ListIcon и понажимать клавиши вверх/вниз, то через несколько нажатий программа вылетает и вроде как на EndSelecte. Возможно ли что проблема связана с неверным возвратом из Select?
Если нет то в чем ошибка? Заранее благодарю.

0

723

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

Возможно ли что проблема связана с неверным возвратом из Select?

Ага. Стек не очищается.
http://purebasic.info/phpBB2/viewtopic.php?p=3532#3532
http://purebasic.info/phpBB2/viewtopic.php?p=4333#4333

Альтернативные пути решения проблемы.

Почему не вызвать TestProcedure() в место перехода на метку?

Код:
Enumeration
  #Window_0
EndEnumeration

Enumeration
  #ListIcon_0
EndEnumeration

Declare TestProcedure()

Procedure Open_Window_0()
  If OpenWindow(#Window_0, 393, 81, 600, 300, "New window ( 0 )",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    ListIconGadget(#ListIcon_0, 15, 10, 565, 275, "Column0", 100, #PB_ListIcon_GridLines | #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection)
    For a = 0 To 50
      AddGadgetItem(#ListIcon_0,-1,Str(a))
    Next a
  EndIf
EndProcedure

Procedure TestProcedure()
  Debug EventwParam()
EndProcedure

Open_Window_0()

Repeat ; Start of the event loop
  
  Event = WaitWindowEvent() ; This line waits until an event is received from Windows
  WindowID = EventWindow() ; The Window where the event is generated, can be used in the gadget procedures
  GadgetID = EventGadget() ; Is it a gadget event?
  EventType = EventType() ; The event type
  
  Select Event 
    Case #PB_Event_Gadget
      Select GadgetID
        Case #ListIcon_0
          If EventType = #PB_EventType_LeftClick
            TestProcedure()
          EndIf
      EndSelect
    Case #WM_KEYDOWN
      If GetActiveGadget() = #ListIcon_0 And (EventwParam() = #PB_Shortcut_Down Or EventwParam() = #PB_Shortcut_Up)
        TestProcedure()
      EndIf
  EndSelect
  
Until Event = #PB_Event_CloseWindow ; End of the event loop

End

Если уж так хочется оставить как есть, то нужно поместить в стек что-нибудь.

Код:
Enumeration
  #Window_0
EndEnumeration

Enumeration
  #ListIcon_0
EndEnumeration

Declare TestProcedure()

Procedure Open_Window_0()
  If OpenWindow(#Window_0, 393, 81, 600, 300, "New window ( 0 )",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    ListIconGadget(#ListIcon_0, 15, 10, 565, 275, "Column0", 100, #PB_ListIcon_GridLines | #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection)
    For a = 0 To 50
      AddGadgetItem(#ListIcon_0,-1,Str(a))
    Next a
  EndIf
EndProcedure

Procedure TestProcedure()
  Debug EventwParam()
EndProcedure

Open_Window_0()

Repeat ; Start of the event loop
  
  Event = WaitWindowEvent() ; This line waits until an event is received from Windows
  WindowID = EventWindow() ; The Window where the event is generated, can be used in the gadget procedures
  GadgetID = EventGadget() ; Is it a gadget event?
  EventType = EventType() ; The event type
  
  Select Event 
    Case #PB_Event_Gadget
      Select GadgetID
        Case #ListIcon_0
          If EventType = #PB_EventType_LeftClick
            Loop:
            TestProcedure()
          EndIf
      EndSelect
    Case #WM_KEYDOWN
      If GetActiveGadget() = #ListIcon_0 And (EventwParam() = #PB_Shortcut_Down Or EventwParam() = #PB_Shortcut_Up)
        !push eax
        Goto Loop
      EndIf
  EndSelect
  
Until Event = #PB_Event_CloseWindow ; End of the event loop

End

Но правильнее сделать так:

Код:
Enumeration
  #Window_0
EndEnumeration

Enumeration
  #ListIcon_0
EndEnumeration

Declare TestProcedure()

Procedure Open_Window_0()
  If OpenWindow(#Window_0, 393, 81, 600, 300, "New window ( 0 )",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    ListIconGadget(#ListIcon_0, 15, 10, 565, 275, "Column0", 100, #PB_ListIcon_GridLines | #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection)
    For a = 0 To 50
      AddGadgetItem(#ListIcon_0,-1,Str(a))
    Next a
  EndIf
EndProcedure

Procedure TestProcedure()
  Debug GetGadgetState(#ListIcon_0)
EndProcedure

Open_Window_0()

Repeat ; Start of the event loop
  
  Event = WaitWindowEvent() ; This line waits until an event is received from Windows
  WindowID = EventWindow() ; The Window where the event is generated, can be used in the gadget procedures
  GadgetID = EventGadget() ; Is it a gadget event?
  EventType = EventType() ; The event type
  
  Select Event 
    Case #PB_Event_Gadget
      Select GadgetID
        Case #ListIcon_0
          If EventType = #PB_EventType_LeftClick Or EventType = #PB_EventType_Change
            TestProcedure()           
          EndIf
      EndSelect
  EndSelect
  
Until Event = #PB_Event_CloseWindow ; End of the event loop

End

0

724

Просто не хотелось писать еще раз все действия события LeftClick. Потому и искал пути решения. Последний вариант понравился больше всего, его и буду использовать. Про #PB_EventType_Change я вообще не был в курсе. Теперь буду знать.  Большое человеческое спасибо.

0

725

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

Про #PB_EventType_Change я вообще не был в курсе

Об этот типе события упомянуто в описании функции ListIconGadget() и в описании функции EventType().

0

726

Здравствуйте, начинаю изучение основ программирования и столкнулся с проблемой.
Не могу использовать спрайты 2D. Я в начале программы, как положено, пишу InitSprite(), далее после openscreen(), и еще пары команд, пишу LoadSprite(0,"kugel.bmp") и когда я его хочу вывести на экран DisplaySprite(0,k_x,k_y), при компиляции выдается ошибка "The specified 2D #Sprite isn't initialized". И так, где бы я его не использовал. Как будто команды LoadSprite() и не было вовсе.
Сначала проблема решилась, когда я вписал в настройках компилятора "подсистему" DirectX7, но это не решение проблемы, так как, когда я хочу использовать 3D Sprite команды, мне нужно очистить поле "подсистемы" в настройках компилятора, чтобы он использовал DirectX9. Справка бэйсика выдает мне информацию, что 3D спрайты не работают с DirectX7 на 64-х битных версиях Windows, которая как раз у меня стоит.
Кто может помочь разъяснить в чем дело и помочь? Буду очень благодарен!

0

727

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

3D Sprite

Код:
InitSprite()
InitSprite3D()
InitKeyboard()
UsePNGImageDecoder()

OpenScreen(1024, 768, 32, "")
LoadSprite(0, "Роза.png", #PB_Sprite_AlphaBlending|#PB_Sprite_Texture)
CreateSprite3D(0, 0)
Repeat
  FlipBuffers()
  
  ClearScreen(RGB(128,128,128))
  
  
  Start3D()
  DisplaySprite3D(0, 100, 100, 255)
  Stop3D()
  
  ExamineKeyboard()
Until KeyboardPushed(#PB_Key_Escape)

Исходник и картинка. http://pure-basic.narod.ru/forum/3DSprite.zip

0

728

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

Об этот типе события упомянуто в описании функции ListIconGadget() и в описании функции EventType().

Видимо я не внимательно читал

0

729

Петр, я в курсе как работать с 3D спрайтами, у меня проблема с 2D спрайтами! Я все делаю правильно (100%, так как этот же код, работал отлично перед тем, как я переустановил винду), но они не загружаются, и при попытке использовать спрайт, который я предварительно LoadSprite() мне выдает ошибку отладчик "the specified #sprite is not initialized"... Причем если использовать DirectX7, то все нормально вроде, но проблема в том, что мне нужно использовать не DirectX7, а DirectX9 для работы с 3D спрайтами на 64-х битной системе. Вот в чем проблема.

0

730

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

работал отлично перед тем, как я переустановил винду

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

Причем если использовать DirectX7, то все нормально вроде, но проблема в том, что мне нужно использовать не DirectX7, а DirectX9

DirectX9 точно установлен?

0

731

Петр, я проверял с командой dxdiag и показывало, что "версия DirectX: DirectX11".

0

732

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

проверял с командой dxdiag и показывало, что "версия DirectX: DirectX11

Это ни о чем не говорит.
Были случаи что при установленном DX11 не работали примеры, основанные на DX9.
Нужно установить спец. пакет от MS.
Если ничего не путаю, то нужно установить этот пакет. http://www.microsoft.com/en-us/download … aspx?id=35

0

733

Петр, Ну он мне пишет, что установлена более новая версия и обновление не требуется, при запуске экзешника скачанного.
И я еще забыл сказать, у меня есть архив примеров программ, так вот там есть программы использующие 2D спрайты и работающие, при том, что в настройках компилятроа не указана никакая подсистема, то есть использует DirectX9 по умолчанию. Вот например программа tetris little, используются картинки засунутые в папку с кодом. и используются они как спрайты и все при этом работает, хотя отличий в инициализировании в моем коде и в тетрисе я не нашел. Вот часть моего кода. Ошибку выдает, когда доходит дело до использования спрайта, например в DisplaySprite()

Код:
xscreen = 1366
yscreen = 768

k_x.f = xscreen/2 
k_y.f = yscreen/2
k_winkel.f = 360
k_radius = 15
k_speed.f = 4
health = 100

s_sx = 20
s_sy = 20

geschossen.f

bulletsSMGALL = 90
bulletsRifleALL = 20
bulletsShotgunALL = 32

bulletsSMG = 30
bulletsRifle = 10
bulletsShotgun = 8

ugol.f
A.f
B.f
C.f
P.f
S.f
sinA.f
AsinA.f

ugolg.f
Ag.f
Bg.f
Cg.f
Pg.f
Sg.f
sinAg.f
AsinAg.f

volume = 0
reloading.f

Structure krug 
  x.f 
  y.f 
  winkel.f 
  speed.f 
EndStructure 

Structure spawner
  sx.f
  sy.f
  sspeed.f
  sradius.f
  swinkel.f
  shealth.f
EndStructure

Structure grenade
  gx.f
  gy.f
  gspeed.f
  gwinkel.f
  gtime.f
EndStructure

Structure grbul
  x.f 
  y.f 
  winkel.f 
  speed.f 
EndStructure

Global NewList bullet.krug()
Global NewList enemy.spawner()
Global NewList grenade.grenade()
Global NewList grbul.grbul()

If InitSprite() = 0
    MessageRequester("Error","Sprite() = 0",0)
    End
  EndIf  
  
If InitKeyboard() = 0
    MessageRequester("Error","InitKeyboard() = 0",0)
    End
  EndIf
  
If InitMouse() = 0
    MessageRequester("Error","InitMouse() = 0",0)
    End
  EndIf
  
If InitSound() = 0
    MessageRequester("Error","InitSound() = 0",0)
    End
  EndIf

UseOGGSoundDecoder()

LoadSound(1,"psh.ogg")
LoadSound(2,"krug.wav")
LoadSound(3,"psh3.ogg")
LoadSound(4,"semishoot.wav")
LoadSound(5,"shotgunreload.wav")
LoadSound(6,"smgshoot.wav")
LoadSound(7,"shotgunshoot.wav")
LoadSound(8,"cock.wav")
LoadSound(9,"semireload.wav")
LoadSound(10,"smgreload.wav")
LoadSound(11,"empty.wav")
LoadSound(12,"pin.wav")
LoadSound(13,"explode.wav")

Procedure.f Dist(X1.f,Y1.f,X2.f,Y2.f);Определяет расстояние между двумя точками!
  ProcedureReturn Sqr(Pow(X1-X2,2)+Pow(Y1-Y2,2))
EndProcedure

Procedure.f AddBullet(x.f,y.f,winkel.f,radius.f,speed.f)
      AddElement(bullet()) 
      bullet()\x = radius * Cos(winkel *(2*3.1415/360)) + x 
      bullet()\y = radius * Sin(winkel *(2*3.1415/360)) + y 
      bullet()\winkel = winkel
      bullet()\speed = speed
    EndProcedure
    
Procedure.f Addgrbul(gx.f,gy.f,gwinkel.f,gradius.f,gspeed.f)
      AddElement(grbul()) 
      grbul()\x = gradius * Cos(gwinkel *(2*3.1415/360)) + gx 
      grbul()\y = gradius * Sin(gwinkel *(2*3.1415/360)) + gy 
      grbul()\winkel = gwinkel
      grbul()\speed = gspeed
    EndProcedure
;}--------------------------------------------------------------------------------------------------- Переменные

If OpenScreen(xscreen,yscreen,16,"mass attack") 
  
  LoadSprite(0,"bullet1.bmp")
  LoadSprite(1,"enemy.bmp")
  LoadSprite(2,"screen.bmp")
  LoadSprite(3,"kugel.bmp")
  LoadSprite(4,"musicon.bmp")
  LoadSprite(5,"musicoff.bmp")
  LoadSprite(6,"grenade.bmp")
  LoadSprite(7,"grenadebullet1.bmp")
  
  Repeat 
    ExamineKeyboard()
    ExamineMouse()

      DisplaySprite(2,0,0)

0

734

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

Ошибку выдает, когда доходит дело до использования спрайта, например в DisplaySprite()

Иногда так бывает, когда экран  Depth=16 и используются BMP изображения для спрайтов( какова их битность?). Поэкспериментируй с 24 или 32. Посмотри, какая "родная" глубина цвета в системе установлена - был у меня косяк однажды с отображением из за этого. Ди и вообще, спрайты лучше грузить с #PB_Sprite_Texture - из тогда легко переделать в 3D. И юзать PNG  с декодером, меньше проблем с битностью.

0

735

ВиниПур написал(а):

Поэкспериментируй с 24 или 32

Я поставил 32 и о чудо! Просто я не знаком толком с программированием и на примере PureBasic-а я хотел ознакомиться с самим процессом и понять, что это вообще значит, поэтому я еще не в курсе, как и что работает.
Спасибо большое, а то бы я загнулся на этом моменте!

0

736

Есть ли возможность программно менять значок приложения?

0

737

В смысле значок исполняемого файла или значок в заголовке окна?
Пример замены значка в исполняемом файле. http://purebasic.ucoz.ru/publ/uchebnye_ … le/4-1-0-6

0

738

Значок в заголовке окна.

0

739

Код:
SendMessage_(WindowID(#Window), #WM_SETICON, #False, ImageID(#Image))

#Window - идентификатор окна.
#Image   - идентификатор значка.

0

740

Спасибо, работает.
Только в Taskbar-е (на панели задач Windows) иконка не меняется...
Хотя при щелчке по заголовку окна программы происходит смена и в Taskbar-е.
Понимаю, что нужно при смене иконки в заголовке окна обновлять и иконку в Taskbar-е, но ума не приложу, как это сделать.
Можно ли как-то это победить?

0

741

Значок меняется при создании окна или во время работы?
Просто можно создать невидимое окно, сменить иконку и отобразить окно.

0

742

Значок постоянно меняется во время работы программы.
Не совсем понял по поводу невидимого окна.
Сначала вызываем невидимое окно, потом меняем значок, потом закрываем невидимое окно?

0

743

Можно еще попробовать менять заголовок окна при смене значка.
При этом перерисуется кнопка на панели задач и по идее, должен так же сменится значок.

0

744

Как изменить размеры окна нашёл, а как изменить заголовок - нет  :dontknow:

0

745

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

как изменить заголовок - нет

SetWindowTitle() http://purebasic.ru/manual.php?id=1362&lng=rus

0

746

Здравствуйте, возник вопрос по ListIcon. Вот пример кода:

Код:
Enumeration
  #Window_0
EndEnumeration
;{ Gadgets
Enumeration
  #ListIcon_0
  #ListIcon_1
  #Button_2
  #Button_3
EndEnumeration
;}
Define.l Event, EventWindow, EventGadget, EventType, EventMenu
;}
Procedure OpenWindow_Window_0()
  If OpenWindow(#Window_0, 97, 5, 1304, 398, "Window_0", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
    ListIconGadget(#ListIcon_0, 0, 0, 640, 350, "Gadget_0", 100, #PB_ListIcon_AlwaysShowSelection|#PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect)
    AddGadgetColumn(#ListIcon_0, 1, "Column #2", 100)
    AddGadgetColumn(#ListIcon_0, 2, "Column #3", 100)
    AddGadgetColumn(#ListIcon_0, 3, "Column #4", 100)
    AddGadgetColumn(#ListIcon_0, 4, "Column #5", 100)
    AddGadgetColumn(#ListIcon_0, 5, "Column #6", 100)
    AddGadgetColumn(#ListIcon_0, 6, "Column #7", 100)
    AddGadgetColumn(#ListIcon_0, 7, "Column #8", 100)
    AddGadgetColumn(#ListIcon_0, 8, "Column #9", 100)
    AddGadgetColumn(#ListIcon_0, 9, "Column #10", 100)
    ListIconGadget(#ListIcon_1, 645, 0, 650, 350, "Gadget_1", 100, #PB_ListIcon_AlwaysShowSelection|#PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect)
    AddGadgetColumn(#ListIcon_1, 1, "Column #2", 100)
    AddGadgetColumn(#ListIcon_1, 2, "Column #3", 100)
    AddGadgetColumn(#ListIcon_1, 3, "Column #4", 100)
    AddGadgetColumn(#ListIcon_1, 4, "Column #5", 100)
    AddGadgetColumn(#ListIcon_1, 5, "Column #6", 100)
    AddGadgetColumn(#ListIcon_1, 6, "Column #7", 100)
    AddGadgetColumn(#ListIcon_1, 7, "Column #8", 100)
    AddGadgetColumn(#ListIcon_1, 8, "Column #9", 100)
    AddGadgetColumn(#ListIcon_1, 9, "Column #10", 100)
    ButtonGadget(#Button_2, 30, 360, 120, 20, "Копировать")
    ButtonGadget(#Button_3, 650, 360, 130, 20, "Gadget_3")
HideGadget(#ListIcon_0,1)
For x.i = 0 To 1000
  a.s = Str(x)
  AddGadgetItem(#ListIcon_0,-1,a+"1"+Chr(10)+a+"2"+Chr(10)+a+"3"+Chr(10)+a+"4"+Chr(10)+a+"5"+Chr(10)+a+"6"+Chr(10)+a+"7"+Chr(10)+a+"8"+Chr(10))
Next x
HideGadget(#ListIcon_0,0)
EndIf
EndProcedure

OpenWindow_Window_0()
   
Procedure CopyItem()
  *ItemBuf.l = AllocateMemory(10)
  plvitem.LVITEM
  plvitem\pszText = *ItemBuf
  plvitem\cchTextMax = 10
  ListIcon1.l = GadgetID(#ListIcon_0)
  ListIcon2.l = GadgetID(#ListIcon_1)
  HideGadget(#ListIcon_1,1)
  LastRow.i = CountGadgetItems(#ListIcon_0)-1
  plvitem\iItem = 0
  For m.i = 0 To  LastRow
    AddGadgetItem(#ListIcon_1,-1,"dfsfs")
    Text.s = ""
    For col.i = 0 To 7
      plvitem\iSubItem = col
      SendMessage_(ListIcon1,#LVM_GETITEMTEXT,m,@plvitem)
      result.l = SendMessage_(ListIcon2,#LVM_SETITEMTEXT,m,@plvitem)
    Next col
  Next m
  HideGadget(#ListIcon_1,0)
EndProcedure

Repeat
  Event = WaitWindowEvent()
  Select Event
    Case #PB_Event_Gadget
     EventGadget = EventGadget()
      EventType = EventType()
      If EventGadget = #ListIcon_0
      ElseIf EventGadget = #ListIcon_1
      ElseIf EventGadget = #Button_2
        CopyItem()
      ElseIf EventGadget = #Button_3
      EndIf
    ; ////////////////////////
    Case #PB_Event_CloseWindow
      EventWindow = EventWindow()
      If EventWindow = #Window_0
        CloseWindow(#Window_0)
        Break
      EndIf
  EndSelect
ForEver

При нажатии на кнопку "копировать" происходит копирование с левой таблицы в правую.
Если закомментировать строку AddGadgetItem(#ListIcon_1,-1,"dfsfs") то данные в правую таблицу не добавляются. Почему?

0

747

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

Если закомментировать строку AddGadgetItem(#ListIcon_1,-1,"dfsfs") то данные в правую таблицу не добавляются. Почему?

Потому что эта строка добавляет пункт в таблицу, после чего копируются колонки.

Зачем скрывать, а затем отображать ListIconGadget при копировании?

0

748

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

Потому что эта строка добавляет пункт в таблицу, после чего копируются колонки.

Это я знаю, но есть строка SendMessage_(ListIcon2,#LVM_SETITEMTEXT,m,@plvitem) она добавляет значение в таблицу, или я не прав?

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

Зачем скрывать, а затем отображать ListIconGadget при копировании?

Путем экспериментов выяснил что скорость выполнения больше когда ListIcon скрыт. Знаю что это глупо, потому и ищу пути увеличения скорости загрузки данных в таблицу. Может есть еще какой-то очень быстрый способ?

0

749

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

Путем экспериментов выяснил что скорость выполнения больше когда ListIcon скрыт.

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

Код:
Enumeration
  #Window_0
EndEnumeration
;{ Gadgets
Enumeration
  #ListIcon_0
  #ListIcon_1
  #Button_2
  #Button_3
EndEnumeration
;}
Define.l Event, EventWindow, EventGadget, EventType, EventMenu
;}
Procedure OpenWindow_Window_0()
  If OpenWindow(#Window_0, 97, 5, 1304, 398, "Window_0", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
    ListIconGadget(#ListIcon_0, 0, 0, 640, 350, "Gadget_0", 100, #PB_ListIcon_AlwaysShowSelection|#PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect)
    AddGadgetColumn(#ListIcon_0, 1, "Column #2", 100)
    AddGadgetColumn(#ListIcon_0, 2, "Column #3", 100)
    AddGadgetColumn(#ListIcon_0, 3, "Column #4", 100)
    AddGadgetColumn(#ListIcon_0, 4, "Column #5", 100)
    AddGadgetColumn(#ListIcon_0, 5, "Column #6", 100)
    AddGadgetColumn(#ListIcon_0, 6, "Column #7", 100)
    AddGadgetColumn(#ListIcon_0, 7, "Column #8", 100)
    AddGadgetColumn(#ListIcon_0, 8, "Column #9", 100)
    AddGadgetColumn(#ListIcon_0, 9, "Column #10", 100)
    ListIconGadget(#ListIcon_1, 645, 0, 650, 350, "Gadget_1", 100, #PB_ListIcon_AlwaysShowSelection|#PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect)
    AddGadgetColumn(#ListIcon_1, 1, "Column #2", 100)
    AddGadgetColumn(#ListIcon_1, 2, "Column #3", 100)
    AddGadgetColumn(#ListIcon_1, 3, "Column #4", 100)
    AddGadgetColumn(#ListIcon_1, 4, "Column #5", 100)
    AddGadgetColumn(#ListIcon_1, 5, "Column #6", 100)
    AddGadgetColumn(#ListIcon_1, 6, "Column #7", 100)
    AddGadgetColumn(#ListIcon_1, 7, "Column #8", 100)
    AddGadgetColumn(#ListIcon_1, 8, "Column #9", 100)
    AddGadgetColumn(#ListIcon_1, 9, "Column #10", 100)
    ButtonGadget(#Button_2, 30, 360, 120, 20, "Копировать")
    ButtonGadget(#Button_3, 650, 360, 130, 20, "Gadget_3")
HideGadget(#ListIcon_0,1)
For x.i = 0 To 1000
  a.s = Str(x)
  AddGadgetItem(#ListIcon_0,-1,a+"1"+Chr(10)+a+"2"+Chr(10)+a+"3"+Chr(10)+a+"4"+Chr(10)+a+"5"+Chr(10)+a+"6"+Chr(10)+a+"7"+Chr(10)+a+"8"+Chr(10))
Next x
HideGadget(#ListIcon_0,0)
EndIf
EndProcedure

OpenWindow_Window_0()
   
Procedure CopyItem()
  ListIcon1.l = GadgetID(#ListIcon_0)
  ListIcon2.l = GadgetID(#ListIcon_1)
  SendMessage_(ListIcon2, #WM_SETREDRAW, #False, 0)
  LastRow.i = CountGadgetItems(#ListIcon_0)-1
  For m.i = 0 To  LastRow
    AddGadgetItem(#ListIcon_1,m,"")
    Text.s = ""
    For col.i = 0 To 7
      SetGadgetItemText(#ListIcon_1, m, GetGadgetItemText(#ListIcon_0, m, col), col)
    Next col
  Next m
  SendMessage_(ListIcon2, #WM_SETREDRAW, #True, 0)
  RedrawWindow_(ListIcon2, 0, 0, #RDW_ALLCHILDREN|#RDW_UPDATENOW)
EndProcedure

Repeat
  Event = WaitWindowEvent()
  Select Event
    Case #PB_Event_Gadget
     EventGadget = EventGadget()
      EventType = EventType()
      If EventGadget = #ListIcon_0
      ElseIf EventGadget = #ListIcon_1
      ElseIf EventGadget = #Button_2
        CopyItem()
      ElseIf EventGadget = #Button_3
      EndIf
    ; ////////////////////////
    Case #PB_Event_CloseWindow
      EventWindow = EventWindow()
      If EventWindow = #Window_0
        CloseWindow(#Window_0)
        Break
      EndIf
  EndSelect
ForEver
ldir написал(а):

Может есть еще какой-то очень быстрый способ?

Есть.
Виртуальный режим работы ListIconGadget.
http://purebasic.info/phpBB2/viewtopic. … 0806#30806

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

Это я знаю, но есть строка SendMessage_(ListIcon2,#LVM_SETITEMTEXT,m,@plvitem) она добавляет значение в таблицу, или я не прав?

Эта команда только изменяет текст в строке, а не добавляет строку. http://msdn.microsoft.com/en-us/library … p/bb761198(v=vs.85).aspx
Для добавления строки используется команда #LVM_INSERTITEM http://msdn.microsoft.com/en-us/library … p/bb761107(v=vs.85).aspx

0

750

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

Можно еще попробовать менять заголовок окна при смене значка.
При этом перерисуется кнопка на панели задач и по идее, должен так же сменится значок.

Это не помогло. Наверное вопрос из разряда невыполнимых хотелок...

0


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