Спасибо
Вопросы новичка (продолжение…)
Сообщений 721 страница 750 из 990
Поделиться72214.08.2012 11:11:49
Здравствуйте! Есть код
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?
Если нет то в чем ошибка? Заранее благодарю.
Поделиться72314.08.2012 11:48:30
Возможно ли что проблема связана с неверным возвратом из 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
Поделиться72414.08.2012 13:36:00
Просто не хотелось писать еще раз все действия события LeftClick. Потому и искал пути решения. Последний вариант понравился больше всего, его и буду использовать. Про #PB_EventType_Change я вообще не был в курсе. Теперь буду знать. Большое человеческое спасибо.
Поделиться72514.08.2012 14:32:50
Про #PB_EventType_Change я вообще не был в курсе
Об этот типе события упомянуто в описании функции ListIconGadget() и в описании функции EventType().
Поделиться72614.08.2012 19:22:13
Здравствуйте, начинаю изучение основ программирования и столкнулся с проблемой.
Не могу использовать спрайты 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, которая как раз у меня стоит.
Кто может помочь разъяснить в чем дело и помочь? Буду очень благодарен!
Поделиться72714.08.2012 19:55:38
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
Поделиться72815.08.2012 10:57:50
Об этот типе события упомянуто в описании функции ListIconGadget() и в описании функции EventType().
Видимо я не внимательно читал
Поделиться72915.08.2012 11:46:31
Петр, я в курсе как работать с 3D спрайтами, у меня проблема с 2D спрайтами! Я все делаю правильно (100%, так как этот же код, работал отлично перед тем, как я переустановил винду), но они не загружаются, и при попытке использовать спрайт, который я предварительно LoadSprite() мне выдает ошибку отладчик "the specified #sprite is not initialized"... Причем если использовать DirectX7, то все нормально вроде, но проблема в том, что мне нужно использовать не DirectX7, а DirectX9 для работы с 3D спрайтами на 64-х битной системе. Вот в чем проблема.
Поделиться73015.08.2012 13:26:29
работал отлично перед тем, как я переустановил винду
Причем если использовать DirectX7, то все нормально вроде, но проблема в том, что мне нужно использовать не DirectX7, а DirectX9
DirectX9 точно установлен?
Поделиться73115.08.2012 16:22:36
Петр, я проверял с командой dxdiag и показывало, что "версия DirectX: DirectX11".
Поделиться73215.08.2012 17:32:26
проверял с командой dxdiag и показывало, что "версия DirectX: DirectX11
Это ни о чем не говорит.
Были случаи что при установленном DX11 не работали примеры, основанные на DX9.
Нужно установить спец. пакет от MS.
Если ничего не путаю, то нужно установить этот пакет. http://www.microsoft.com/en-us/download … aspx?id=35
Поделиться73316.08.2012 13:36:31
Петр, Ну он мне пишет, что установлена более новая версия и обновление не требуется, при запуске экзешника скачанного.
И я еще забыл сказать, у меня есть архив примеров программ, так вот там есть программы использующие 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)
Поделиться73416.08.2012 15:05:44
Ошибку выдает, когда доходит дело до использования спрайта, например в DisplaySprite()
Иногда так бывает, когда экран Depth=16 и используются BMP изображения для спрайтов( какова их битность?). Поэкспериментируй с 24 или 32. Посмотри, какая "родная" глубина цвета в системе установлена - был у меня косяк однажды с отображением из за этого. Ди и вообще, спрайты лучше грузить с #PB_Sprite_Texture - из тогда легко переделать в 3D. И юзать PNG с декодером, меньше проблем с битностью.
Поделиться73516.08.2012 21:37:48
Поэкспериментируй с 24 или 32
Я поставил 32 и о чудо! Просто я не знаком толком с программированием и на примере PureBasic-а я хотел ознакомиться с самим процессом и понять, что это вообще значит, поэтому я еще не в курсе, как и что работает.
Спасибо большое, а то бы я загнулся на этом моменте!
Поделиться73621.08.2012 13:34:33
Есть ли возможность программно менять значок приложения?
Поделиться73721.08.2012 14:15:16
В смысле значок исполняемого файла или значок в заголовке окна?
Пример замены значка в исполняемом файле. http://purebasic.ucoz.ru/publ/uchebnye_ … le/4-1-0-6
Поделиться73821.08.2012 16:10:24
Значок в заголовке окна.
Поделиться73921.08.2012 16:40:40
SendMessage_(WindowID(#Window), #WM_SETICON, #False, ImageID(#Image))
#Window - идентификатор окна.
#Image - идентификатор значка.
Поделиться74021.08.2012 22:25:20
Спасибо, работает.
Только в Taskbar-е (на панели задач Windows) иконка не меняется...
Хотя при щелчке по заголовку окна программы происходит смена и в Taskbar-е.
Понимаю, что нужно при смене иконки в заголовке окна обновлять и иконку в Taskbar-е, но ума не приложу, как это сделать.
Можно ли как-то это победить?
Поделиться74121.08.2012 23:31:25
Значок меняется при создании окна или во время работы?
Просто можно создать невидимое окно, сменить иконку и отобразить окно.
Поделиться74222.08.2012 00:10:33
Значок постоянно меняется во время работы программы.
Не совсем понял по поводу невидимого окна.
Сначала вызываем невидимое окно, потом меняем значок, потом закрываем невидимое окно?
Поделиться74322.08.2012 00:35:02
Можно еще попробовать менять заголовок окна при смене значка.
При этом перерисуется кнопка на панели задач и по идее, должен так же сменится значок.
Поделиться74422.08.2012 10:01:52
Как изменить размеры окна нашёл, а как изменить заголовок - нет
Поделиться74522.08.2012 10:32:43
как изменить заголовок - нет
SetWindowTitle() http://purebasic.ru/manual.php?id=1362&lng=rus
Поделиться74622.08.2012 14:58:57
Здравствуйте, возник вопрос по 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") то данные в правую таблицу не добавляются. Почему?
Поделиться74722.08.2012 16:10:37
Если закомментировать строку AddGadgetItem(#ListIcon_1,-1,"dfsfs") то данные в правую таблицу не добавляются. Почему?
Потому что эта строка добавляет пункт в таблицу, после чего копируются колонки.
Зачем скрывать, а затем отображать ListIconGadget при копировании?
Поделиться74822.08.2012 17:45:44
Потому что эта строка добавляет пункт в таблицу, после чего копируются колонки.
Это я знаю, но есть строка SendMessage_(ListIcon2,#LVM_SETITEMTEXT,m,@plvitem) она добавляет значение в таблицу, или я не прав?
Зачем скрывать, а затем отображать ListIconGadget при копировании?
Путем экспериментов выяснил что скорость выполнения больше когда ListIcon скрыт. Знаю что это глупо, потому и ищу пути увеличения скорости загрузки данных в таблицу. Может есть еще какой-то очень быстрый способ?
Поделиться74922.08.2012 18:31:57
Путем экспериментов выяснил что скорость выполнения больше когда 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
Может есть еще какой-то очень быстрый способ?
Есть.
Виртуальный режим работы ListIconGadget.
http://purebasic.info/phpBB2/viewtopic. … 0806#30806
Это я знаю, но есть строка 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
Поделиться75022.08.2012 21:07:32
Можно еще попробовать менять заголовок окна при смене значка.
При этом перерисуется кнопка на панели задач и по идее, должен так же сменится значок.
Это не помогло. Наверное вопрос из разряда невыполнимых хотелок...
Похожие темы
Какая версия? | OffTop | 03.10.2021 |
Мне постоянно пищет вот это | Вопросы по PureBasic | 14.10.2011 |
Размер экрана в пикселях | Вопросы по PureBasic | 13.02.2011 |
консоль | Вопросы по PureBasic | 19.03.2015 |
Полноэкранные приложения на purebasic | Вопросы по PureBasic | 08.03.2011 |