PureBasic - форум

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

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


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


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

Сообщений 61 страница 90 из 961

61

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

Возможно ли в ButtonGadget изменять текст? Если да, то киньте пожалуйста пример.

Код:
;{ Константы
Enumeration
  #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Button_0
EndEnumeration

;- Fonts
Global FontID1
FontID1 = LoadFont(1, "Arial", 28)
;}

Procedure Open_Window_0()
  If OpenWindow(#Window_0, 575, 389, 468, 205, "New window ( 0 )",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    If CreateGadgetList(WindowID(#Window_0))
      ButtonGadget(#Button_0, 110, 40, 240, 80, "Нажми...")
      SetGadgetFont(#Button_0, FontID1)
      
    EndIf
  EndIf
EndProcedure


Open_Window_0()
Repeat ; Начало главного цикла Repeat-Until
  Event=WaitWindowEvent() ; Получаем текущий идентификатор события
  gadget=EventGadget()
  
  If Event=#PB_Event_Gadget
    If gadget=#Button_0
      a=Random(90)
        While a<65
          a=Random(90)
        Wend
      SetGadgetText(#Button_0, "нов.текст "+Chr(a))      
    EndIf 
  EndIf    
Until Event=#PB_Event_CloseWindow

Отредактировано Lucagin (03.01.2011 12:56:40)

0

62

Спасибо!
Но это не совсем то, что мне надо. Мне надо чтобы текст менялся при определенном условии.
То есть у меня русский текст, я загружаю английский, перегружаю программу и текст обновляется.

0

63

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

Отредактировано max (03.01.2011 13:35:25)

0

64

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

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

Ну так в чем проблема… пишешь необходимое тебе условие, при котором меняется текст гаджета, присваиваешь переменной а.s=”новое значение” и дальше меняешь текст гаджета на новое:  SetGadgetText(#Button_0, а). Или если новое значение не строковое (а=12343), то   SetGadgetText(#Button_0, Str(a))

0

65

Спасибо! Вроде "вкурил". Пойду разбираться.

0

66

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

То есть у меня русский текст, я загружаю английский, перегружаю программу и текст обновляется.

Вообще-то это можно делать и без перезагрузки программы.
Вот пример:

Код:
Procedure LoadText(File.s)
  OpenPreferences(File)
  PreferenceGroup("Главное окно")
  SetWindowTitle(0,ReadPreferenceString("WinTitle","Окошко") )
  SetGadgetText(0,ReadPreferenceString("TextGadget","текст") )
  SetGadgetText(1,ReadPreferenceString("ButtonGadget","Это кнопка") )
EndProcedure


OpenWindow(0,0,0,140,80,"",#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered|#PB_Window_Invisible)
TextGadget(0,10,10,120,16,"",#PB_Text_Center)
ButtonGadget(1,20,40,100,28,"")

LoadText("file.ini")
HideWindow(0,0)

Repeat
  Event=WaitWindowEvent()
Until Event=#PB_Event_CloseWindow

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

Файлы http://pure-basic.narod.ru/forum/loadtextinifile.rar

0

67

Спасибо Пётр! Буду пробовать.

0

68

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

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

Можно поподробней, если не трудно, как оно все работает?

0

69

И еще такой вопрос: есть ли какая-нибудь команда, которая перегружает программу?
Заранее спасибо!

0

70

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

Можно поподробней, если не трудно, как оно все работает

Пример http://pure-basic.narod.ru/forum/loadte … tilang.rar

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

И еще такой вопрос: есть ли какая-нибудь команда, которая перегружает программу?

Можно так перезапустить.

Код:
RunProgram(ProgramFilename())
end

+1

71

Спасибо!

0

72

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

Можно так перезапустить.Код:RunProgram(ProgramFilename())
end

Странно, но у меня прога просто вылетает и все.

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

max написал(а):Можно поподробней, если не трудно, как оно все работаетПример http://pure-basic.narod.ru/forum/loadte … tilang.rar

А можно как то сделать, чтобы с изменениями надписей менялись файлы rtf?
Просто для меня проще сделать перезапуск программы, так как все уже написано, но хотелось бы просто менять язык.

Отредактировано max (03.01.2011 21:33:17)

0

73

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

А можно как то сделать, чтобы с изменениями надписей менялись файлы rtf

Можно подробнее?

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

Странно, но у меня прога просто вылетает и все.

Ну как же?

Код:
OpenWindow(2,0,0,180,80,"Заголовок окна",#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
ButtonGadget(0,54,32,88,24,"Перезапустить")
  
Repeat
 Event=WaitWindowEvent()
 Gadget=EventGadget()
    
  If Event=#PB_Event_Gadget And Gadget=0
   RunProgram(ProgramFilename())
   End
  EndIf 
  
Until Event = #PB_Event_CloseWindow

0

74

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

Ну как же?

Не так делал. :blush:

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

Можно подробнее?

У меня файлы справки и помощи в rtf. При перезапуске программы они тоже обновляются.
Можно ли от этого уйти?

0

75

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

У меня файлы справки и помощи в rtf. При перезапуске программы они тоже обновляются. Можно ли от этого уйти?

Сложно сказать не видя код программы.
Я ведь не представляю как там всё реализовано.

0

76

Вот код:
http://ifolder.ru/21122335

0

77

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

У меня файлы справки и помощи в rtf. При перезапуске программы они тоже обновляются. Можно ли от этого уйти?

То есть не зависимо от выбранного языка, должны открываться файлы с русским текстом?

0

78

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

То есть не зависимо от выбранного языка, должны открываться файлы с русским текстом?

В том то и дело что нет. Файлы должны открываться согласно выбранного языка.

0

79

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

Файлы должны открываться согласно выбранного языка.

Так они сейчас открываются согласно выбранного языка.

0

80

Да. Но для этого надо перезапустить программу.
Хотелось бы просто выбрать язык и все.

0

81

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

Да. Но для этого надо перезапустить программу.

Замени эти процедуры

Код:
Procedure Open_Window_1()
  OpenWindow(#Window_1, 0, 0, 500, 400, wn1,#PB_Window_ScreenCentered)
  
  EditorGadget(70,2,2,496,370,#PB_Editor_ReadOnly)
SendMessage_(GadgetID(70), #EM_SETTARGETDEVICE, #Null, 0) ; Перенос по словам

Lang.s="ru"
If GetGadgetState(20)=0
  Lang.s="en"
EndIf
FileStreamIn(70, Left(Lang, 2)+"_avtori.rtf")
  
  ButtonGadget(71,210,373,80,24,"OK")

EndProcedure

Procedure Open_Window_2()
  
OpenWindow(#Window_2,0,0,500,300, wn2,#PB_Window_ScreenCentered)

EditorGadget(72,2,2,496,270,#PB_Editor_ReadOnly)
SendMessage_(GadgetID(72), #EM_SETTARGETDEVICE, #Null, 0) ; Перенос по словам

Lang.s="ru"
If GetGadgetState(20)=0
  Lang.s="en"
EndIf
FileStreamIn(72, Left(Lang, 2)+"_spravka.rtf") 

ButtonGadget(73,210,273,80,24,"OK") 
      
EndProcedure

Procedure Open_Window_3()
    
OpenWindow(#Window_3,0,0,500,400, wn3,#PB_Window_ScreenCentered)

EditorGadget(74,2,2,496,370,#PB_Editor_ReadOnly)
SendMessage_(GadgetID(74), #EM_SETTARGETDEVICE, #Null, 0) ; Перенос по словам

Lang.s="ru"
If GetGadgetState(20)=0
  Lang.s="en"
EndIf
FileStreamIn(74, Left(Lang, 2)+"_histori.rtf")

ButtonGadget(75,210,373,80,24,"OK") 
      
EndProcedure

+1

82

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

Замени эти процедуры

Спасибо! Заработало.

0

83

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

Спасибо! Заработало.

Поторопился! :D
Заработала только смена языка справки. Язык кнопок не меняется.
Делаю так:

Код:
{----------События компонентов----------
If Event=#PB_Event_Gadget
  Select EventGadget()      
       Case 20     
          Select GetGadgetState(20)
            Case 0
              RunProgram(ProgramFilename())
            Case 1
              RunProgram(ProgramFilename())
          EndSelect                       
           EndSelect                  
EndIf

Подскажите, куда копать?

Отредактировано max (05.01.2011 22:15:32)

0

84

Что тут не так?Почему когда я нажимаю F круг не двигается?

Код:
If OpenWindow(0, 0, 0, 500, 500, "Игра", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  CreateImage(0, 500, 500)
  StartDrawing(ImageOutput(0))
   
  
  x=250
  y=250

  Box(5,5,490,1, RGB(255,0,0))
  Box(5,5,1,490, RGB(255,0,0))
  Box(5,495,490,1, RGB(255,0,0))
  Box(495,5,1,490, RGB(255,0,0))
  Circle(x,y,5,RGB(255,0,0))
  
  If AddKeyboardShortcut(0,#PB_Shortcut_F,0)
    y+10
    x+50
EndIf
        
        
      StopDrawing() 
      ImageGadget(0, 0, 0, 200, 200, ImageID(0))
   
    
    Repeat
      Event = WaitWindowEvent()
    Until Event = #PB_Event_CloseWindow
  EndIf

Что тут не так?Почему когда я нажимаю F круг не двигается?

Отредактировано Niset (05.01.2011 23:16:05)

0

85

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

Заработала только смена языка справки.

Вопрос ведь был про справку.

Вот доработал прогу http://pure-basic.narod.ru/forum/Pure_Cats_Eye.rar

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

Код:
For i=1 To 20
  a = CreateSemaphore_(#Null,0,1,"Cat's Eye") 
  If a<>0 And GetLastError_()= #ERROR_ALREADY_EXISTS 
    CloseHandle_(a)
    Delay(20)
  Else
    Break
  EndIf 
Next i

If i>=19
  End
EndIf

Перезапуск производится так:

Код:
      Case 20
        If EventType()=1
          OpenPreferences("setting.dat")
          Write_out()
          WritePreferenceString("KEY_LED", Str(GetGadgetState (24)))
          WritePreferenceString("LPT_LED", Str(GetGadgetState (45)))     
          WritePreferenceString("X_form", Str(WindowX(#Window_0)))  
          WritePreferenceString("Y_form", Str(WindowY(#Window_0)))  
          WritePreferenceString("Preset", GetGadgetText(68))  
          WritePreferenceString("Language", GetGadgetText(20))
          WritePreferenceString("Invert", Str(GetGadgetState(69)))
          ClosePreferences() 
          
          RunProgram(ProgramFilename(),"/ShowWindow",GetPathPart(ProgramFilename()))
          End
        EndIf

+1

86

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

очему когда я нажимаю F круг не двигается?

А почему он должен двигаться?
Ведь программы зацикливается в этом участке кода

Код:
     Repeat
      Event = WaitWindowEvent()
    Until Event = #PB_Event_CloseWindow

Функция AddKeyboardShortcut служит для назначения горячей клавиши, дублирующей меню

Должно быть примерно так:

Код:
x=250
y=250
Procedure Draw()
  Shared x,y
  CreateImage(0, 500, 500)
  StartDrawing(ImageOutput(0))
  
  Box(5,5,490,1, RGB(255,0,0))
  Box(5,5,1,490, RGB(255,0,0))
  Box(5,495,490,1, RGB(255,0,0))
  Box(495,5,1,490, RGB(255,0,0))
  Circle(x,y,5,RGB(255,0,0))
  StopDrawing() 
EndProcedure

If OpenWindow(0, 0, 0, 500, 500, "Игра", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  AddKeyboardShortcut(0,#PB_Shortcut_F,0)
  Draw()
  ImageGadget(0, 0, 0, 200, 200, ImageID(0))
  
  Repeat
    Event = WaitWindowEvent()
    
    If Event = #PB_Event_Menu
      If EventMenu()=0
        y+10
        x+50
        Draw()
        SetGadgetState(0,ImageID(0))
      EndIf
    EndIf
    
  Until Event = #PB_Event_CloseWindow
EndIf

0

87

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

Вот доработал прогу

Спасибо! Теперь работает как надо! :cool:

0

88

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

Procedure Draw()
  Shared x,y

А что это?(В русской справке не нашел,а в английской не понял)

0

89

Об этом можно здесь прочитать http://pure-basic.narod.ru/docs/books/6.htm

0

90

Код:
x=250
y=250
a=20
b=20
Procedure Draw()
  Shared x,y,a,b
  CreateImage(0, 800, 800)
  StartDrawing(ImageOutput(0))
  
  Box(5,5,790,1, RGB(255,0,0))
  Box(5,5,1,790, RGB(255,0,0))
  Box(5,795,790,1, RGB(255,0,0))
  Box(795,5,1,790, RGB(255,0,0))
  Box(150,150,200,10,RGB(0,255,0))
  Circle(a,b,5,RGB(250,0,0))
  Circle(x,y,5,RGB(0,250,0))           ;Главный герой
  StopDrawing()
EndProcedure

If OpenWindow(0, 0, 0, 800, 800, "Игра", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  AddKeyboardShortcut(0,#PB_Shortcut_W,0)
  AddKeyboardShortcut(0,#PB_Shortcut_A,1)
  AddKeyboardShortcut(0,#PB_Shortcut_S,2)
  AddKeyboardShortcut(0,#PB_Shortcut_D,3)
  AddKeyboardShortcut(0,#PB_Shortcut_Up,0)
  AddKeyboardShortcut(0,#PB_Shortcut_Left,1)
  AddKeyboardShortcut(0,#PB_Shortcut_Down,2)
  AddKeyboardShortcut(0,#PB_Shortcut_Right,3)

  
  
  Draw()
  ImageGadget(0, 0, 0, 200, 200, ImageID(0))
  
  Repeat
    Event = WaitWindowEvent()
    
    
    
    If Event = #PB_Event_Menu
      If EventMenu()=0
        If y>10
        y-10
        Draw()
        SetGadgetState(0,ImageID(0))
        EndIf
      ElseIf EventMenu()=1
        If x>10
        x-10
        Draw()
        SetGadgetState(0,ImageID(0))
        EndIf
      ElseIf EventMenu()=2
        If y<790
        y+10
        Draw()
        SetGadgetState(0,ImageID(0))
        EndIf
      ElseIf EventMenu()=3
        If x<790
        x+10
        Draw()
        SetGadgetState(0,ImageID(0))
        End       
        If a=x And b>y
          b-10
        ElseIf a=x And b<y
          b+10
        ElseIf b=y And a<x
          a+10
        ElseIf b=y And a>x
          a-10
        ElseIf a<x And b<y
          a-10
          b-10
        ElseIf a<x And b>x
          a-10
          b+10
        ElseIf a>x And b<y
          a+10
          b-10
        ElseIf a>x And b>y
          a+10
          b+10
          EndIf        
      EndIf
    EndIf
    
  Until Event = #PB_Event_CloseWindow
EndIf


Что тут не так?Почему красный круг не ходит за главным героем?он ходит вообще непонятно куда!И как сделать чтоб гг и красный круг ходили медленно а не так быстро!?

0


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