PureBasic - форум

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

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


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


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

Сообщений 601 страница 630 из 1000

601

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

Как избавиться от мерцания панели при передвижении сплиттера

Вот такая вот панелька, котрая мерцает при изменении её разров.
Понятия не имею что с ней делать.

0

602

А как можно программно добавить гаджет в заранее созданную вкладку панели? То есть есть такая вкладка:
AddGadgetItem (#Panel_0, -1, "")
как мне программно добавить туда кнопку? (ButtonGadget())

0

603

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

А как можно программно добавить гаджет в заранее созданную вкладку панели

Для этого нужно использовать функцию 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

0

604

Спасибо!

0

605

Каким действие меняется курсор мыши при наведение на гаджет?

0

606

Отслеживаем что курсор на гаджете

Код:
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))

0

607

ммм..ругается на этой строчке

Код:
Result = PtInRect_(re,pt\x,pt\y)

разве нет способа чеоез eventtype() как то.. То есть IF type=нужная константа, то  SetCursor_(LoadCursor_(0, 32649))??

0

608

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

Код:
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

0

609

Эти строки

Код:
normhandle=GetWindowLong_(GadgetID(1),#GCL_HCURSOR)
  SetClassLong_(GadgetID(1),#GCL_HCURSOR,handle)

изменяют тип курсора для всех гаджетов программы, типа ImageGadget.

0

610

С наведением разобрался.. Теперь такой вопрос.. Как отслеживать событие когда пользователь нажал ЛКМ и двигает мышкой.. То есть при таких событиях должны происходить определенные действия.

0

611

Попробуй так

Код:
If event = #WM_MOUSEMOVE
  If GetAsyncKeyState_(#VK_LBUTTON)
    ; Тут нужные действия
  EndIf
EndIf

0

612

Хорошо, а как теперь сделать данное событие над определенным гаджетом?

0

613

Код:
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

0

614

Спасибо!

0

615

Я вот не пойму как узнать константы всех курсоров мыши.. Открываю окно констант, а там не все есть курсоры (они такого плана: #IDC_NO).. Мне нужны стрелочки различного направления и др

0

616

Вот

Код:
#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

0

617

Можно ли у кнопки создать картинку слева? Делал так, но в данном случае только одна картинка, а текст вставить невозможно:

Код:
ButtonImageGadget(#Button_4, 220, 15, 95, 20,ImageID(1))
Код:

0

618

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

Можно ли у кнопки создать картинку слева?

Посмотри как это реализовано в этой проге http://pure-basic.narod.ru/project/CountTraffic.html

0

619

Поянтно..API. Не так сложно кстати)

0

620

почему при добавлении элемента в список появляются ошибки..уже что только не пробовал со стрин и с 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)

0

621

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

ошибку пишет в этой строке

Список должен быть стринговый, ведь в него записываются строки текста.

Код:
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()
daiomik написал(а):

Разве нельзя передавать параметры из структуры

Это делается немного по другому.
Или через обычные переменные, являющиеся аргументами процедуры.

Код:
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)

0

622

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

Список должен быть стринговый, ведь в него записываются строки текста.

Дурья моя голова))

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

Или через обычные переменные, являющиеся аргументами процедуры.

то что нужно!

0

623

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

0

624

Используй Chr(34)
Если это долго, то можешь попробовать использовать одинарные кавычки ' потом заменяя их на двойные с помощью ReplaceString.

0

625

аа.забыл совсем)

0

626

Можно ли сделать программу для склейки exe файлов или других форматов. И как это можно реализовать.Заранее спасибо.

0

627

Всё зависит от того, нужно ли это производить на этапе компиляции программы или файлы нужно "приклеивать" к уже скомпилированой программе.
В первом случае, нжно использовать оператор IncludeBinary или ресурсы исполняемого файла.
Во втором случае, или ресурсы, или создание подобия самораспаковывающегося архива с файлами.

0

628

есть 2 работающих файла exe и надо что бы в программе я смог выбрать из\х и на выходе у меня получился 1 файл, что бы открывались сразу 2 файла и что бы они работали вместе.

0

629

Зачем изобретать колесо.
Есть же программа AlgPak.

0

630

Просто в ней надо выбрать какой файл главный а мне надо что бы 2 файла были важными и главными

0


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