un problème d'affichage avec startdrawing

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
dayvid
Messages : 1242
Inscription : mer. 11/nov./2009 18:17
Localisation : Poitiers (Vienne)

un problème d'affichage avec startdrawing

Message par dayvid »

pourquoi le texte n'est pas dessiner sur la fenêtre a la ligne 162
par contre si ont enleve le string gadget juste apres, la sa marche


Code : Tout sélectionner

Enumeration
  #Window_0
  #Editor_0
  #Font_Editor_0
  #entrer_clavier
EndEnumeration

Global Couleur_Fenetre = RGB(240, 240, 240)

Global couleur_avent_marge_bord_editeur = RGB(255, 0, 0)
Global couleur_remplisage_marge_avent_bord_editeur = RGB(255, 255, 255)
Global Couleur_Bord_Editeur = RGB(255, 255, 255)

Global Couleur_Fond_Editeur = RGB(255, 255, 255)
Global couleur_police_editeur = RGB(0, 0, 255)
Global Taille_police_editeur = 9
Global Police_Editeur$ = "cambria"
Global Font_Editor_0

Global Entrer_clavier
Global couleur_du_texte_taper = RGB(0, 0, 255)
Global couleur_fond_texte_taper = RGB(255, 255, 0)
Global couleur_du_texte_entree = RGB(0, 155, 0)

Procedure deplacer_cursseur_console(ligne, position)
  x = position
  y = ligne
  If x = - 1
    x = - 9999
  EndIf
  
  If y = - 1
    y = 9999
  EndIf
  
  ; Set cursor position 
  REG = GadgetID(#Editor_0) 
  CharIdx = SendMessage_(REG,#EM_LINEINDEX,y-1,0) 
  LLength = SendMessage_(REG,#EM_LINELENGTH,CharIdx,0) 
  If LLength >= x-1 
    CharIdx + x-1 
  EndIf 
  Range.CHARRANGE 
  Range\cpMin = CharIdx 
  Range\cpMax = CharIdx 
  SendMessage_(REG,#EM_EXSETSEL,0,Range) 
EndProcedure 

Procedure.l renvoiller_position_cursseur_X_console() 
  ; returns X-Pos of Cursor 
  REG = GadgetID(#Editor_0) 
  SendMessage_(REG,#EM_EXGETSEL,0,Range.CHARRANGE) 
  position_cursseur_X_console = (Range\cpMax-(SendMessage_(REG,#EM_LINEINDEX,SendMessage_(REG,#EM_EXLINEFROMCHAR,0,Range\cpMin),0))+1)
  ProcedureReturn position_cursseur_X_console
EndProcedure 

Procedure.l renvoiller_position_cursseur_Y_console() 
  ; returns Y-Pos of Cursor 
  REG = GadgetID(#Editor_0) 
  SendMessage_(REG,#EM_EXGETSEL,0,Range.CHARRANGE) 
  position_cursseur_Y_console = SendMessage_(REG,#EM_EXLINEFROMCHAR,0,Range\cpMin)+1 
  ProcedureReturn position_cursseur_Y_console
EndProcedure 

Procedure.l renvoiller_position_relative_cursseur_console() 
  ; returns relative Position of Cursor 
  SendMessage_(GadgetID(#Editor_0),#EM_EXGETSEL,0,Range.CHARRANGE) 
  position_relative_cursseur = Range\cpMax 
  ProcedureReturn position_relative_cursseur
EndProcedure 

Procedure.s renvoiller_position_cursseur_X_Y_console() 
  ; returns X-Pos of Cursor 
  REG = GadgetID(#Editor_0) 
  SendMessage_(REG,#EM_EXGETSEL,0,Range.CHARRANGE) 
  position_cursseur_X_console = (Range\cpMax-(SendMessage_(REG,#EM_LINEINDEX,SendMessage_(REG,#EM_EXLINEFROMCHAR,0,Range\cpMin),0))+1) 
  ; returns Y-Pos of Cursor 
  REG = GadgetID(#Editor_0) 
  SendMessage_(REG,#EM_EXGETSEL,0,Range.CHARRANGE) 
  position_cursseur_Y_console = SendMessage_(REG,#EM_EXLINEFROMCHAR,0,Range\cpMin)+1 
  ProcedureReturn Str(position_cursseur_X_console) + ", " +  Str(position_cursseur_Y_console)
EndProcedure

Procedure selection_libre(ligne_de_depart.l, caractere_de_depart.l, ligne_de_fin.l, caractere_de_fin.l)
  ligne_de_depart - 1
  sel.CHARRANGE 
  sel\cpMin = SendMessage_(GadgetID(#Editor_0), #EM_LINEINDEX, ligne_de_depart, 0) + caractere_de_depart - 1 
  
  If ligne_de_fin = -1 
    ligne_de_fin = SendMessage_(GadgetID(#Editor_0), #EM_GETLINECOUNT, 0, 0) - 1 
  EndIf 
  sel\cpMax = SendMessage_(GadgetID(#Editor_0), #EM_LINEINDEX, ligne_de_fin, 0) 
  
  If caractere_de_fin = -1 
    sel\cpMax + SendMessage_(GadgetID(#Editor_0), #EM_LINELENGTH, sel\cpMax, 0) 
  Else 
    sel\cpMax + caractere_de_fin - 1 
  EndIf 
  SendMessage_(GadgetID(#Editor_0), #EM_EXSETSEL, 0, @sel) 
  
EndProcedure 
  
Procedure selectionner_caracteres(ligne, position_depart, position_fin)
  selection_libre(ligne, position_depart, ligne - 1, position_fin)
EndProcedure

Procedure couper_ligne(numero_ligne)
  SetGadgetAttribute(#Editor_0, #PB_Editor_ReadOnly, 1) 
  ligne - 1
  couper_la_ligne = numero_ligne
  selection_libre(couper_la_ligne, 1, couper_la_ligne, 0)
  SendMessage_(GadgetID(#Editor_0), #WM_COPY, -1, 0)
  SendMessage_(GadgetID(#Editor_0), #EM_SETSEL, -1, 0)
  RemoveGadgetItem(#Editor_0, couper_la_ligne - 1)
  SetGadgetAttribute(#Editor_0, #PB_Editor_ReadOnly, 0) 
EndProcedure
  
Procedure copier_ligne(numero_ligne)
  copier_la_ligne = numero_ligne
  selection_libre(copier_la_ligne, 1, copier_la_ligne, 0)
  SendMessage_(GadgetID(#Editor_0), #WM_COPY, -1, 0)
  SendMessage_(GadgetID(#Editor_0), #EM_SETSEL, -1, 0)
EndProcedure
  
Procedure coller_ligne()
  SetGadgetAttribute(#Editor_0, #PB_Editor_ReadOnly, 1) 
  ligne + 1
  SendMessage_(GadgetID(#Editor_0), #WM_PASTE, 0, 0) 
  SendMessage_(GadgetID(#Editor_0), #EM_SETSEL, -1, 0)
  SetGadgetAttribute(#Editor_0, #PB_Editor_ReadOnly, 0) 
EndProcedure
  
Procedure supprimer_ligne(numero_ligne)
  SetGadgetAttribute(#Editor_0, #PB_Editor_ReadOnly, 1) 
  RemoveGadgetItem(#Editor_0, numero_ligne)
  SetGadgetAttribute(#Editor_0, #PB_Editor_ReadOnly, 0) 
EndProcedure
  
Procedure selectionner_ligne(ligne_de_depard, ligne_de_fin)
  ligne_a_selectionner = ligne_de_depard
  selection_libre(ligne_a_selectionner, 1, ligne_de_fin - 1, -1)
EndProcedure
  
Procedure.s entree_clavier(couleur_du_texte_taper, couleur_fond_texte_taper, couleur_texte_une_fois_entrer)
  
  position_cursseur_X_console = renvoiller_position_cursseur_X_console()
  position_cursseur_Y_console = renvoiller_position_cursseur_Y_console()
  
  AddKeyboardShortcut(#Window_0, #PB_Shortcut_Return, 999) 
  
  Ligne$ = GetGadgetItemText(#Editor_0, renvoiller_position_cursseur_Y_console() - 1)
  Nombre_de_ligne = CountGadgetItems(#Editor_0)
  
  UseGadgetList(WindowID(#Window_0))
  
  StartDrawing(WindowOutput(#Window_0))
    
    DrawingFont(Font_Editor_0)
    Longueur_texte = TextWidth(Ligne$)
    Hauteur_texte = TextHeight(Ligne$)
    DrawText(50, 450, Ligne$, 0, RGB(145, 145, 145))
    
  StopDrawing()
    
  StringGadget(#entrer_clavier, Longueur_texte + 20, Hauteur_texte * Nombre_de_ligne, 100, Hauteur_texte, "", #PB_String_BorderLess)
  
    ; Gadget Fonts
    SetGadgetFont(#entrer_clavier, LoadFont(#Font_Editor_0, Police_Editeur$, Taille_police_editeur, 0))
    ; Gadget Colors
    PureCOLOR_SetGadgetColor(#entrer_clavier, couleur_du_texte_taper, couleur_fond_texte_taper)
    
    Entrer_clavier = 1
  ProcedureReturn entree_clavier$ 
EndProcedure

Procedure OpenWindow_Window_0()
  If OpenWindow(#Window_0, 450, 200, 620, 500, "Fenêtre", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar|#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered)
    If CreateGadgetList(WindowID(#Window_0))
      
      EditorGadget(#Editor_0, 20, 20, 580, 360) ; #PB_Editor_ReadOnly
      
      ; Gadget Resizing
      PureRESIZE_SetGadgetResize(#Editor_0, 1, 1, 1, 1)
      ; Gadget Fonts
      Font_Editor_0 = LoadFont(#Font_Editor_0, Police_Editeur$, Taille_police_editeur, 0)
      SetGadgetFont(#Editor_0, Font_Editor_0)
      ; Gadget Colors
      PureCOLOR_SetGadgetColor(#Editor_0, couleur_police_editeur, Couleur_Fond_Editeur)
      
      ; Window Minimum Size
      PureRESIZE_SetWindowMinimumSize(#Window_0, 300, 150)
      
      ; Window Backcolor
      PureCOLOR_SetWindowColor(#Window_0, Couleur_Fenetre)
      
      ; ; pour faire apparaitre les bord de l'editeur
      ; style = GetWindowLong_(GadgetID(#Editor_0), #GWL_EXSTYLE)
      ; newstyle = (style |#WS_EX_CLIENTEDGE)
      ; SetWindowLong_(GadgetID(#Editor_0), #GWL_EXSTYLE, newstyle)
      ; SetWindowPos_(GadgetID(#Editor_0), 0, 0, 0, 0, 0, #SWP_SHOWWINDOW | #SWP_NOSIZE | #SWP_NOMOVE | #SWP_FRAMECHANGED)
      
          ; ceci pour le refaire disparaitre
          style = GetWindowLong_(GadgetID(#Editor_0), #GWL_EXSTYLE)
          newstyle = style &(~#WS_EX_CLIENTEDGE)
          SetWindowLong_(GadgetID(#Editor_0), #GWL_EXSTYLE, newstyle)
          SetWindowPos_(GadgetID(#Editor_0), 0, 0, 0, 0, 0, #SWP_SHOWWINDOW | #SWP_NOSIZE | #SWP_NOMOVE | #SWP_FRAMECHANGED)
      
      SetActiveGadget(#Editor_0)
      
      Sauvegarde_Largeur_Editeur = Largeur_Editeur
      Sauvegarde_Hauteur_Editeur = Hauteur_Editeur
      
      Position_X_Editeur = GadgetX(#Editor_0)
      Position_Y_Editeur = GadgetY(#Editor_0)
      
      Largeur_Editeur = GadgetWidth(#Editor_0) 
      Hauteur_Editeur = GadgetHeight(#Editor_0)
      
      StartDrawing(WindowOutput(#Window_0))
        DrawingMode(#PB_2DDrawing_Outlined )
        
      ; cette commande sert pour dessiner le nouveaux bord
        Box(Position_X_Editeur - 15, Position_Y_Editeur - 15, Largeur_Editeur + 30, Hauteur_Editeur + 30, couleur_avent_marge_bord_editeur)
        Box(Position_X_Editeur - 1, Position_Y_Editeur - 1, Largeur_Editeur + 2, Hauteur_Editeur + 2, Couleur_Bord_Editeur)
        FillArea(Position_X_Editeur - 10, Position_Y_Editeur - 10, -1, couleur_remplisage_marge_avent_bord_editeur)
        StartDrawing(WindowOutput(#Window_0))
          
          DrawingFont(Font_Editor_0)
          Longueur_texte = TextWidth(Ligne$)
          Hauteur_texte = TextHeight(Ligne$)
          DrawText(50, 450, Ligne$, 0, RGB(145, 145, 145))
          
        StopDrawing()
        
    StopDrawing()
    
    AddGadgetItem(#Editor_0, -1, "1abc def ghij")
    AddGadgetItem(#Editor_0, -1, "2abc def ghij")
    AddGadgetItem(#Editor_0, -1, "3abc def ghij")
    AddGadgetItem(#Editor_0, -1, "aiuytrezsdfgvcxwqpoiuytrezsdfghhvcxszertgyhgftyhuiopoiuytrdfghygfdsfg")
    
    entree_clavier(couleur_du_texte_taper, couleur_fond_texte_taper, couleur_du_texte_entree)
    
    EndIf
  EndIf
EndProcedure

OpenWindow_Window_0()
;{- Event loop
Repeat
  
  Event = WaitWindowEvent(1)
  
  If Entrer_clavier = 1
    If GetActiveGadget() <> #entrer_clavier
      SetActiveGadget(#entrer_clavier)
    EndIf
  EndIf
  
  
  If Event = #PB_Event_Repaint
    StartDrawing(WindowOutput(#Window_0))
      DrawingMode(#PB_2DDrawing_Outlined )
      
      ; cette commande sert pour éffacer l'encien bord
      Box(Position_X_Editeur - 15, Position_Y_Editeur - 15, Sauvegarde_Largeur_Editeur + 30, Sauvegarde_Hauteur_Editeur + 30, Couleur_Fenetre)
      Box(Position_X_Editeur - 1, Position_Y_Editeur - 1, Sauvegarde_Largeur_Editeur + 2, Sauvegarde_Hauteur_Editeur + 2, Couleur_Fenetre)
      FillArea(Position_X_Editeur - 14, Position_Y_Editeur - 14, -1, Couleur_Fenetre)
      
      ; cette commande sert pour dessiner le nouveaux bord
      Box(Position_X_Editeur - 15, Position_Y_Editeur - 15, Largeur_Editeur + 30, Hauteur_Editeur + 30, couleur_avent_marge_bord_editeur)
      Box(Position_X_Editeur - 1, Position_Y_Editeur - 1, Largeur_Editeur + 2, Hauteur_Editeur + 2, Couleur_Bord_Editeur)
      FillArea(Position_X_Editeur - 10, Position_Y_Editeur - 10, -1, couleur_remplisage_marge_avent_bord_editeur)
      
    StopDrawing()
  EndIf
  
  If GetActiveGadget() <> #Editor_0 And Entrer_clavier = 0
    SetActiveGadget(#Editor_0)
  EndIf
  
  position_cursseur_X_console = renvoiller_position_cursseur_X_console()
  position_cursseur_Y_console = renvoiller_position_cursseur_Y_console()
  
  ; je vais dessiner des bord en couleur autour de l'editeur
  
  Sauvegarde_Largeur_Editeur = Largeur_Editeur
  Sauvegarde_Hauteur_Editeur = Hauteur_Editeur
  
  Position_X_Editeur = GadgetX(#Editor_0)
  Position_Y_Editeur = GadgetY(#Editor_0)
  
  Largeur_Editeur = GadgetWidth(#Editor_0) 
  Hauteur_Editeur = GadgetHeight(#Editor_0)
  
  If Sauvegarde_Largeur_Editeur <> Largeur_Editeur Or Sauvegarde_Hauteur_Editeur <> Hauteur_Editeur
    
    StartDrawing(WindowOutput(#Window_0))
      DrawingMode(#PB_2DDrawing_Outlined )
      
      ; cette commande sert pour éffacer l'encien bord
      Box(Position_X_Editeur - 15, Position_Y_Editeur - 15, Sauvegarde_Largeur_Editeur + 30, Sauvegarde_Hauteur_Editeur + 30, Couleur_Fenetre)
      Box(Position_X_Editeur - 1, Position_Y_Editeur - 1, Sauvegarde_Largeur_Editeur + 2, Sauvegarde_Hauteur_Editeur + 2, Couleur_Fenetre)
      FillArea(Position_X_Editeur - 14, Position_Y_Editeur - 14, -1, Couleur_Fenetre)
      
      ; cette commande sert pour dessiner le nouveaux bord
      Box(Position_X_Editeur - 15, Position_Y_Editeur - 15, Largeur_Editeur + 30, Hauteur_Editeur + 30, couleur_avent_marge_bord_editeur)
      Box(Position_X_Editeur - 1, Position_Y_Editeur - 1, Largeur_Editeur + 2, Hauteur_Editeur + 2, Couleur_Bord_Editeur)
      FillArea(Position_X_Editeur - 10, Position_Y_Editeur - 10, -1, couleur_remplisage_marge_avent_bord_editeur)
      
    StopDrawing()
    
  EndIf
  
  EventMenu = EventMenu()
  
  Select Event
      
    Case #PB_Event_Gadget
      
      EventGadget = EventGadget()
      EventType = EventType()
      
      If EventGadget = #Editor_0
        
      ElseIf EventGadget = #entrer_clavier
        
      EndIf
      
    Case #PB_Event_Menu
      If EventMenu = 999
        entree_clavier = 0
        RemoveKeyboardShortcut(#Window_0, #PB_Shortcut_Return) 
      EndIf
      
    Case #PB_Event_CloseWindow
      EventWindow = EventWindow()
      
      If EventWindow = #Window_0
        CloseWindow(#Window_0)
        Break
      EndIf
      
  EndSelect
  
ForEver
;
;}
d'ou sa peut bien venir ?
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php
Avatar de l’utilisateur
SPH
Messages : 4949
Inscription : mer. 09/nov./2005 9:53

Re: un problème d'affichage avec startdrawing

Message par SPH »

Ligne 219 :

Code : Tout sélectionner

      StartDrawing(WindowOutput(#Window_0))
        DrawingMode(#PB_2DDrawing_Outlined )
        
      ; cette commande sert pour dessiner le nouveaux bord
        Box(Position_X_Editeur - 15, Position_Y_Editeur - 15, Largeur_Editeur + 30, Hauteur_Editeur + 30, couleur_avent_marge_bord_editeur)
        Box(Position_X_Editeur - 1, Position_Y_Editeur - 1, Largeur_Editeur + 2, Hauteur_Editeur + 2, Couleur_Bord_Editeur)
        FillArea(Position_X_Editeur - 10, Position_Y_Editeur - 10, -1, couleur_remplisage_marge_avent_bord_editeur)
        StartDrawing(WindowOutput(#Window_0))
          
          DrawingFont(Font_Editor_0)
          Longueur_texte = TextWidth(Ligne$)
          Hauteur_texte = TextHeight(Ligne$)
          DrawText(50, 450, Ligne$, 0, RGB(145, 145, 145))
          
        StopDrawing()
Erreur car tu as 2 StartDrawing(WindowOutput(#Window_0)) de suite.

Ca, c'est mieux :

Code : Tout sélectionner

      StartDrawing(WindowOutput(#Window_0))
        DrawingMode(#PB_2DDrawing_Outlined )
        
      ; cette commande sert pour dessiner le nouveaux bord
        Box(Position_X_Editeur - 15, Position_Y_Editeur - 15, Largeur_Editeur + 30, Hauteur_Editeur + 30, couleur_avent_marge_bord_editeur)
        Box(Position_X_Editeur - 1, Position_Y_Editeur - 1, Largeur_Editeur + 2, Hauteur_Editeur + 2, Couleur_Bord_Editeur)
        FillArea(Position_X_Editeur - 10, Position_Y_Editeur - 10, -1, couleur_remplisage_marge_avent_bord_editeur)
;        StartDrawing(WindowOutput(#Window_0))
          
          DrawingFont(Font_Editor_0)
          Longueur_texte = TextWidth(Ligne$)
          Hauteur_texte = TextHeight(Ligne$)
          DrawText(50, 450, Ligne$, 0, RGB(145, 145, 145))
          
 ;       StopDrawing()
        
    StopDrawing()

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
venom
Messages : 3138
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: un problème d'affichage avec startdrawing

Message par venom »

oui ont ne met pas un startdrawing() dans un autre :wink:





@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
dayvid
Messages : 1242
Inscription : mer. 11/nov./2009 18:17
Localisation : Poitiers (Vienne)

Re: un problème d'affichage avec startdrawing

Message par dayvid »

ha ok, qu'elle neuneuf moi :lol:
merci beaucoup :)
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php
Répondre