Lib Progui

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
MetalOS
Messages : 1510
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Lib Progui

Message par MetalOS »

Salut,

si quelqu'un utilise la lib ProGui j'aurai besoin d'un petit coup de main. Quand je test d'intégrer une toolbar progui + une rebar sur l'exemple de GaugeGadget de Guimauve, les gauges ne s'affiche pas. Il faut systématiquement que je réduise la fenêtre et la ré-agrandisse pour que les Gauges se dessine complètement. Quelqu'un aurai une idée ? Merci d'avance.

Voici mon code de test:

Code : Tout sélectionner

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Project name : GaugeGadget
; File Name : GaugeGadget.pb
; File version: 2.1.0
; Programmation : OK
; Programmed by : Trond
; Modified by : Guimauve
; Date : 20-02-2011
; Mise à jour : 22-05-2011
; PureBasic code : 4.51
; Plateform : Windows, Linux, MacOS X
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Notes :
;
; Some field in the Gauge Structure has been 
; renamed or suppressed.
; 
; A layer has been added for the Needle. The size 
; for this layer is 4 times larger than other 
; layer. This is needed to draw the needle more 
; smootly. 
;
; Finally, the GaugeGadget shape can be square
; only.
;
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Déclaration de la Structure <<<<<

StartProGUI("", 0, 0, 0, 0, 0, 0, 0)

Structure Gauge
  
  PosX.w
  PosY.w
  Size.w
  Center.w
  ScaleRadius.w
  Min.l
  Max.l
  BigStep.l
  SmallStep.l
  SectorDegrees.w
  Value.l
  Text.s
  SubText.s
  GadgetID.l
  GadgetHandle.l
  BackGroundColor.l
  ScaleColor.l
  ScaleBackGroundColor.l
  TextColor.l
  SubTextColor.l
  NeedleColor.l
  ScaleFontHandle.i
  TextFontHandle.i
  SubTextFontHandle.i
  LayerSize.w
  NeedleLength.l
  NeedlePivotRadius.l
  NeedleTipWidth.l
  NeedleCenWidth.l
  ScaleLayer.l
  NeedleLayer.l
  ComposedLayer.l
  
EndStructure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les observateurs <<<<<

Macro GetGaugePosX(GaugeA)
  
  GaugeA\PosX
  
EndMacro

Macro GetGaugePosY(GaugeA)
  
  GaugeA\PosY
  
EndMacro

Macro GetGaugeSize(GaugeA)
  
  GaugeA\Size
  
EndMacro

Macro GetGaugeCenter(GaugeA)
  
  GaugeA\Center
  
EndMacro

Macro GetGaugeScaleRadius(GaugeA)
  
  GaugeA\ScaleRadius
  
EndMacro

Macro GetGaugeMin(GaugeA)
  
  GaugeA\Min
  
EndMacro

Macro GetGaugeMax(GaugeA)
  
  GaugeA\Max
  
EndMacro

Macro GetGaugeBigStep(GaugeA)
  
  GaugeA\BigStep
  
EndMacro

Macro GetGaugeSmallStep(GaugeA)
  
  GaugeA\SmallStep
  
EndMacro

Macro GetGaugeSectorDegrees(GaugeA)
  
  GaugeA\SectorDegrees
  
EndMacro

Macro GetGaugeValue(GaugeA)
  
  GaugeA\Value
  
EndMacro

Macro GetGaugeText(GaugeA)
  
  GaugeA\Text
  
EndMacro

Macro GetGaugeSubText(GaugeA)
  
  GaugeA\SubText
  
EndMacro

Macro GetGaugeGadgetID(GaugeA)
  
  GaugeA\GadgetID
  
EndMacro

Macro GetGaugeGadgetHandle(GaugeA)
  
  GaugeA\GadgetHandle
  
EndMacro

Macro GetGaugeBackGroundColor(GaugeA)
  
  GaugeA\BackGroundColor
  
EndMacro

Macro GetGaugeScaleColor(GaugeA)
  
  GaugeA\ScaleColor
  
EndMacro

Macro GetGaugeScaleBackGroundColor(GaugeA)
  
  GaugeA\ScaleBackGroundColor
  
EndMacro

Macro GetGaugeTextColor(GaugeA)
  
  GaugeA\TextColor
  
EndMacro

Macro GetGaugeSubTextColor(GaugeA)
  
  GaugeA\SubTextColor
  
EndMacro

Macro GetGaugeNeedleColor(GaugeA)
  
  GaugeA\NeedleColor
  
EndMacro

Macro GetGaugeScaleFontHandle(GaugeA)
  
  GaugeA\ScaleFontHandle
  
EndMacro

Macro GetGaugeTextFontHandle(GaugeA)
  
  GaugeA\TextFontHandle
  
EndMacro

Macro GetGaugeSubTextFontHandle(GaugeA)
  
  GaugeA\SubTextFontHandle
  
EndMacro

Macro GetGaugeLayerSize(GaugeA)
  
  GaugeA\LayerSize
  
EndMacro

Macro GetGaugeNeedleLength(GaugeA)
  
  GaugeA\NeedleLength
  
EndMacro

Macro GetGaugeNeedlePivotRadius(GaugeA)
  
  GaugeA\NeedlePivotRadius
  
EndMacro

Macro GetGaugeNeedleTipWidth(GaugeA)
  
  GaugeA\NeedleTipWidth
  
EndMacro

Macro GetGaugeNeedleCenWidth(GaugeA)
  
  GaugeA\NeedleCenWidth
  
EndMacro

Macro GetGaugeScaleLayer(GaugeA)
  
  GaugeA\ScaleLayer
  
EndMacro

Macro GetGaugeNeedleLayer(GaugeA)
  
  GaugeA\NeedleLayer
  
EndMacro

Macro GetGaugeComposedLayer(GaugeA)
  
  GaugeA\ComposedLayer
  
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les mutateurs <<<<<

Macro SetGaugePosX(GaugeA, P_PosX)
  
  GetGaugePosX(GaugeA) = P_PosX
  
EndMacro

Macro SetGaugePosY(GaugeA, P_PosY)
  
  GetGaugePosY(GaugeA) = P_PosY
  
EndMacro

Macro SetGaugeSize(GaugeA, P_Size)
  
  GetGaugeSize(GaugeA) = P_Size
  
EndMacro

Macro SetGaugeCenter(GaugeA, P_Center)
  
  GetGaugeCenter(GaugeA) = P_Center
  
EndMacro

Macro SetGaugeScaleRadius(GaugeA, P_ScaleRadius)
  
  GetGaugeScaleRadius(GaugeA) = P_ScaleRadius
  
EndMacro

Macro SetGaugeMin(GaugeA, P_Min)
  
  GetGaugeMin(GaugeA) = P_Min
  
EndMacro

Macro SetGaugeMax(GaugeA, P_Max)
  
  GetGaugeMax(GaugeA) = P_Max
  
EndMacro

Macro SetGaugeBigStep(GaugeA, P_BigStep)
  
  GetGaugeBigStep(GaugeA) = P_BigStep
  
EndMacro

Macro SetGaugeSmallStep(GaugeA, P_SmallStep)
  
  GetGaugeSmallStep(GaugeA) = P_SmallStep
  
EndMacro

Macro SetGaugeSectorDegrees(GaugeA, P_SectorDegrees)
  
  GetGaugeSectorDegrees(GaugeA) = P_SectorDegrees
  
EndMacro

Macro SetGaugeValue(GaugeA, P_Value)
  
  GetGaugeValue(GaugeA) = P_Value
  
EndMacro

Macro SetGaugeText(GaugeA, P_Text)
  
  GetGaugeText(GaugeA) = P_Text
  
EndMacro

Macro SetGaugeSubText(GaugeA, P_SubText)
  
  GetGaugeSubText(GaugeA) = P_SubText
  
EndMacro

Macro SetGaugeGadgetID(GaugeA, P_GadgetID)
  
  GetGaugeGadgetID(GaugeA) = P_GadgetID
  
EndMacro

Macro SetGaugeGadgetHandle(GaugeA, P_GadgetHandle)
  
  GetGaugeGadgetHandle(GaugeA) = P_GadgetHandle
  
EndMacro

Macro SetGaugeBackGroundColor(GaugeA, P_BackGroundColor)
  
  GetGaugeBackGroundColor(GaugeA) = P_BackGroundColor
  
EndMacro

Macro SetGaugeScaleColor(GaugeA, P_ScaleColor)
  
  GetGaugeScaleColor(GaugeA) = P_ScaleColor
  
EndMacro

Macro SetGaugeScaleBackGroundColor(GaugeA, P_ScaleBackGroundColor)
  
  GetGaugeScaleBackGroundColor(GaugeA) = P_ScaleBackGroundColor
  
EndMacro

Macro SetGaugeTextColor(GaugeA, P_TextColor)
  
  GetGaugeTextColor(GaugeA) = P_TextColor
  
EndMacro

Macro SetGaugeSubTextColor(GaugeA, P_SubTextColor)
  
  GetGaugeSubTextColor(GaugeA) = P_SubTextColor
  
EndMacro

Macro SetGaugeNeedleColor(GaugeA, P_NeedleColor)
  
  GetGaugeNeedleColor(GaugeA) = P_NeedleColor
  
EndMacro

Macro SetGaugeScaleFontHandle(GaugeA, P_ScaleFontHandle)
  
  GetGaugeScaleFontHandle(GaugeA) = P_ScaleFontHandle
  
EndMacro

Macro SetGaugeTextFontHandle(GaugeA, P_TextFontHandle)
  
  GetGaugeTextFontHandle(GaugeA) = P_TextFontHandle
  
EndMacro

Macro SetGaugeSubTextFontHandle(GaugeA, P_SubTextFontHandle)
  
  GetGaugeSubTextFontHandle(GaugeA) = P_SubTextFontHandle
  
EndMacro

Macro SetGaugeLayerSize(GaugeA, P_LayerSize)
  
  GetGaugeLayerSize(GaugeA) = P_LayerSize
  
EndMacro

Macro SetGaugeNeedleLength(GaugeA, P_NeedleLength)
  
  GetGaugeNeedleLength(GaugeA) = P_NeedleLength
  
EndMacro

Macro SetGaugeNeedlePivotRadius(GaugeA, P_NeedlePivotRadius)
  
  GetGaugeNeedlePivotRadius(GaugeA) = P_NeedlePivotRadius
  
EndMacro

Macro SetGaugeNeedleTipWidth(GaugeA, P_NeedleTipWidth)
  
  GetGaugeNeedleTipWidth(GaugeA) = P_NeedleTipWidth
  
EndMacro

Macro SetGaugeNeedleCenWidth(GaugeA, P_NeedleCenWidth)
  
  GetGaugeNeedleCenWidth(GaugeA) = P_NeedleCenWidth
  
EndMacro

Macro SetGaugeScaleLayer(GaugeA, P_ScaleLayer)
  
  GetGaugeScaleLayer(GaugeA) = P_ScaleLayer
  
EndMacro

Macro SetGaugeNeedleLayer(GaugeA, P_NeedleLayer)
  
  GetGaugeNeedleLayer(GaugeA) = P_NeedleLayer
  
EndMacro

Macro SetGaugeComposedLayer(GaugeA, P_ComposedLayer)
  
  GetGaugeComposedLayer(GaugeA) = P_ComposedLayer
  
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Code généré en : 00.010 secondes (49500.00 lignes/seconde) <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Reset <<<<<

Macro ResetGauge(GaugeA)
  
  SetGaugePosX(GaugeA, 0)
  SetGaugePosY(GaugeA, 0)
  SetGaugeSize(GaugeA, 0)
  SetGaugeScaleRadius(GaugeA, 0)
  SetGaugeMin(GaugeA, 0)
  SetGaugeMax(GaugeA, 0)
  SetGaugeBigStep(GaugeA, 0)
  SetGaugeSmallStep(GaugeA, 0)
  SetGaugeValue(GaugeA, 0)
  SetGaugeText(GaugeA, "")
  SetGaugeSubText(GaugeA, "")
  SetGaugeGadgetID(GaugeA, 0)
  SetGaugeGadgetHandle(GaugeA, 0)
  SetGaugeBackGroundColor(GaugeA, 0)
  SetGaugeScaleColor(GaugeA, 0)
  SetGaugeScaleBackGroundColor(GaugeA, 0)
  SetGaugeTextColor(GaugeA, 0)
  SetGaugeSubTextColor(GaugeA, 0)
  SetGaugeNeedleColor(GaugeA, 0)
  SetGaugeLayerSize(GaugeA, 0)
  SetGaugeNeedleLength(GaugeA, 0)
  SetGaugeNeedlePivotRadius(GaugeA, 0)
  SetGaugeNeedleTipWidth(GaugeA, 0)
  SetGaugeNeedleCenWidth(GaugeA, 0)
  
  If GetGaugeScaleFontHandle(GaugeA)
    FreeFont(GetGaugeScaleFontHandle(GaugeA))
    SetGaugeScaleFontHandle(GaugeA, 0)
  EndIf
  
  If GetGaugeTextFontHandle(GaugeA)
    FreeFont(GetGaugeTextFontHandle(GaugeA))
    SetGaugeTextFontHandle(GaugeA, 0)
  EndIf
  
  If GetGaugeSubTextFontHandle(GaugeA)
    FreeFont(GetGaugeSubTextFontHandle(GaugeA))
    SetGaugeSubTextFontHandle(GaugeA, 0)
  EndIf
  
  If GetGaugeScaleLayer(GaugeA)
    FreeImage(GetGaugeScaleLayer(GaugeA))
    SetGaugeScaleLayer(GaugeA, 0)
  EndIf 
  
  If GetGaugeNeedleLayer(GaugeA)
    FreeImage(GetGaugeNeedleLayer(GaugeA))
    SetGaugeNeedleLayer(GaugeA, 0)
  EndIf 
  
  If GetGaugeComposedLayer(GaugeA)
    FreeImage(GetGaugeComposedLayer(GaugeA))
    SetGaugeComposedLayer(GaugeA, 0)
  EndIf 
  
EndMacro

Macro ResizeGaugeGadget(GaugeA)
  
  If GetGaugeGadgetID(GaugeA) <> #PB_Any
    ResizeGadget(GetGaugeGadgetID(GaugeA), GetGaugePosX(GaugeA), GetGaugePosY(GaugeA), #PB_Ignore, #PB_Ignore)
  Else     
    ResizeGadget(GetGaugeGadgetHandle(GaugeA), GetGaugePosX(GaugeA), GetGaugePosY(GaugeA), #PB_Ignore, #PB_Ignore)
  EndIf 
  
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Dessiner un texte centré en x, y <<<<<

Macro DrawTextCentered(x, y, Text, FrontColor, BackColor)
  
  DrawText(x - TextWidth(Text) >> 1, y - TextHeight("Wg") >> 1, Text, FrontColor, BackColor)
  
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Trouver la plus grande valeur de type double <<<<<

Procedure.d MaxDouble(P_Number01.d, P_Number02.d)
  
  Biggest_Double.d = P_Number01
  
  If P_Number02 > Biggest_Double
    Biggest_Double = P_Number02
  EndIf
  
  ProcedureReturn Biggest_Double
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Trouver la plus grande valeur de type long <<<<<

Procedure.l MaxLong(P_Number01.l, P_Number02.l)
  
  Biggest_Long.l = P_Number01
  
  If P_Number02 > Biggest_Long
    Biggest_Long = P_Number02
  EndIf
  
  ProcedureReturn Biggest_Long
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les mutateurs spéciaux <<<<<

Macro SetGaugePositionSize(GaugeA, P_X, P_Y, P_Size)
  
  SetGaugePosX(GaugeA, P_X)
  SetGaugePosY(GaugeA, P_Y)
  SetGaugeSize(GaugeA, P_Size)
  
EndMacro 

Macro SetGaugeTextEx(GaugeA, Text, Color_RGBA)
  
  SetGaugeText(GaugeA, Text)
  SetGaugeTextColor(GaugeA, Color_RGBA)
  
EndMacro 

Macro SetGaugeSubTextEx(GaugeA, SubText, Color_RGBA)
  
  SetGaugeSubText(GaugeA, SubText)
  SetGaugeSubTextColor(GaugeA, Color_RGBA)
  
EndMacro 

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur PaintGaugeBackground <<<<<

Macro PaintGaugeBackground(GaugeA)
  
  DrawingMode(#PB_2DDrawing_AllChannels)
  Box(0, 0, GetGaugeLayerSize(GaugeA), GetGaugeLayerSize(GaugeA), GetGaugeBackGroundColor(GaugeA))
  
  ; DrawingMode(#PB_2DDrawing_AllChannels | #PB_2DDrawing_Outlined)
  ; Box(0, 0, GetGaugeSize(GaugeA), GetGaugeSize(GaugeA), RGBA(0, 0, 0, 32))
  
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur PaintGaugeScale <<<<<

Macro PaintGaugeScale(GaugeA)
  
  StartDegree.i = ((360 - GetGaugeSectorDegrees(GaugeA)) >> 1)
  
  wpx = GetGaugeLayerSize(GaugeA) / 33
  wpx2 = wpx / 4.0 * 3 - 1
  
  SmallStepDegrees.d = GetGaugeSmallStep(GaugeA) / GetGaugeMax(GaugeA) * GetGaugeSectorDegrees(GaugeA)
  BigStepDegrees.d = GetGaugeBigStep(GaugeA) / GetGaugeMax(GaugeA) * GetGaugeSectorDegrees(GaugeA)
  
  DrawingMode(#PB_2DDrawing_AllChannels)
  
  For I = 0 To GetGaugeSectorDegrees(GaugeA)
    x = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + I)) * GetGaugeScaleRadius(GaugeA)
    y = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + I)) * GetGaugeScaleRadius(GaugeA)
    Circle(x, y, wpx, GetGaugeScaleColor(GaugeA))
  Next
  
  DrawingMode(#PB_2DDrawing_AllChannels)
  
  For I = 0 To GetGaugeSectorDegrees(GaugeA)
    x = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + I)) * GetGaugeScaleRadius(GaugeA)
    y = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + I)) * GetGaugeScaleRadius(GaugeA)
    Circle(x, y, wpx2, GetGaugeScaleBackGroundColor(GaugeA))
  Next
  
  dI.d = 0
  
  While dI <= GetGaugeSectorDegrees(GaugeA)
    x1 = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - wpx2)
    y1 = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - wpx2)
    x2 = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - (wpx2 / 2))
    y2 = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - (wpx2 / 2))
    LineXY(x1, y1, x2, y2, GetGaugeScaleColor(GaugeA))
    dI + SmallStepDegrees
  Wend
  
  dI = 0
  
  While dI <= GetGaugeSectorDegrees(GaugeA) + 1 ;?!
    x1 = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - wpx)
    y1 = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) - wpx)
    x2 = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) + wpx)
    y2 = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) + wpx)
    LineXY(x1, y1, x2, y2, GetGaugeScaleColor(GaugeA))
    dI + BigStepDegrees
  Wend
  
  DrawingMode(#PB_2DDrawing_AlphaBlend | #PB_2DDrawing_Transparent)
  DrawingFont(FontID(GetGaugeScaleFontHandle(GaugeA)))
  
  dI = 0
  I = 0
  
  While dI <= GetGaugeSectorDegrees(GaugeA) + 1 ; not sure why that is needed
    
    Offset.w = MaxLong(3, Len(Str(GetGaugeMax(GaugeA) - I)))
    
    x = GetGaugeCenter(GaugeA) + Sin(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) + wpx * Offset)
    y = GetGaugeCenter(GaugeA) + Cos(Radian(StartDegree + dI)) * (GetGaugeScaleRadius(GaugeA) + wpx * Offset)
    DrawTextCentered(x, y, Str(GetGaugeMax(GaugeA) - I), GetGaugeTextColor(GaugeA), RGBA(0, 0, 0, 0))
    dI + BigStepDegrees
    I + GetGaugeBigStep(GaugeA)
    
  Wend
  
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur PaintGaugeDescription <<<<<

Macro PaintGaugeDescription(GaugeA)
  
  DrawingMode(#PB_2DDrawing_AlphaBlend | #PB_2DDrawing_Transparent)
  DrawingFont(FontID(GetGaugeTextFontHandle(GaugeA)))
  
  x = GetGaugeCenter(GaugeA)
  y = 32 * GetGaugeSize(GaugeA) / 10
  
  DrawTextCentered(x, y, GetGaugeText(GaugeA), GetGaugeTextColor(GaugeA), RGBA(0, 0, 0, 0))
  y + TextHeight("Wg")
  
  DrawingFont(FontID(GetGaugeSubTextFontHandle(GaugeA)))
  DrawTextCentered(x, y, GetGaugeSubText(GaugeA), GetGaugeSubTextColor(GaugeA), RGBA(0, 0, 0, 0))
  
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur PaintGaugeHand <<<<<

Macro PaintGaugeNeedle(GaugeA)
  
  DrawingMode(#PB_2DDrawing_AllChannels)
  
  HalfSize = GetGaugeLayerSize(GaugeA) >> 1
  
  StartDegree.i = ((360 - GetGaugeSectorDegrees(GaugeA)) >> 1)
  DirDegrees.d = StartDegree + (GetGaugeMax(GaugeA) - GetGaugeValue(GaugeA)) / GetGaugeMax(GaugeA) * GetGaugeSectorDegrees(GaugeA)
  
  SinAngle.d = Sin(Radian(-DirDegrees))
  CosAngle.d = Cos(Radian(-DirDegrees))
  
  x1 = HalfSize + (GetGaugeNeedleCenWidth(GaugeA) * CosAngle); - 0 * SinAngle)
  y1 = HalfSize + (GetGaugeNeedleCenWidth(GaugeA) * SinAngle); + 0 * CosAngle)
  
  x2 = HalfSize + (-GetGaugeNeedleCenWidth(GaugeA) * CosAngle); - 0 * SinAngle)
  y2 = HalfSize + (-GetGaugeNeedleCenWidth(GaugeA) * SinAngle); + 0 * CosAngle)
  
  x3 = HalfSize + (-GetGaugeNeedleTipWidth(GaugeA) * CosAngle - GetGaugeNeedleLength(GaugeA) * SinAngle)
  y3 = HalfSize + (-GetGaugeNeedleTipWidth(GaugeA) * SinAngle + GetGaugeNeedleLength(GaugeA) * CosAngle)
  
  x4 = HalfSize + (GetGaugeNeedleTipWidth(GaugeA) * CosAngle - GetGaugeNeedleLength(GaugeA) * SinAngle)
  y4 = HalfSize + (GetGaugeNeedleTipWidth(GaugeA) * SinAngle + GetGaugeNeedleLength(GaugeA) * CosAngle)
  
  x5 = HalfSize + (-15 * SinAngle); + 0 * CosAngle)
  y5 = HalfSize + (15 * CosAngle); + 0 * SinAngle)
  
  LineXY(x1, y1, x2, y2, GetGaugeNeedleColor(GaugeA))
  LineXY(x2, y2, x3, y3, GetGaugeNeedleColor(GaugeA))
  LineXY(x3, y3, x4, y4, GetGaugeNeedleColor(GaugeA))
  LineXY(x4, y4, x1, y1, GetGaugeNeedleColor(GaugeA))
  
  FillArea(x5, y5, GetGaugeNeedleColor(GaugeA), GetGaugeNeedleColor(GaugeA))
  
  Circle(HalfSize, HalfSize, GetGaugeNeedlePivotRadius(GaugeA), GetGaugeNeedleColor(GaugeA))
  
EndMacro

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur LoadGaugeFont <<<<<

Procedure LoadGaugeFont(*GaugeA.Gauge, FontName.s)
  
  If GetGaugeScaleFontHandle(*GaugeA)
    FreeFont(GetGaugeScaleFontHandle(*GaugeA))
  EndIf
  
  If GetGaugeTextFontHandle(*GaugeA)
    FreeFont(GetGaugeTextFontHandle(*GaugeA))
  EndIf
  
  If GetGaugeSubTextFontHandle(*GaugeA)
    FreeFont(GetGaugeSubTextFontHandle(*GaugeA))
  EndIf
  
  SetGaugeScaleFontHandle(*GaugeA, LoadFont(#PB_Any, FontName, 4 * MaxDouble(8, 0.04 * GetGaugeSize(*GaugeA))))
  SetGaugeTextFontHandle(*GaugeA, LoadFont(#PB_Any, FontName, 4 * MaxDouble(9, 0.056 * GetGaugeSize(*GaugeA)), #PB_Font_Bold))
  SetGaugeSubTextFontHandle(*GaugeA, LoadFont(#PB_Any, FontName, 4 * MaxDouble(8, 0.04 * GetGaugeSize(*GaugeA))))
  
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur RepaintGaugeLayer <<<<<

Procedure RepaintGaugeLayer(*GaugeA.Gauge, Needle.b, Scale.b)
  
  If Needle = #True
    
    If GetGaugeNeedleLayer(*GaugeA)
      FreeImage(GetGaugeNeedleLayer(*GaugeA))
    EndIf 
    
    SetGaugeNeedleLayer(*GaugeA, CreateImage(#PB_Any, GetGaugeLayerSize(*GaugeA), GetGaugeLayerSize(*GaugeA), 32 | #PB_Image_Transparent))
    
    If StartDrawing(ImageOutput(GetGaugeNeedleLayer(*GaugeA)))
      PaintGaugeNeedle(*GaugeA)
      StopDrawing()
    EndIf 
    
    ResizeImage(GetGaugeNeedleLayer(*GaugeA), GetGaugeSize(*GaugeA), GetGaugeSize(*GaugeA))
    
  EndIf
  
  If Scale = #True 
    
    If GetGaugeScaleLayer(*GaugeA)
      FreeImage(GetGaugeScaleLayer(*GaugeA))
    EndIf 
    
    SetGaugeScaleLayer(*GaugeA, CreateImage(#PB_Any, GetGaugeLayerSize(*GaugeA), GetGaugeLayerSize(*GaugeA), 32 | #PB_Image_Transparent))
    
    If StartDrawing(ImageOutput(GetGaugeScaleLayer(*GaugeA)))
      PaintGaugeBackground(*GaugeA)
      PaintGaugeScale(*GaugeA)
      PaintGaugeDescription(*GaugeA)
      StopDrawing()
    EndIf 
    
    ResizeImage(GetGaugeScaleLayer(*GaugeA), GetGaugeSize(*GaugeA), GetGaugeSize(*GaugeA))
    
  EndIf
  
EndProcedure 

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur RefreshGaugeGadget <<<<<

Procedure RefreshGaugeGadget(*GaugeA.Gauge)
  
  If GetGaugeComposedLayer(*GaugeA)
    FreeImage(GetGaugeComposedLayer(*GaugeA))
  EndIf
  
  SetGaugeComposedLayer(*GaugeA, CreateImage(#PB_Any, GetGaugeSize(*GaugeA), GetGaugeSize(*GaugeA), 32 | #PB_Image_Transparent))
  
  If StartDrawing(ImageOutput(GetGaugeComposedLayer(*GaugeA)))
    
    DrawingMode(#PB_2DDrawing_AlphaBlend)
    DrawImage(ImageID(GetGaugeScaleLayer(*GaugeA)), 0, 0)
    DrawImage(ImageID(GetGaugeNeedleLayer(*GaugeA)), 0, 0)
    StopDrawing()
    
  EndIf 
  
  If GetGaugeGadgetID(*GaugeA) <> #PB_Any
    SetGadgetState(GetGaugeGadgetID(*GaugeA), ImageID(GetGaugeComposedLayer(*GaugeA)))
  Else     
    SetGadgetState(GetGaugeGadgetHandle(*GaugeA), ImageID(GetGaugeComposedLayer(*GaugeA)))
  EndIf 
  
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur GaugeGadget <<<<<

Procedure GaugeGadget(*GaugeA.Gauge, GaugeID.l, x.w, y.w, Size.w, FontName.s = "", Options.l = 0)
  
  SetGaugeGadgetID(*GaugeA, GaugeID)
  SetGaugeGadgetHandle(*GaugeA, ImageGadget(GetGaugeGadgetID(*GaugeA), x, y, Size, Size, 0, Options))
  
  If GetGaugeGadgetID(*GaugeA) <> #PB_Any
    SetGadgetData(GetGaugeGadgetID(*GaugeA), *GaugeA)
  Else
    
  EndIf 
  
  SetGaugePositionSize(*GaugeA, x, y, Size)
  
  SetGaugeCenter(*GaugeA, (4*Size) >> 1)
  SetGaugeScaleRadius(*GaugeA, 4 * Size * 3 / 10)
  
  SetGaugeLayerSize(*GaugeA, Size * 4)
  
  SetGaugeNeedleLength(*GaugeA, (1 + GetGaugeScaleRadius(*GaugeA)))
  SetGaugeNeedlePivotRadius(*GaugeA, GetGaugeNeedleLength(*GaugeA) / 10)
  SetGaugeNeedleTipWidth(*GaugeA, GetGaugeNeedlePivotRadius(*GaugeA) / 7)
  SetGaugeNeedleCenWidth(*GaugeA, GetGaugeNeedlePivotRadius(*GaugeA) / 2)
  
  If FontName <> ""
    LoadGaugeFont(*GaugeA, FontName)
  EndIf 
  
  SetGaugeSectorDegrees(*GaugeA, 270)
  
  SetGaugeBackGroundColor(*GaugeA, RGBA(0, 0, 0, 0))
  SetGaugeScaleColor(*GaugeA, RGBA(62, 62, 128, 192))
  SetGaugeScaleBackGroundColor(*GaugeA, RGBA(64, 64, 64, 32))
  SetGaugeTextColor(*GaugeA, RGBA(0, 0, 0, 255))
  SetGaugeSubTextColor(*GaugeA, RGBA(92, 92, 92, 255))
  SetGaugeNeedleColor(*GaugeA, RGBA(255, 000, 000, 255))
  SetGaugeMin(*GaugeA, 0)
  SetGaugeMax(*GaugeA, 100)
  SetGaugeBigStep(*GaugeA, 10)
  SetGaugeSmallStep(*GaugeA, 5)
  SetGaugeValue(*GaugeA, 0)
  SetGaugeText(*GaugeA, "Value")
  SetGaugeSubText(*GaugeA, "in units")
  
  RepaintGaugeLayer(*GaugeA, #True, #True)
  RefreshGaugeGadget(*GaugeA)
  
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur ChangeGaugeGadgetValue <<<<<

Procedure ChangeGaugeGadgetValue(*GaugeA.Gauge, P_Value.l)
  
  SetGaugeValue(*GaugeA, P_Value)
  RepaintGaugeLayer(*GaugeA, #True, #False)
  RefreshGaugeGadget(*GaugeA)
  
EndProcedure

Procedure ChangeGaugeGadgetSectorDegrees(*GaugeA.Gauge, P_SectorDegrees.l)
  
  SetGaugeSectorDegrees(*GaugeA, P_SectorDegrees)
  RepaintGaugeLayer(*GaugeA, #True, #True)
  RefreshGaugeGadget(*GaugeA)
  
EndProcedure

Procedure ChangeGaugeGadgetMinMaxSteps(*GaugeA.Gauge, P_Min.l, P_Max.l, P_BigStep.l, P_SmallStep.l)
  
  SetGaugeMin(*GaugeA, P_Min)
  SetGaugeMax(*GaugeA, P_Max)
  SetGaugeBigStep(*GaugeA, P_BigStep)
  SetGaugeSmallStep(*GaugeA, P_SmallStep)
  RepaintGaugeLayer(*GaugeA, #False, #True)
  RefreshGaugeGadget(*GaugeA)
  
EndProcedure

Procedure ChangeGaugeGadgetDescription(*GaugeA.Gauge, P_Text.s, P_SubText.s)
  
  SetGaugeText(*GaugeA, P_Text)
  SetGaugeSubText(*GaugeA, P_SubText)
  RepaintGaugeLayer(*GaugeA, #False, #True)
  RefreshGaugeGadget(*GaugeA)
  
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
; <<<<< !!! WARNING - YOU ARE NOW IN A TESTING ZONE - WARNING !!! <<<<< 
; <<<<< !!! WARNING - THIS CODE SHOULD BE COMMENTED - WARNING !!! <<<<< 
; <<<<< !!! WARNING - BEFORE THE FINAL COMPILATION. - WARNING !!! <<<<< 
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 

#Size = 200

#W = 2 * #Size + 145
#H = 2 * #Size + 25

CompilerSelect #PB_Compiler_OS
    
  CompilerCase #PB_OS_Linux
    FontName.s = "Liberation Sans"
    
  CompilerCase #PB_OS_Windows
    FontName.s = "Tahoma"
    
CompilerEndSelect

If OpenWindow(0, 0, 0, #W, #H, "Gauge Gadget Demo", #PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
  
  toolbar = CreateToolBarEx(0, WindowID(0), 32, 32, #UISTYLE_OFFICE2007)
      ToolBarImageButtonEx(1, "Test 1", 0, 0, 0, #BTNS_BUTTON)
      ToolBarImageButtonEx(2, "Test 2", 0, 0, 0, #BTNS_BUTTON)
      ToolBarImageButtonEx(3, "Tes 3", 0, 0, 0, #BTNS_BUTTON)
      
      CreateRebar(4, WindowID(0), 0, #RBS_VARHEIGHT | #RBS_BANDBORDERS, 0)
      AddRebarGadget(toolbar, "", 620, 0, 0, 0, #RBBS_BREAK|#RBBS_USECHEVRON|#RBBS_NOGRIPPER|#RBBS_CHILDEDGE)

  
  
  TrackBarGadget(7, 5 , 15 + #Size, 20, #Size, 0, 100, #PB_TrackBar_Vertical)
  TrackBarGadget(8, 30, 15 + #Size, 20, #Size, 1, 360, #PB_TrackBar_Vertical)
  SetGadgetState(7, 0)
  SetGadgetState(8, 270)
  
  GaugeGadget(Humidity.Gauge, 9, 55, 15 + #Size, #Size, FontName, 1)
  ChangeGaugeGadgetMinMaxSteps(Humidity, 0, 100, 10, 5)
  ChangeGaugeGadgetDescription(Humidity, "Humidity", "in %")
  

  

  TrackBarGadget(10, 85 + #Size, 15 + #Size, 20, #Size, 0, 50, #PB_TrackBar_Vertical)
  TrackBarGadget(11, 110 + #Size, 15 + #Size, 20, #Size, 1, 360, #PB_TrackBar_Vertical)
  SetGadgetState(10, 0)
  SetGadgetState(11, 250)
  
  GaugeGadget(Density.Gauge, 12, 135 + #Size, 15 + #Size, #Size, FontName, 1)
  ChangeGaugeGadgetMinMaxSteps(Density, 0, 50, 5, 1)
  ChangeGaugeGadgetDescription(Density, "Density", "kg/m³")
  

    
  Repeat
    
    Select WaitWindowEvent()
        
      Case #PB_Event_Gadget 
        
        Select EventGadget()
            
          Case 0 ; Change value
            ChangeGaugeGadgetValue(Pressure, GetGadgetState(0))
            
          Case 1 ; Change size in degrees
            ChangeGaugeGadgetSectorDegrees(Pressure, GetGadgetState(1))
            
          Case 4 ; Change value
            ChangeGaugeGadgetValue(Temperature, GetGadgetState(4))
            
          Case 5 ; Change size in degrees
            ChangeGaugeGadgetSectorDegrees(Temperature, GetGadgetState(5))
            
          Case 7 ; Change value
            ChangeGaugeGadgetValue(Humidity, GetGadgetState(7))
            
          Case 8 ; Change size in degrees
            ChangeGaugeGadgetSectorDegrees(Humidity, GetGadgetState(8))
            
          Case 10 ; Change value
            ChangeGaugeGadgetValue(Density, GetGadgetState(10))
            
          Case 11 ; Change size in degrees
            ChangeGaugeGadgetSectorDegrees(Density, GetGadgetState(11)) 
            
        EndSelect
        
      Case #PB_Event_CloseWindow
        Break
        
    EndSelect
    
  ForEver
  

  ResetGauge(Humidity)
  ResetGauge(Density)
  
EndIf 

; <<<<<<<<<<<<<<<<<<<<<<<
; <<<<< END OF FILE <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<
Avatar de l’utilisateur
MetalOS
Messages : 1510
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Re: Lib Progui

Message par MetalOS »

Personne n'a d'idées ?
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: Lib Progui

Message par graph100 »

je n'utilise pas progui. donc c'est juste un wild guess.

J'ai eu un soucis du genre quand j'ai essayé de faire mes propres gadgets, et il me semble que tu peux envoyé à l'os un signal pour rafraichir toute la fenêtre.
Si t'es sur window, c'est avec SendMessage_() qu'il faut le faire. C'est c'est un autre os, je ne sais pas :? 4

J'espère que ça te sera utile..
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Avatar de l’utilisateur
MetalOS
Messages : 1510
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Re: Lib Progui

Message par MetalOS »

Le développeur de ProGui ma donné la réponse. Il suffit de rajouter ces commandes après le CreateRebar

Code : Tout sélectionner

SetWindowLongPtr_(WindowID(0), #GWL_STYLE, GetWindowLongPtr_(WindowID(0), #GWL_STYLE)&~#WS_CLIPCHILDREN)
RedrawWindow_(RebarID(4), 0, 0, #RDW_INVALIDATE|#RDW_UPDATENOW)
Répondre