Как избавиться от мерцания панели при передвижении сплиттера
Вот такая вот панелька, котрая мерцает при изменении её разров.
Понятия не имею что с ней делать.
PureBasic - форум |
Привет, Гость! Войдите или зарегистрируйтесь.
Вы здесь » PureBasic - форум » Вопросы по PureBasic » Вопросы новичка
Как избавиться от мерцания панели при передвижении сплиттера
Вот такая вот панелька, котрая мерцает при изменении её разров.
Понятия не имею что с ней делать.
А как можно программно добавить гаджет в заранее созданную вкладку панели? То есть есть такая вкладка:
AddGadgetItem (#Panel_0, -1, "")
как мне программно добавить туда кнопку? (ButtonGadget())
А как можно программно добавить гаджет в заранее созданную вкладку панели
Для этого нужно использовать функцию OpenGadgetList.
If OpenWindow(0, 0, 0, 322, 270, "PanelGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) PanelGadget (0, 8, 8, 306, 203) AddGadgetItem (0, -1, "Panel 1") PanelGadget (1, 5, 5, 290, 166) AddGadgetItem(1, -1, "Sub-Panel 1") AddGadgetItem(1, -1, "Sub-Panel 2") AddGadgetItem(1, -1, "Sub-Panel 3") CloseGadgetList() AddGadgetItem (0, -1,"Panel 2") ButtonGadget(2, 10, 15, 80, 24,"Button 1") ButtonGadget(3, 95, 15, 80, 24,"Button 2") CloseGadgetList() ButtonGadget(10,10,230,180,30,"Добавить кнопку на Sub-Panel 1") ButtonGadget(11,200,230,110,30,"Добавить вкладку") Repeat Event=WaitWindowEvent() If Event = #PB_Event_Gadget If EventGadget() = 10 OpenGadgetList(1, 0) ButtonGadget(20,10,10,80,24,"Новая кнопка") CloseGadgetList() ElseIf EventGadget() = 11 OpenGadgetList(1) AddGadgetItem(1,1,"Новая") CloseGadgetList() EndIf EndIf Until Event = #PB_Event_CloseWindow EndIf
Спасибо!
Каким действие меняется курсор мыши при наведение на гаджет?
Отслеживаем что курсор на гаджете
Procedure IsMouseOver(wnd) Shared TekPosGadgetX, TekPosGadgetY GetWindowRect_(wnd,re.RECT) GetCursorPos_(pt.POINT) Result = PtInRect_(re,pt\x,pt\y) ProcedureReturn Result EndProcedure
и меняем курсор
SetCursor_(LoadCursor_(0, 32649))
ммм..ругается на этой строчке
Result = PtInRect_(re,pt\x,pt\y)
разве нет способа чеоез eventtype() как то.. То есть IF type=нужная константа, то SetCursor_(LoadCursor_(0, 32649))??
Вот нашел код, но не очень пойму его содержание:
handle=LoadCursor_(0,#IDC_CROSS ) CreateImage(1,80,80) StartDrawing(ImageOutput(1)) FrontColor(RGB(255,0,0)) Circle(40,40,40) StopDrawing() If OpenWindow(1,100,200,210,210,"Cursor дndern",#PB_Window_SystemMenu) CreateGadgetList(WindowID(1)) ImageGadget(1,10,10,80,80,ImageID(1)) ImageGadget(2,120,10,80,80,ImageID(1)) ImageGadget(3,120,120,80,80,ImageID(1)) ImageGadget(4,10,120,80,80,ImageID(1)) normhandle=GetWindowLong_(GadgetID(1),#GCL_HCURSOR) SetClassLong_(GadgetID(1),#GCL_HCURSOR,handle) Repeat event=WaitWindowEvent() Until event=#WM_CLOSE SetClassLong_(GadgetID(1),#GCL_HCURSOR,normhandle) CloseWindow(1) EndIf End
Эти строки
normhandle=GetWindowLong_(GadgetID(1),#GCL_HCURSOR) SetClassLong_(GadgetID(1),#GCL_HCURSOR,handle)
изменяют тип курсора для всех гаджетов программы, типа ImageGadget.
С наведением разобрался.. Теперь такой вопрос.. Как отслеживать событие когда пользователь нажал ЛКМ и двигает мышкой.. То есть при таких событиях должны происходить определенные действия.
Попробуй так
If event = #WM_MOUSEMOVE If GetAsyncKeyState_(#VK_LBUTTON) ; Тут нужные действия EndIf EndIf
Хорошо, а как теперь сделать данное событие над определенным гаджетом?
Procedure IsMouseOver(wnd) Shared TekPosGadgetX, TekPosGadgetY GetWindowRect_(wnd,re.RECT) GetCursorPos_(pt.POINT) Result = PtInRect_(re,pt\x,pt\y) ProcedureReturn Result EndProcedure If event = #WM_MOUSEMOVE If GetAsyncKeyState_(#VK_LBUTTON) If IsMouseOver(GadgetID(Gadget)) ; Тут нужные действия EndIf EndIf EndIf
Спасибо!
Я вот не пойму как узнать константы всех курсоров мыши.. Открываю окно констант, а там не все есть курсоры (они такого плана: #IDC_NO).. Мне нужны стрелочки различного направления и др
Вот
#IDC_APPSTARTING Standard arrow and small hourglass #IDC_ARROW Standard arrow #IDC_CROSS Crosshair #IDC_IBEAM Text I-beam #IDC_ICON Windows NT only: Empty icon #IDC_NO Slashed circle #IDC_SIZE Windows NT only: Four-pointed arrow #IDC_SIZEALL Same as IDC_SIZE #IDC_SIZENESW Double-pointed arrow pointing northeast and southwest #IDC_SIZENS Double-pointed arrow pointing north and south #IDC_SIZENWSE Double-pointed arrow pointing northwest and southeast #IDC_SIZEWE Double-pointed arrow pointing west and east #IDC_UPARROW Vertical arrow #IDC_WAIT Hourglass
Можно ли у кнопки создать картинку слева? Делал так, но в данном случае только одна картинка, а текст вставить невозможно:
ButtonImageGadget(#Button_4, 220, 15, 95, 20,ImageID(1))
Можно ли у кнопки создать картинку слева?
Посмотри как это реализовано в этой проге http://pure-basic.narod.ru/project/CountTraffic.html
Поянтно..API. Не так сложно кстати)
почему при добавлении элемента в список появляются ошибки..уже что только не пробовал со стрин и с long.. Вот основа думаю поймете:
Structure mywindow x.l y.l innerwidth.l innerheight.l title.s flags.s EndStructure Global MyWindow.mywindow Global NewList MyCode(); Procedure Created() AddElement(MyCode()) MyCode()="OpenWindow(#PB_Any,"+Str(MyWindow\x)+Str(MyWindow\y)+Str(MyWindow\innerwidth)+Str(MyWindow\innerheight)+MyWindow\title+MyWindow\flags+")" AddElement(MyCode()) MyCode()="Repeat" AddElement(MyCode()) MyCode()="Until WaitWindowEvent()=#PB_Event_CloseWindow" EndProcedure
ошибку пишет в этой строке
MyCode()="OpenWindow(#PB_Any,"+Str(MyWindow\x)+Str(MyWindow\y)+Str(MyWindow\innerwidth)+Str(MyWindow\innerheight)+MyWindow\title+MyWindow\flags+")"
и еще..Если писать так:
Procedure Created(MyWindow\x,MyWindow\y,MyWindow\innerwidth,MyWindow\innerheight,MyWindow\title,MyWindow\flags) AddElement(MyCode()) MyCode()="OpenWindow(#PB_Any,"+Str(MyWindow\x)+Str(MyWindow\y)+Str(MyWindow\innerwidth)+Str(MyWindow\innerheight)+MyWindow\title+MyWindow\flags+")" AddElement(MyCode()) MyCode()="Repeat" AddElement(MyCode()) MyCode()="Until WaitWindowEvent()=#PB_Event_CloseWindow" EndProcedure
то ошибка вообще в первой строке.. Разве нельзя передавать параметры из структуры?
Отредактировано daiomik (24.08.2010 09:57:53)
ошибку пишет в этой строке
Список должен быть стринговый, ведь в него записываются строки текста.
Structure mywindow x.l y.l innerwidth.l innerheight.l title.s flags.s EndStructure Global MyWindow.mywindow Global NewList MyCode.s(); Procedure Created() AddElement(MyCode()) MyCode()="OpenWindow(#PB_Any,"+Str(MyWindow\x)+Str(MyWindow\y)+Str(MyWindow\innerwidth)+Str(MyWindow\innerheight)+MyWindow\title+MyWindow\flags+")" AddElement(MyCode()) MyCode()="Repeat" AddElement(MyCode()) MyCode()="Until WaitWindowEvent()=#PB_Event_CloseWindow" EndProcedure Created()
Разве нельзя передавать параметры из структуры
Это делается немного по другому.
Или через обычные переменные, являющиеся аргументами процедуры.
Structure mywindow x.l y.l innerwidth.l innerheight.l title.s flags.s EndStructure MyWindow.mywindow Global NewList MyCode.s(); Procedure Created(x,y,innerwidth,innerheight,title.s,flags.s) AddElement(MyCode()) MyCode()="OpenWindow(#PB_Any,"+Str(x)+Str(y)+Str(innerwidth)+Str(innerheight)+title+flags+")" AddElement(MyCode()) MyCode()="Repeat" AddElement(MyCode()) MyCode()="Until WaitWindowEvent()=#PB_Event_CloseWindow" EndProcedure Created(MyWindow\x,MyWindow\y,MyWindow\innerwidth,MyWindow\innerheight,MyWindow\title,MyWindow\flags)
или передачей указателя на струкутуру
Structure mywindow x.l y.l innerwidth.l innerheight.l title.s flags.s EndStructure MyWindow.mywindow Global NewList MyCode.s(); Procedure Created(*MyWindow.mywindow) AddElement(MyCode()) MyCode()="OpenWindow(#PB_Any,"+Str(*MyWindow\x)+Str(*MyWindow\y)+Str(*MyWindow\innerwidth)+Str(*MyWindow\innerheight)+*MyWindow\title+*MyWindow\flags+")" AddElement(MyCode()) MyCode()="Repeat" AddElement(MyCode()) MyCode()="Until WaitWindowEvent()=#PB_Event_CloseWindow" EndProcedure Created(@MyWindow)
Список должен быть стринговый, ведь в него записываются строки текста.
Дурья моя голова))
Или через обычные переменные, являющиеся аргументами процедуры.
то что нужно!
есть ли команда стринг, которая бы возводила текст в кавычки..а то в ручную долго прописывать?
Используй Chr(34)
Если это долго, то можешь попробовать использовать одинарные кавычки ' потом заменяя их на двойные с помощью ReplaceString.
аа.забыл совсем)
Можно ли сделать программу для склейки exe файлов или других форматов. И как это можно реализовать.Заранее спасибо.
Всё зависит от того, нужно ли это производить на этапе компиляции программы или файлы нужно "приклеивать" к уже скомпилированой программе.
В первом случае, нжно использовать оператор IncludeBinary или ресурсы исполняемого файла.
Во втором случае, или ресурсы, или создание подобия самораспаковывающегося архива с файлами.
есть 2 работающих файла exe и надо что бы в программе я смог выбрать из\х и на выходе у меня получился 1 файл, что бы открывались сразу 2 файла и что бы они работали вместе.
Зачем изобретать колесо.
Есть же программа AlgPak.
Просто в ней надо выбрать какой файл главный а мне надо что бы 2 файла были важными и главными
Вопросы новичка (продолжение…) | Вопросы по PureBasic | 29.06.2024 |
Скорее, это теоретический вопрос о правах в директории. | OffTop | 16.09.2022 |
Вопрос по отладке | Вопросы по PureBasic | 26.01.2017 |
Три вопроса по созданию браузера. | Вопросы по PureBasic | 01.11.2010 |
вопрос о точности типов данных | Вопросы по PureBasic | 20.05.2021 |
Вы здесь » PureBasic - форум » Вопросы по PureBasic » Вопросы новичка