Oui, c'est la seul explication...
Je travail beaucoup sur l'esthétique de PureASM, maintenant il y a un joli menu coloré, une joli toolbar, un joli panel et je travaille maintenant sur l'éditeur que je vais écrire entièrement (RichEdit et Scintilla ne me plaisent pas) je veux pouvoir mettre une texture sous le texte, voici une bidouille pour voir ce que ça donne
Code : Tout sélectionner
Enumeration
#Window_0
#Background1
#Background2
#Background3
EndEnumeration
#Visible = #True
#Invisible = #False
Global quit,hWnd,hBKBrush1,hBKBrush2,CurseurX,CurseurY,PositionX,PositionY,HauteurTexte
Global Timer,EtatCurseur,BKCurseurID
PositionX = 1
PositionY = 1
Procedure AfficheCurseur()
hDC = GetDC_(hWnd)
If EtatCurseur = #Visible
UseImage(BKCurseurID) : DC_Curseur = StartDrawing(ImageOutput())
BitBlt_(DC_Curseur,0,0,2,HauteurTexte,hDC,CurseurX,CurseurY,#SrcCopy)
StopDrawing()
Pen = CreatePen_(0, 1, RGB(250, 250, 250))
SelectObject_(hDC, Pen)
MoveToEx_(hDC,CurseurX,CurseurY,0) : LineTo_(hDC,CurseurX,CurseurY+HauteurTexte)
MoveToEx_(hDC,CurseurX+1,CurseurY,0) : LineTo_(hDC,CurseurX+1,CurseurY+HauteurTexte)
DeleteObject_(Pen)
Else
UseImage(BKCurseurID) : DC_Curseur = StartDrawing(ImageOutput())
BitBlt_(hDC,CurseurX,CurseurY,2,HauteurTexte,DC_Curseur,0,0,#SrcCopy)
StopDrawing()
EndIf
ReleaseDC_(hWnd,hDC)
EndProcedure
Procedure WindowCallBack(WindowID, message, wParam, lParam)
Result = #PB_ProcessPureBasicEvents
Select message
Case #WM_CHAR
If wParam = 13
EtatCurseur = #Invisible : AfficheCurseur()
CurseurX = 65
CurseurY + HauteurTexte
EtatCurseur = #Visible : AfficheCurseur()
PositionX = 1 : PositionY + 1
ElseIf wParam = 8
Debug "DEL"
Else
EtatCurseur = #Invisible : AfficheCurseur()
StartDrawing(WindowOutput())
DrawingFont(LoadFont(0,"Verdana",12))
FrontColor(100, 100, 200)
DrawingMode(1)
Locate(CurseurX,CurseurY)
DrawText(Chr(wParam))
CurseurX + TextLength(Chr(wParam))
EtatCurseur = #Visible : AfficheCurseur()
StopDrawing()
EndIf
EndSelect
ProcedureReturn Result
EndProcedure
hWnd = OpenWindow(#Window_0, 0, 0, 800, 600, #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_Invisible, "Texture")
;/Créer l'image de fond de la fenêtre
hBackground1 = CreateImage(#Background1,100,40)
StartDrawing(ImageOutput())
For Y=0 To 40 Step 4
Line(0,Y,100,0,RGB(40,40,80))
Line(0,Y+2,100,0,RGB(38,38,75))
For t=0 To 100
If Random(100)>50 : Plot(t,Y+1,RGB(40,40,80)) : Plot(t,Y+3,RGB(40,40,80))
Else : Plot(t,Y+1,RGB(38,38,75)) : Plot(t,Y+3,RGB(38,38,75))
EndIf
Next
Next
StopDrawing()
hBackground2 = CreateImage(#Background2,65,40)
StartDrawing(ImageOutput())
For Y=0 To 40 Step 4
For t=0 To 65
Plot(t,Y,RGB(40+t*2,80+t*2,120+t*2))
Plot(t,Y+2,RGB(38+t*2,75+t*2,112+t*2))
If Random(100)>50 : Plot(t,Y+1,RGB(40+t*2,80+t*2,120+t*2)) : Plot(t,Y+3,RGB(40+t*2,80+t*2,120+t*2))
Else : Plot(t,Y+1,RGB(38+t*2,75+t*2,112+t*2)) : Plot(t,Y+3,RGB(38+t*2,75+t*2,112+t*2))
EndIf
Next
Next
StopDrawing()
hBKBrush1 = CreatePatternBrush_(hBackground1)
hBKBrush2 = CreatePatternBrush_(hBackground2)
hEcran = CreateImage(#Background3,800,600)
hDC = StartDrawing(ImageOutput())
SelectObject_(hDC, hBKBrush2)
Rectangle_(hDC,-1,0,65,600)
SelectObject_(hDC, hBKBrush1)
Rectangle_(hDC,64,-1,800,601)
StopDrawing()
hBrush = CreatePatternBrush_(hEcran)
SetClassLong_(hWnd, #GCL_HBRBACKGROUND, hBrush)
SetWindowCallback(@WindowCallBack())
HideWindow(0,0)
hDC = StartDrawing(WindowOutput())
DrawingFont(LoadFont(0,"Verdana",12))
PrevMapMode = SetMapMode_(hDC,#MM_TEXT)
GetTextMetrics_(hDC,tm.TEXTMETRIC)
If PrevMapMode : SetMapMode_(hDC,PrevMapMode) : EndIf
HauteurTexte = tm\tmHeight
StopDrawing()
CurseurX = 65
CurseurY = 0
BKCurseurID = CreateImage(#PB_Any,2,HauteurTexte)
Timer = SetTimer_(WindowID(), 0, 600, 0)
;/
Repeat
EventID = WaitWindowEvent()
Select EventID
Case #WM_TIMER
If EtatCurseur = #Visible : EtatCurseur = #Invisible
Else : EtatCurseur = #Visible
EndIf
AfficheCurseur()
Case #PB_Event_CloseWindow : quit = #True
EndSelect
Until quit
DeleteObject_(hBKBrush1)
DeleteObject_(hBKBrush2)
DeleteObject_(hBrush)
bien sûr, l'utilisateur pourra choisir sa texture...