Seite 2 von 2

Verfasst: 03.05.2006 04:18
von edel
normale Variablen

Code: Alles auswählen

hInstance.l
!mov [v_hInstance],_PB_Instance

normale Variablen in Proceduren (p.)

Code: Alles auswählen

Procedure [...]
  Protected hInstance
  !mov   [p.v_hInstance],dword _PB_Instance
  
  
EndProcedure
dann gibt es noch pointer z.b. *var , diese wird dann ueber p_var
oder p.p_var angesprochen.


In dem Fall von GetGadgetParent() braucht man den "Dummy" nicht
wirklich da im folgendem Code die Lib eh gelinkt wird.

Asm muss nicht in einer Procedur stehen.

Verfasst: 03.05.2006 05:20
von The Rookie
Hi hallodri,

vielen Dank !!!

Hatte nicht zu hoffen gewagt dass es so einfach ist. :allright:

Ich habs jetzt für's erste mal in ein paar Prozeduren angewand.
Für den, den's interessiert anbei also mal ein paar Prozeduren die einem zusätzliche Screen-Informationen liefern, welche man von Pure ja sonst nicht bekommt:

Code: Alles auswählen

; IsScreen()         -  liefert einen Wert <> 0, wenn ein Screen geöffnet ist. 
; IsScreenDrawing()  -  liefert einen Wert <> 0, wenn die Ausgabe (StartDrawing()) auf den Ausgabekanal des Screens gerichtet ist.
; 
; ScreenWidth()      -  liefert die Breite des Screens       (z.Zt. nur PB 3.94) 
; ScreenHeight()     -  liefert die Höhe des Screens         (z.Zt. nur PB 3.94) 
; ScreenDepth()      -  liefert die Bittiefe des Screens     (z.Zt. nur PB 3.94) 
; 
; ACHTUNG! die letzten drei Prozeduren liefern auch noch die Werte des Screens, wenn dieser bereits wieder geschlossen wurde !!! 


Procedure IsScreen() 
  !EXTRN _PB_DirectX_PrimaryBuffer 
  !MOV   Eax,[_PB_DirectX_PrimaryBuffer] 
  ProcedureReturn 
  InitSprite()    ; Dummycall, to make sure, that the needed Library will be included 
EndProcedure 

Procedure IsScreenDrawing() 
  !EXTRN _PB_DirectX_CurrentDC 
  !MOV   Eax,[_PB_DirectX_CurrentDC] 
  ProcedureReturn 
  InitSprite()    ; Dummycall, to make sure, that the needed Library will be included 
EndProcedure 

Procedure ScreenWidth() 
  !EXTRN _PB_DirectX_ScreenWidth 
  !MOV   Eax,[_PB_DirectX_ScreenWidth] 
  ProcedureReturn 
  InitSprite()    ; Dummycall, to make sure, that the needed Library will be included 
EndProcedure 

Procedure ScreenHeight() 
  !EXTRN _PB_DirectX_ScreenHeight 
  !MOV   Eax,[_PB_DirectX_ScreenHeight] 
  ProcedureReturn 
  InitSprite()    ; Dummycall, to make sure, that the needed Library will be included 
EndProcedure 

Procedure ScreenDepth() 
  !EXTRN _PB_DirectX_ScreenDepth 
  !MOV   Eax,[_PB_DirectX_ScreenDepth] 
  ProcedureReturn 
  InitSprite()    ; Dummycall, to make sure, that the needed Library will be included 
EndProcedure 

;########### kleiner Demo-Code ######### 

Debug "----- Programstart ----------" 
Debug "IsScreen               : "+Str(IsScreen()) 
Debug "IsScreenDrawing  : "+Str(IsScreenDrawing()) 
Debug "" 
Debug "----- InitSprite ----------" 
InitSprite() 
Debug "IsScreen               : "+Str(IsScreen()) 
Debug "IsScreenDrawing  : "+Str(IsScreenDrawing()) 
Debug "" 
Debug "----- OpenScreen ----------" 
OpenScreen(640,480,16,"jkhg") 
Debug "IsScreen               : "+Str(IsScreen()) 
Debug "IsScreenDrawing  : "+Str(IsScreenDrawing()) 
Debug "" 
Debug "----- StartDrawing ----------" 
StartDrawing(ScreenOutput()) 
Debug "IsScreen               : "+Str(IsScreen()) 
Debug "IsScreenDrawing  : "+Str(IsScreenDrawing()) 
Debug "" 
Debug "----- StopDrawing ----------" 
StopDrawing() 
Debug "IsScreen               : "+Str(IsScreen()) 
Debug "IsScreenDrawing  : "+Str(IsScreenDrawing()) 
Debug "" 
Debug "----- CloseScreen ----------" 
CloseScreen() 
Debug "IsScreen               : "+Str(IsScreen()) 
Debug "IsScreenDrawing  : "+Str(IsScreenDrawing()) 
Debug "" 
Debug "ScreenWidth   : "+Str(ScreenWidth()) 
Debug "ScreenHeight  : "+Str(ScreenHeight()) 
Debug "ScreenDepth   : "+Str(ScreenDepth()) 
End
(Das man InitSprite()-Dummy nicht in jeder Prozedur benötige ist mir natürlich klar. Hab's nur für den Fall drin, dass jemand die Prozeduren einzeln verwenden möchte.)

Leider scheint sich aber bei PB4 im Gegensatz zu 3.94 da was mit den Variablen oder bei der Sprite-Library geändert zu haben. :(
Denn wärend o.g. Code in 3.94 problemlos läuft kennt PB4 scheinbar die Variablen
_PB_DirectX_ScreenWidth , _PB_DirectX_ScreenHeight und _PB_DirectX_ScreenDepth nicht und bringt einen '3 unresolved externals' Error.

Hat zufällig schon jemand gerauere Informationen darüber, was sich diesbezüglich bei PB4 geändert hat?
Gibt's eventuell schon irgenwo eine neuere 'PureBasic library descriptor.txt' ?

ThanX und Gruß,
The Rookie.

Verfasst: 03.05.2006 07:03
von edel