Page 3 sur 4

Re: une montre... special

Publié : mar. 28/févr./2012 16:29
par Backup
Ar-S a écrit :
Merci, je trouve le résultat plus "lisible" avec ce code.
P.S : Le résultat reste en claire sauf si tu refaits un clique gauche dedans.
ha oui :oops: bien vu ! :)

pour l'affichage , c'est pourtant strictement le meme que le miens :)
ton cerveau s'habitue !! :)

le code de Zaphod , légèrement modifié pour centrer l'affichage :)

Code : Tout sélectionner


;
Enumeration
  #window
  #imgad
  #im0
  #im1
  #im2
  #im3
  #font1
  #timer
EndEnumeration
;
Global Dim heure.i(25,18)
Global Dim minut.i(25,18)
Global flagh.i,flagm.i
;
Procedure DrawTime()
  Protected x.i,y.i
  CreateImage(#im3,40,20)
  StartDrawing(ImageOutput(#im3))
  DrawingFont(FontID(#font1))
      If Hour(Date()) <10
         DrawText(1,1,"0"+Str(Hour(Date())),#Green)
         Else
         DrawText(1,1,Str(Hour(Date())),#Green)
      EndIf
      If Minute(Date())<10
         DrawText(20,1,"0"+Str(Minute(Date())),#Green)
         Else
         DrawText(20,1,Str(Minute(Date())),#Green)
      EndIf
     
      For y=0 To 16
         For x=1 To 19
            heure(x,y)=Point(x,y)
            minut(x,y)=Point(x+19,y)
         Next x
      Next y
      StopDrawing()
     ;
  FreeImage(#im3)
EndProcedure

Procedure drawmotif()
  Protected x.i,y.i
  ;
  StartDrawing(ImageOutput(#im0))
  Box(0,0,270,350,#Black)
  ;
  For y=3 To 13
      For x=2 To 19
         If heure(x,y)>0
           DrawImage(ImageID(#im2), (x*16)-62,(y*16)-50)
            Else
            If  flagh =0
              DrawImage(ImageID(#im1),(x*16)-62,(y*16)-50)
            EndIf
          EndIf
        Next x
      Next y
;     
      For y=3 To 13
        For x=2 To 19
          If minut(x,y)>0
            DrawImage(ImageID(#im2),(x*16)-62,(y*16)+125)           
            Else
            If  flagm=0
               DrawImage(ImageID(#im1),(x*16)-62,(y*16)+125)
            EndIf
         EndIf
      Next x
    Next y
    ;
    StopDrawing()
    ;
    SetGadgetState(#imgad,ImageID(#im0))
EndProcedure
;
;-debut
;
OpenWindow(#window, 0, 0, 260, 350, "TimeMotif", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
 ImageGadget(#imgad,0,0,270,350,0)
 ;
 CreateImage(#im1,16,16);,32|#PB_Image_Transparent) ; \
 StartDrawing(ImageOutput(#im1))
 Line(0,0,16,16,#Green)
 Line(1,0,16,16,#Green)
 Line(0,1,16,16,#Green)
 StopDrawing()
 ;
 CreateImage(#im2,16,16);,32|#PB_Image_Transparent) ; /
 StartDrawing(ImageOutput(#im2))
 LineXY(0,16,16,0,#Green)
 LineXY(1,16,15,0,#Green)
 LineXY(0,15,16,1,#Green)
 StopDrawing()
 ;
 CreateImage(#im0,270,350)
 ;
 LoadFont(#font1, "Courier", 10,#PB_Font_Bold)
 ;
 Drawtime()
 drawmotif()
 ;
 AddWindowTimer(#window,#timer,1000)
 ;
    Repeat
      Event = WaitWindowEvent()
      Select event
        Case #PB_Event_Gadget
          If EventGadget()=#imgad
          If EventType()=#PB_EventType_LeftClick
            flagh= (Not flagh)
            flagm= (Not flagm)
            drawmotif()
          EndIf
          EndIf
         
        Case #PB_Event_Timer
        If EventTimer() = #timer
          drawtime()
          drawmotif()
        EndIf
        EndSelect
         
Until Event = #PB_Event_CloseWindow


Re: une montre... special

Publié : mar. 28/févr./2012 23:23
par Ar-S
Tu fais ça avec ton NC 10 ?
Parce que coté affichage, j'ai pas de soucis avec le code de zaphod mais un décalage avec ton remaniement.

Image

Tes codes précédents affichaient déjà ce décalage chez moi.
Bizarre

Re: une montre... special

Publié : mar. 28/févr./2012 23:37
par Backup
très étonnant !! 8O

non je code sur mon Msi 17 pouces (voir signature) Resolution 1920x1080

Purebasic 4.60 32/64 bits


avec ma rectification :------------------------------------------------------------------------- -------> Zaphod Version

Image Image

Ps: Merci au passage tu m'a permis de corriger un bug sur mon editeur :)

Re: une montre... special

Publié : mer. 29/févr./2012 0:28
par Ar-S
Essaye de les relancer en 1680 x 1050 pour voir si ça fait pareil.

Re: une montre... special

Publié : mer. 29/févr./2012 0:35
par Backup
pareil sur toute les resolutions (a partir de 800x600 )

et quelque soit le mode de mise a l'echelle de l'ecran par Nvidia
( parametre qui permet d'avoir le 1024x600 en plein ecran si on veux ou pas .. )
c'est bizarre ça 8O

peut etre un probleme de pilote ... faut que je vérifie ça ..

[reedit] j'ai téléchargé le dernier pilote de nvidia pour ma carte , ça n'a rien changé !
le probleme est ailleurs .... faudrai que quelqu'un d'autre test les 2 codes et nous dise
c'est mon ordi ou le tiens qui va pas ?

Re: une montre... special

Publié : jeu. 01/mars/2012 1:34
par Backup
bon je viens de reediter mon code (celui des sprites )

effectivement lorsque je teste sur mon NC10 j'ai les memes résultats que toi
(code Zaphode et le miens (maintenant corrigé ) )

Sur mon Msi , j'ai un décalage !! 8O

pilote graphique a jour !

l'utilisation de l'ecran screen en fenêtre semble avoir un bug je pense !

j'ai deja soulevé un lievre sur le forum anglais avec l'histoire du redimensionnent
des sprites et des images qui est différent... peut etre un problème Directx 9 ou 10 ( faut que je vois la mise a jour aussi )

je sais plus ou en est la dernière Version de Directx .. mais je sais que mon MSI gere la dernière
(DirectX 11 )
peut etre que c'est là , le probleme de base avec le Screen de Purebasic ?

vais retester le bug du redimensionnement sur mon Nc10 pour voir

[Reedit]
bon apres test , il n'y a pas de bug avec mon NC10 !

je pense donc que ce "bug" qui n'a lieu que sur mon MSI doit provenir
du DirectX ..... sur mon MSI j'ai la Version 11
c'est embetant ces changement de Version qui sont non compatible

Re: une montre... special

Publié : jeu. 01/mars/2012 12:06
par Backup
ar-s : tu as quel version de Directx ??

execute "dxdiag"

bon j'ai signalé ce "bug" ici :
http://forums.purebasic.com/english/vie ... 0b921bc38c

on verra si Fred répond :)

Re: une montre... special

Publié : jeu. 01/mars/2012 15:21
par Ar-S
J'ai le 11 (7x64...)

Comme d'hab le problème doit venir de la gestion différente de l'affichage entre carte ATI / Nvidia.
Sont pénible...

Re: une montre... special

Publié : jeu. 01/mars/2012 15:51
par Backup
ouaip , mais pour le coup ce serai Nvidia qui serai OUT :roll:

parceque mon nc10 (GMA 950 ) c'est meme affichage que toi et Zaphod ( sans décalage )

Re: une montre... special

Publié : jeu. 01/mars/2012 19:54
par GallyHC
Bonjour,

Perso pas de prob apar qu'il faut bien plisser les yeux pour pouvoir voir l'heure lollll

Cordialement,
GallyHC

Re: une montre... special

Publié : jeu. 01/mars/2012 20:12
par Backup
GallyHC a écrit :Perso pas de prob apar qu'il faut bien plisser les yeux pour pouvoir voir l'heure lollll
tu veux parler dernier code de zaphod posté par Ar-s ?? (page 3)

si c'est celui la click sur la fenetre , et normalement les lettres devraient être centrées

alors que ma modification de ce code (message suivant )
montre en principe les lettres décalées !

hors justement , pas sur mon MSI ( c'est l'inverse ) ;)

Re: une montre... special

Publié : dim. 11/mars/2012 10:35
par Backup
autre bizarrerie concernant ce code :roll:

lorsque je compile ma montre en 64 bits ( sous seven 64bits )
que je la mets dans le menu demarrage de win7

la montre plante au démarrage
( pourtant il me semble que les prg mis dans le menu demarrage se lance APRES le system )

alors qu'en 32bits non !

question : un ordinateur 64 bits (seven ) boot en 32 bits puis passe en 64 bits ensuite ?
ou bien est-ce un bug du compilateur Purebasic ?

rappel ce ( ces ) codes font appel au graphisme ... y aurait'il un probleme de boot en 64 bits avec un code utilisant la partie
graphique ?

bizarre, bizarre

Re: une montre... special

Publié : lun. 20/janv./2014 15:13
par Backup
Code mis en Version 5.20

les images :
Block A:

Image

block A2:

Image

rappel on peut cliquer sur la montre pour afficher l'heure en clair .. si vous n'arrivez pas a lire ;)

Code : Tout sélectionner

;***********************************************
;Titre  :*illusion
;Auteur  : Dobro
;Date  :20/01/2014
;Heure  :14:54:46
;Version Purebasic :  PureBasic 5.21 LTS (Windows - x86)
;Version de l'editeur :EPB V2.52
; Libairies necessaire : Aucune 
; Adaptation d'un concept de montre "illusion" de chez Tokyo flash
;***********************************************
UsePNGImageDecoder()
global flag_heure=0,flag_min=0
Enumeration
	#window
	#block
	#block2
	#timer
	#timer2
EndEnumeration
InitSprite(); : InitSprite3D()
Declare  WindowCallback(WindowID,message,wParam,lParam)
Declare  animation()
if FileSize("illusion.inf")<>-1
	openfile(1,"illusion.inf")
	global xw=readLong(1)
	global yw=readLong(1)
	CloseFile(1)
	Else
	xw=1
	yw=1
endif
global taillex=(248)/2
global tailley=(436)/2
OpenWindow(#window,xw,yw,taillex,tailley,"Illusion",#PB_Window_BorderLess ) ;#PB_Window_SizeGadget
AddWindowTimer(#window,#timer,1000)
AddWindowTimer(#window,#timer2,2000)
OpenWindowedScreen(windowid(#window),1 ,1,256,440,1,0,0)
SetWindowCallback(@WindowCallback())
;{ ********** dessin du block de base ************
LoadSprite(#block,"E:\Dobro\PureBasic\dobro\Dobro_creation\montre\blockA.png")

; lettre
LoadSprite(#block2,"E:\Dobro\PureBasic\dobro\Dobro_creation\montre\blockA2.png")

;} *********************************************
dim heure(25,18)
dim minut(25,18)
repeat
	
	StartDrawing(ScreenOutput())
		if Hour(Date()) <10
			DrawText(1,1,"0"+str(Hour(Date())),#green)
			else
			DrawText(1,1,str(Hour(Date())),#green)
		endif
		if minute(Date())<10
			DrawText(20,1,"0"+str(minute(Date())),#green)
			else
			DrawText(20,1,str(minute(Date())),#green)
		endif
		
		:L=0
		for y=1 to 16
			for x=1 to 16
				heure(x,y)=point(x,y)
				minut(x,y)=point(x+20,y)
			next x
		next y
	StopDrawing()
	ClearScreen(0)
	
	;{ *********** Affichage *******************  
	L=0
	;Start3D()
	for y=0 to 16
		for x=0 to 16 
			if heure(x,y)>0
				DisplaySprite(#block2,(x*16)-16,(y*16)-32)
				
				else
				if  flag_heure =0
					DisplaySprite(#block,(x*16)-16,(y*16)-32)
				endif
			endif
			
			if minut(x,y)>0
				
				DisplaySprite(#block2,(x*16),(y*16)+160+16)
				
				Else
				if  flag_min=0
					DisplaySprite(#block,(x*16),(y*16)+160+16)
				endif
			endif
		next x
	next y
	;Stop3D()
	
	FlipBuffers()
	ClearScreen(0)
	;} ***************************************²
	event= WaitWindowEvent(20)
	select event
		;case #PB_Event_Timer
		
		case #WM_LBUTTONdown
		SendMessage_(WindowID(#Window), #WM_NCLBUTTONDOWN, #HTCAPTION, 0)
		
		flag_min=1
		flag_heure=1
		openfile(1,"illusion.inf")
		WriteLong(1,WindowX(#window))
		WriteLong(1,Windowy(#window))
		CloseFile(1)
		
		case #WM_RBUTTONdown
		event=#PB_Event_CloseWindow
	endselect
	
until event=#PB_Event_CloseWindow
Delay(500)
end
; 
Procedure WindowCallback(WinID,message,wParam,lParam)
	; by Dobro
	res=#PB_ProcessPureBasicEvents
	Select message
		case #WM_LBUTTONUP
		; 
		flag_min=0
		flag_heure=0
		Case #WM_PAINT
		flag_min=0
		flag_heure=0
		
		Case #WM_TIMER
		
		if EventTimer() = #timer
			flag_min=0
			flag_heure=0
			animation()
			
		endif
		if EventTimer() = #timer2
			; rafraichi l'affichage
			flag_min=0
			flag_heure=0
			ResizeWindow(#window,#pb_ignore,#pb_ignore,taillex,tailley)
		endif
		;EndSelect
	EndSelect
	ProcedureReturn res ; important , laissez passer les autres evenements !!!
EndProcedure
procedure animation()
	
	static pos_block
	static pos_block2
	
	pos_block=pos_block-1
	pos_block2=pos_block2+1
	if  pos_block<0 : pos_block=3:endif
	if  pos_block2>3
		pos_block2=0
		RemoveWindowTimer(#Window,#timer)
		AddWindowTimer(#window,#timer,random(60000)+10000)
	endif
	select pos_block
		case 0
		RotateSprite(#block,0,1)
		case 1
		RotateSprite(#block,90,1)
		case 2
		RotateSprite(#block,180,1)
		case 3
		RotateSprite(#block,270,1)
	endselect
	
	select pos_block2
		case 0
		RotateSprite(#block2,0,1)
		case 1
		RotateSprite(#block2,90,1)
		case 2
		RotateSprite(#block2,180,1)
		case 3
		RotateSprite(#block2,270,1)
	endselect
	
EndProcedure


; 



; 

; EPB

Re: Illusion..une montre... special

Publié : lun. 20/janv./2014 15:59
par Micoute
Merci Dobro pour ce partage !

Re: Illusion..une montre... special

Publié : mar. 21/janv./2014 0:36
par Ar-S
Dobro soit tu link les images nécessaires, soit tu dé-commentes les lignes de creasprite mais là tu es entre les 2.
En 5.21 faut rebidouiller par contre.