PureBasic - форум

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

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


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


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

Сообщений 421 страница 450 из 961

421

Нужно чтобы окно програмы отображалось на сайте, т. е. в браузере?
Если так, то нужно генерировать HTML код страницы и обрабатывать запросы браузера, примерно как здесь USB градусник с передачей данных через интернет

0

422

Извеняюсь за вопрос не потеме, а что это было, уже несколько недель форум как будто заснул. Я думал мало-ли, всех поголовно взломали. А тут проснелся вдруг!?

0

423

За это время появилось несколько тем, к примеру
Журнал: ПРОграммист
Музыкальный плеер
Cвернуть все окна
Как запустить фаил из той-же директории WebGadget "index.html"

0

424

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

Нужно чтобы окно програмы отображалось на сайте, т. е. в браузере?
Если так, то нужно генерировать HTML код страницы и обрабатывать запросы браузера, примерно как здесь USB градусник с передачей данных через интернет

Там должно быть так, что любой человек заходит на сайт и на страничке сайта есть интерфейс (пару кнопок и куда вводить и где будет результат отображаться), вводят текст и нажмают на кнопку и приложение действует там по алгоритму, этот пример в этом поможет? Я всё это время пытался в нём разобраться и не помогу понять там почти ничего, если Вам не трудно объясните пожалуйста, что да как можно сделать.

0

425

Для этого нужно писать программу-сервер, которая будет генерировать WEB-страничку с кнопками, полями ввода текста и т. д., а потом, обрабатывать GET/POST запросы браузера с инфой из этих полей.
Но для этого нужно хорошо знать HTML.

0

426

Пётр, спасибо.

0

427

А скажите, допустим у меня есть папка к которой я знаю путь, а в этой папке есть ещё одна папка имени которой я незнаю. Но она там только одна. Мне надо открыть файл находящийся в папке имени которой я не знаю. Как открыть папку имени которой незнаешь если знаешь её содержимое и то что она в папке только одна?

0

428

Копай в этом направлении:

Код:
  Directory$ = "C:\"   ; Lists all entries in the Windows directory (without the contents of sub-directories)
  If ExamineDirectory(0, Directory$, "*.*")  
    While NextDirectoryEntry(0)
      If DirectoryEntryType(0) = #PB_DirectoryEntry_File
        Type$ = " [File] "
      Else
        Type$ = " [Sub-Dir] "
      EndIf
      
      Debug DirectoryEntryName(0) + Type$ + "- Size in byte: " + Str(DirectoryEntrySize(0))
    Wend
    FinishDirectory(0)
  EndIf

0

429

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

0

430

Для XP

Код:
Procedure.l InternetConnected() 
  Protected dwConnectionTypes.l = #INTERNET_CONNECTION_MODEM + #INTERNET_CONNECTION_LAN + #INTERNET_CONNECTION_PROXY 
  ProcedureReturn InternetGetConnectedState_(@dwConnectionTypes,0) 
EndProcedure

Debug InternetConnected()

0

431

Спасиб, но у меня win7, но я попробовал, тоже идёт

0

432

Проверить наличие доступа в интернет, можно соединившись с любым сайтом, скажем, с google.ru

Код:
InitNetwork()
Connect=OpenNetworkConnection("www.google.ru",80)
If Connect
  CloseNetworkConnection(Connect)
  MessageRequester("", "Инет есть", #MB_OK|#MB_ICONINFORMATION)
Else
  MessageRequester("", "Инета нету", #MB_OK|#MB_ICONWARNING)
EndIf

0

433

У меня есть программа которая при запуске через какоето время вылетает с ошибкой. Я сделал exeшник и проблема осталась. Но в свойствах в разделе "Совместимость" я поставил галочку "Запускать в совместимости с Win95" и всё заработало. Ну а мой вопрос в том, как в PureBasic запускать код в совместимость с превидущими версиями винды. У меня Win7. Заранее спасибо.

0

434

Поделитесь примером изменения размера окна и гаджета мышкой (окно и гаджет одного размера, окно без рамки) :writing:

0

435

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

Поделитесь примером

Вырезал из Онлайн переводчика, разбирайся...

Код:
Enumeration 
 #Window_0
 #But
EndEnumeration


 
OpenWindow(#Window_0,0,0,200,100,"Онлайн перевод",#PB_Window_ScreenCentered|#PB_Window_Invisible|#PB_Window_BorderLess)
  SetWindowColor(#Window_0,$473929)
  ButtonGadget(#But,120,70,70,20,"")
 


HideWindow(#Window_0,0)
Repeat
Event =  HotkeyWaitWindowEvent() 

 mx.l = WindowMouseX(#Window_0) 
 my.l = WindowMouseY(#Window_0)
 
 x = WindowWidth(#Window_0)
 y=WindowHeight(#Window_0)
       
If Event=#PB_Event_SizeWindow
 ResizeGadget(#But,x-80,y-30,#PB_Ignore,#PB_Ignore)
EndIf
      
 If ((mx > 0 And mx < x) And (my > y-5 And my < y)) Or ((mx >x-5 And mx < x) And (my > 0 And my < y)) ;  растянуть
  SetCursor_(LoadCursor_(0,#IDC_SIZEALL)) ; курсор стрелка
 EndIf 
  
   Select Event
     Case #WM_LBUTTONDOWN
      ; перемещение
      If mx >= 0 And mx <= 350-85 And my >= 0 And my <= 35 
       ReleaseCapture_() 
       SendMessage_(WindowID(#Window_0), #WM_NCLBUTTONDOWN, #HTCAPTION, 0)
      EndIf 
      ; растягивание
     If ((mx > 0 And mx < x) And (my > y-5 And my < y)) Or ((mx >x-5 And mx < x) And (my > 0 And my < y))
       ReleaseCapture_() 
       SendMessage_(WindowID(#Window_0), #WM_NCLBUTTONDOWN, #HTBOTTOMRIGHT , 0)
     EndIf  
     Case #PB_Event_Gadget
       Select EventGadget()
         Case #But

       EndSelect
   EndSelect
 
ForEver

Отредактировано mirashic (06.04.2011 16:56:42)

0

436

mirashic
Спасибо, почти то, но у меня винда в виртуалке, и пурик ругается на HotkeyWaitWindowEvent, это первое и второе у меня есть события: нажали ПКМ, отпустили ПКМ и мышь на границе окна(гаджета) и самое главное у меня нет SendMessage_ :dontknow:
отсюда следует, что мне нужно высчитывать положение мыши и её перемещение, далее ResizeWindow() и ResizeGadget(). Перепробовал всяко, то не растягивается, то мышь улетает на 100 пиксел а окно растягивается на30 пиксел, то ещё чего нибудь, весь мозг сломал, а результата ноль, поэтому и спросил может кто делал подобное :confused:

0

437

HotkeyWaitWindowEvent() - это я случайно оставил замени её WaitWindowEvent()

0

438

Иван написал(а):

У меня есть программа которая при запуске через какоето время вылетает с ошибкой.

Запусти прогу в среде PureBasic и при возникновении ошибки, будет отмечена строка в которой она произошла и появится краткое описание ошибки.

Иван написал(а):

я поставил галочку "Запускать в совместимости с Win95" и всё заработало.

Это не решение проблемы - нужно искать ошибку в коде.

0

439

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

0

440

Как вариант, нарисовать своё окно (где рамка о фон совпадают) и применить библиотеку: SkinFeature.dll

Тогда можно тянуть за все 4 стороны...

http://purebasic.info/phpBB2/viewtopic.php?t=1465

что то типа: http://purebasic.ucoz.com/77.rar

Отредактировано mirashic (06.04.2011 19:49:51)

0

441

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

применить библиотеку: SkinFeature.dll

Интересно как её прикрутить к Linux-проге?

0

442

А негде не сказано про Linux ? Я наверно пропустил...

Отредактировано mirashic (06.04.2011 20:37:13)

0

443

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

А негде не сказано про Linux ?

Косвенный признак

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

и самое главное у меня нет SendMessage_

0

444

Где в XP хранятся настройки PureBasic, после сбоя пропали все панели инструментов, всё востановил, а панель шаблонов -нет ?

0

445

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

Где в XP хранятся настройки PureBasic

C:\Documents and Settings\User\Application Data\PureBasic

0

446

Спасибо.

0

447

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

Запусти прогу в среде PureBasic и при возникновении ошибки, будет отмечена строка в которой она произошла и появится краткое описание ошибки.

Дело в том что ошибки как таковой нет. Программа "не отвечает" и зависает.
Вот программа:

Код:
; English forum: 
; Author: Franco (updated for PB4.00 by benny)
; Date: 31. December 2004
; OS: Windows
; Demo: No

 
; 3D_Example coded by Franco 
; based on an initial isometric 3D-code from Deeйm2031 (german forum) 
 
;#PI = 3.1415626 
 
;Don't know what this is... anyway: 
;good visual results for CAD with 36000 
Constant.f=360 * 360 ; to be on the save side... 
 
;For gaming: 2.828 -> isometric 
;Constant.f = 2 * Sqr(2) 
 
Global _sin.f, _cos.f
Dim _sin.f(360) 
Dim _cos.f(360) 
 
CameraPosition.f = 18 
 
Procedure d_init3d(ScreenWidth.l,ScreenHeight.l) 
  
  ; write sin und cos in Array 
 
;  Dim _sin.f(360) 
;  Dim _cos.f(360) 
  Shared _sin(), _cos()
 

  For i = 0 To 360 
    _sin(i) = Sin(i/(180/#PI)) 
    _cos(i) = Cos(i/(180/#PI)) 
  Next i 
  
  ; Screen stuff... 
  Global ScreenWidth2.l 
  Global ScreenHeight2.l 
 
  ScreenWidth2.l = Round((ScreenWidth/2),0) 
  ScreenHeight2.l = Round((ScreenHeight/2),0) 
  
  Global wx.l 
  Global wy.l 
  Global wz.l 
 
EndProcedure 
 
Procedure.f CalcXRotation(x.f,y.f,z.f) 
  Shared _cos(), _sin()
  Result.f = _cos(wy) * _cos(wz) * x - _cos(wy) * _sin(wz) * y + _sin(wy) * z 
  ProcedureReturn Result 
EndProcedure 
 
Procedure.f CalcYRotation(x.f,y.f,z.f) 
  Shared _cos(), _sin()
  Result.f =  (_cos(wx) * _sin(wz) + _sin(wx) * _sin(wy) * _cos(wz)) * x + (_cos(wx) * _cos(wz) - _sin(wx) * _sin(wy) * _sin(wz)) * y - _sin(wx) * _cos(wy) * z 
  ProcedureReturn Result 
EndProcedure 
 
Procedure.f CalcZRotation(x.f,y.f,z.f) 
  Shared _cos(), _sin()
  Result.f =  (_sin(wx) * _sin(wz) - _cos(wx) * _sin(wy) * _cos(wz)) *y + (_sin(wx) * _cos(wz) + _cos(wx) * _sin(wy) * _sin(wz)) * y + _cos(wx) * _cos(wy) * z 
  ProcedureReturn Result 
EndProcedure 
 
Procedure CheckXRotation(x.l) 
  If x >= 360 
    Repeat 
      x - 360 
    Until x >= 0 And x < 360 
  EndIf 
  If x < 0 
    Repeat 
      x + 360 
    Until x >= 0 And x < 360 
  EndIf 
  ProcedureReturn x 
EndProcedure 
 
Procedure CheckYRotation(y.l) 
  If y >= 360 
    Repeat 
      y - 360 
    Until y >= 0 And y < 360 
  EndIf 
  If y < 0 
    Repeat 
      y + 360 
    Until y >= 0 And y < 360 
  EndIf 
  ProcedureReturn y 
EndProcedure 
  
Procedure CheckZRotation(z.l) 
  If z >= 360 
    Repeat 
      z - 360 
    Until z >= 0 And z < 360 
  EndIf 
  If z < 0 
    Repeat 
      z + 360 
    Until z >= 0 And z < 360 
  EndIf 
  ProcedureReturn z 
EndProcedure 
 
Procedure d_circle3d(x1.f,y1.f,z1.f,diameter.f) 
  Shared Constant, CameraPosition 
  ; calculate rotation 
  xx.f = CalcXRotation(x1*CameraPosition,y1*CameraPosition,z1*CameraPosition) 
  yy.f = CalcYRotation(x1*CameraPosition,y1*CameraPosition,z1*CameraPosition) 
  zz.f = CalcZRotation(x1*CameraPosition,y1*CameraPosition,z1*CameraPosition) 
 
  ; 1. convert to 2D coordinates 
  ; 2. draw it... 
 
Circle(Round(xx-zz/Constant,0)+ScreenWidth2,Round(yy-zz/Constant,0)+ScreenHeight2, diameter*CameraPosition) 
EndProcedure 
 
Procedure d_line3d(x1.f,y1.f,z1.f,x2.f,y2.f,z2.f) 
  Shared Constant,CameraPosition 
 
  ; calculate rotation 
  xx.f = CalcXRotation(x1*CameraPosition,y1*CameraPosition,z1*CameraPosition) 
  yy.f = CalcYRotation(x1*CameraPosition,y1*CameraPosition,z1*CameraPosition) 
  zz.f = CalcZRotation(x1*CameraPosition,y1*CameraPosition,z1*CameraPosition) 
 
  xx2.f = CalcXRotation(x2*CameraPosition,y2*CameraPosition,z2*CameraPosition)
  yy2.f = CalcYRotation(x2*CameraPosition,y2*CameraPosition,z2*CameraPosition)
  zz2.f = CalcZRotation(x2*CameraPosition,y2*CameraPosition,z2*CameraPosition)
 
  ; 1. convert to 2D coordinates 
  ; 2. draw it... 
   
  LineXY(Round(xx-zz/Constant,0)+ScreenWidth2,Round(yy-zz/Constant,0)+ScreenHeight2,Round(xx2-zz2/Constant,0)+ScreenWidth2,Round(yy2-zz2/Constant,0)+ScreenHeight2) 
EndProcedure 
 

;- Init stuff 
 
InitSprite() 
InitMouse() 
InitKeyboard() 
 
d_init3d(1021,716) 
 
OpenWindow(1,100,200,750,480,"Test",#PB_Window_SystemMenu) 
OpenWindowedScreen( WindowID(1),10,10,800,600,1,10,10) 
 
;- main program 
 
x.f = 0
y.f = 0 
z.f = 0 
 
Start.l = 1 
 
Repeat 
ExamineMouse() 
ExamineKeyboard() 
  
; check rotation -> if x, y and z <0 or >360 error 
  wx = CheckXRotation(x) 
  wy = CheckYRotation(y) 
  wz = CheckZRotation(z) 
  
 
  
  ClearScreen(RGB(0,0,0)) 
  StartDrawing(ScreenOutput()) 
  
  ; DrawingMode: 
  ;  0: Default mode, text is displayed with background, graphics shape are filled 
  ;  1: Set the text background transparent 
  ;  2: Enable the XOr mode (all graphics are XOR'ed with current background) 
  ;  4: Enable the outlined shape. Circle, Box etc... will be only outlined, no more filled. 
  DrawingMode(0) 
 

  ; set the circle on top of the component 
  FrontColor(RGB(255,0,0))
  d_circle3d(0,0,4,0.2) 
 

  FrontColor(RGB(255,255,255))
 

; IC SOL18-P-300-1.27 Toshiba ULN2803 
; dimensions in millimeter 
; body top 
  d_line3d( -15.775, 3.75, 1.15,-25.775, 3.75, 1.15) 
  d_line3d( -15.775,-3.75, 1.15,-25.775,-3.75, 1.15) 
  d_line3d( -25.775, 3.75, 1.15,-25.775,-3.75, 1.15) 
  d_line3d( -15.775, 3.75, 1.15,-15.775,-3.75, 1.15) 
;body bottom 
  d_line3d( -15.775, 3.75,-1.15,-25.775, 3.75,-1.15) 
  d_line3d( -15.775,-3.75,-1.15,-25.775,-3.75,-1.15) 
  d_line3d( -25.775, 3.75,-1.15,-25.775,-3.75,-1.15) 
  d_line3d( -15.775, 3.75,-1.15,-15.775,-3.75,-1.15) 
;body z corners 
  d_line3d( -25.775, 3.75, 1.15,-25.775, 3.75,-1.15) 
  d_line3d( -15.775, 3.75, 1.15,-15.775, 3.75,-1.15) 
  d_line3d( -25.775,-3.75, 1.15,-25.775,-3.75,-1.15) 
  d_line3d( -15.775,-3.75, 1.15,-15.775,-3.75,-1.15) 
 

; IC SOL18-P-300-1.27 Toshiba ULN2803 
; dimensions in millimeter 
; body top 
  d_line3d( -5.775, 3.75, 1.15, 5.775, 3.75, 1.15) 
  d_line3d( -5.775,-3.75, 1.15, 5.775,-3.75, 1.15) 
  d_line3d(  5.775, 3.75, 1.15, 5.775,-3.75, 1.15) 
  d_line3d( -5.775, 3.75, 1.15,-5.775,-3.75, 1.15) 
;body bottom 
  d_line3d( -5.775, 3.75,-1.15, 5.775, 3.75,-1.15) 
  d_line3d( -5.775,-3.75,-1.15, 5.775,-3.75,-1.15) 
  d_line3d(  5.775, 3.75,-1.15, 5.775,-3.75,-1.15) 
  d_line3d( -5.775, 3.75,-1.15,-5.775,-3.75,-1.15) 
;body z corners 
  d_line3d(  5.775, 3.75, 1.15, 5.775, 3.75,-1.15) 
  d_line3d( -5.775, 3.75, 1.15,-5.775, 3.75,-1.15) 
  d_line3d(  5.775,-3.75, 1.15, 5.775,-3.75,-1.15) 
  d_line3d( -5.775,-3.75, 1.15,-5.775,-3.75,-1.15) 
 

;lead # 5 
  d_line3d(  0.24, 3.75, 0.14,-0.24, 3.75, 0.14) 
  d_line3d(  0.24, 3.75,-0.14,-0.24, 3.75,-0.14) 
  d_line3d(  0.24, 3.75, 0.14, 0.24, 3.75,-0.14) 
  d_line3d( -0.24, 3.75, 0.14,-0.24, 3.75,-0.14) 
  
  d_line3d(  0.24, 3.75, 0.14, 0.24, 4.49, 0.14) 
  d_line3d( -0.24, 3.75, 0.14,-0.24, 4.49, 0.14) 
  d_line3d(  0.24, 3.75,-0.14, 0.24, 4.31,-0.14) 
  d_line3d( -0.24, 3.75,-0.14,-0.24, 4.31,-0.14) 
 
  d_line3d(  0.24, 4.49, 0.14, 0.24, 4.49,-1.22) 
  d_line3d( -0.24, 4.49, 0.14,-0.24, 4.49,-1.22) 
  d_line3d(  0.24, 4.31,-0.14, 0.24, 4.31,-1.50) 
  d_line3d( -0.24, 4.31,-0.14,-0.24, 4.31,-1.50) 
  d_line3d(  0.24, 4.49, 0.14,-0.24, 4.49, 0.14) 
  d_line3d(  0.24, 3.75,-0.14,-0.24, 3.75,-0.14) 
 
  d_line3d(  0.24, 4.49,-1.22, 0.24, 5.15,-1.22) 
  d_line3d( -0.24, 4.49,-1.22,-0.24, 5.15,-1.22) 
  d_line3d(  0.24, 4.31,-1.50, 0.24, 5.15,-1.50) 
  d_line3d( -0.24, 4.31,-1.50,-0.24, 5.15,-1.50) 
 
  d_line3d(  0.24, 5.15,-1.22,-0.24, 5.15,-1.22) 
  d_line3d(  0.24, 5.15,-1.50,-0.24, 5.15,-1.50) 
  d_line3d(  0.24, 5.15,-1.22, 0.24, 5.15,-1.50) 
  d_line3d( -0.24, 5.15,-1.22,-0.24, 5.15,-1.50) 
 
  StopDrawing() 
  FlipBuffers() 
  
  ExamineKeyboard() 
 
  If KeyboardPushed(#PB_Key_Home) 
    Constant = Constant * 1.02 
    SetWindowText_(WindowID(1),StrF(Constant)) 
  EndIf 
  If KeyboardPushed(#PB_Key_End) 
    Constant = Constant * 0.98 
    SetWindowText_(WindowID(1),StrF(Constant)) 
  EndIf 
 
  If KeyboardPushed(#PB_Key_PageUp) 
    CameraPosition = CameraPosition * 1.02 
  EndIf 
  If KeyboardPushed(#PB_Key_PageDown) 
    CameraPosition = CameraPosition * 0.98 
  EndIf 
 
  If KeyboardPushed(#PB_Key_Up) 
    x = x - 1 ;normally it should be y 
  EndIf 
  If KeyboardPushed(#PB_Key_Down) 
    x = x + 1 ;normally it should be y 
  EndIf 
 
  If KeyboardPushed(#PB_Key_Right) 
    y = y  - 1 ;normally it should be x 
  EndIf 
  If KeyboardPushed(#PB_Key_Left) 
    y = y + 1 ;normally it should be x 
  EndIf 
  
  If KeyboardPushed(#PB_Key_Delete) 
    z = z - 1 
  EndIf 
  If KeyboardPushed(#PB_Key_Insert) 
    z = z + 1 
  EndIf 
 
  If KeyboardPushed(#PB_Key_F1) 
    x = 0 
    y = 0 
    z = 0 
  EndIf 
 
  SetWindowText_(WindowID(1)," X: " + Str(wx) + "   Y: " + Str(wy) + "   Z: " + Str(wz) + "   SinX: " + StrF(_sin(wx),2) + "   SinY: " + StrF(_sin(wy),2) + "  SinZ: " + StrF(_sin(wz),2) + "   CosX: " + StrF(_cos(wx),2) + "   CosY: " + StrF(_cos(wy),2) + "   CosZ: " + StrF(_cos(wz),2) + "   Constant: " + StrF(Constant)) 
Until MouseButton(1) Or KeyboardPushed(#PB_Key_Escape) 
End

увеличить

0

448

Подскажите пожалуйста, вот у меня программа

Код:
OpenWindow(0, 0, 0, 270, 140, "ListViewGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    ListViewGadget(0, 10, 10, 250, 120)
    AddGadgetItem (0, 0, "1")
    AddGadgetItem (0, 1, "2")
      Repeat
        event=WindowEvent()  
        If event=#PB_Event_Gadget And EventType() =#PB_EventType_LeftDoubleClick 
          Debug "был клик на одну штуку, а как определить на какую???"
        EndIf  
        Until event =#PB_Event_CloseWindow

которая выводит список. Я например хочу кликнуть на один из пунктов. Но я незнаю как проработать сабытие. Представленное событие говорит о том что я нажал что то. А как определить что я нажал?

0

449

Илья написал(а):

Я например хочу кликнуть на один из пунктов

Код:
#List=1

OpenWindow(0, 0, 0, 270, 140, "ListViewGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    ListViewGadget(#List, 10, 10, 250, 120)
    AddGadgetItem (#List,-1, "1")
    AddGadgetItem (#List,-1, "2")
    AddGadgetItem (#List,-1, "3")
    AddGadgetItem (#List,-1, "4")
Repeat
Event =  WaitWindowEvent() 
 
  Select Event
   Case #PB_Event_Gadget
    Select EventGadget()
     Case #List
      Debug GetGadgetText(#List)
   EndSelect             
  EndSelect  
If Event = #PB_Event_CloseWindow
 Break         
EndIf
ForEver

0

450

Иван написал(а):

Дело в том что ошибки как таковой нет. Программа "не отвечает" и зависает.

У меня она почему-то не висла.
Возможно что виснет в цикле одной из процедур при некоторых условиях.

Илья написал(а):

А как определить что я нажал?

Для этого есть функции GetGadgetState чтобы узнать позицию пункта и GetGadgetText чтобы получить текст пункта, по которому кликнули.

0


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