Petit programme d'indentation en ligne

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Petit programme d'indentation en ligne

Message par brossden »

Bonjour à tous

J'ai réalisé ce petit programme d'intentation, il a la particularité de pouvoir être ajouté aux outils de l'éditeur PureBasic Standard quelque soit la version et de s'executer pendant que l'éditeur est ouvert.
Il loin d'être parfait, mais il ne tient qu'à vous de l'amélioer à votre convenance.

Code : Tout sélectionner



;*********************************************************************************************
;* Il est Possible de passer en Paramètre le nombre de Blanc correspondant à l'indentation ! *
;*            La valeur par défaut (Tab) est de "2" mais ne demande qu'à être modifiée       *
;*********************************************************************************************

Global Res.l, Deb.l, Fin.l , Hwnd, Handle.l, LineIndent.s, ProgText.s,Txt.s, Prog.s, RC.s, Blanc.l, Cde.s, Pos.l, Fin.l, DejaCom.b
If Txt=""
  Tab=2
Else
  Tab= Val(Txt)
EndIf
RC = Chr(13)+Chr(10)
Blanc=0
Dejacom = 0
DejaElse = 0

;*******************************************************
; Recherche de la Fenêtre contenat le texte à Indenter *
;*******************************************************

Hwnd = FindWindow_( 0, 0 )
While Hwnd <> 0
  Txt = Space(256)
  GetWindowText_(Hwnd, Txt, 256)
  If FindString(UCase(Txt),"PUREBASIC - ",1) = 1 And FindString(UCase(Txt),"DEBUG",1) =0
    Handle=Hwnd
  EndIf
  Hwnd = GetWindow_(Hwnd, #GW_HWNDNEXT)
Wend

;*****************************************************
;* Activationn de la Fenêtre de Programme à Indenter *
;* Copie du Texte du Programme dans le pResse papier *
;*   Puis du contenu du pResse papier dans ProgText  *
;*****************************************************

SetFocus_(Handle)
Res = Keybd_Event_(17,0,0,0)+ Keybd_Event_(65,0,0,0)+ Keybd_Event_(67,0,0,0)+Keybd_Event_(17,0,2,0)
Delay(20)
ProgText=GetClipboardText()+RC+RC

;**************************
;* Sauvegarde de sécurité *
;**************************

If CreateFile(#1,"c:\sauvegarde.bak")
  WriteString(Progtext)
  CloseFile(#1)
EndIf

;*****************************************
;* Mise en Forme du texte et Indentation *
;*****************************************

Prog=""
Deb = 1
Fin = FindString(ProgText,RC,Deb)
While fin + 2 < Len(ProgText)
  LineIndent = Trim(Mid(ProgText,deb,fin-deb))
  If LineIndent > ""
    Pos.l = FindString(LineIndent," ",1)
    If Pos = 0
      Cde = LineIndent
    Else
      Cde=Left(LineIndent,Pos-1)
    EndIf
    Cde=UCase(Cde)
    If FindString("*ENDIF*ENDPROCEDURE*ENDSELECT*ELSE*CASE*WEND*NEXT*UNTIL*DEFAULT*ELSEIF*","*"+Cde+"*",1)>0 : Blanc - Tab :EndIf
    If Blanc < 0 :  blanc=0:  EndIf
    If Left(Cde,1)=";"
      If DejaCom = 0 : DejaCom =1 : Prog +  RC :  EndIf
      Prog + LineIndent +RC
    Else
      If dejaCom=1 : Prog +  RC :  EndIf
      DejaCom=0
      Prog + Space(Blanc) + LineIndent +RC
    EndIf
    If FindString("*IF*FOREACH*REPEAT*WHILE*FOR*SELECT*ELSE*CASE*DEFAULT*ELSEIF*","*"+Cde+"*",1)>0
      If FindString(UCase(LineIndent),"UNTIL",1)=0 And FindString(UCase(LineIndent),"ENDIF",1)=0
      Blanc + Tab
    EndIf
  EndIf
EndIf
deb = fin+2
fin = FindString(ProgText,RC,deb)
Wend

;*********************************************************
;* Remplacement du programme Actuel par le texte indenté *
;*********************************************************

SetClipboardText(prog)
SetFocus_(Handle)
Res = Keybd_Event_(17,0,0,0)+ Keybd_Event_(65,0,0,0)+Keybd_Event_(86,0,0,0)+Keybd_Event_(36,0,0,0)
Delay(20)
Res = Keybd_Event_(17,0,2,0)

;**********  Fin du Programme ***************


Bonne continuation

Denis
Dernière modification par brossden le jeu. 19/févr./2004 9:38, modifié 7 fois.
Oliv
Messages : 2117
Inscription : mer. 21/janv./2004 18:39

Message par Oliv »

Excuse-moi, mais ça fait quoi ? Merci :oops:
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

Re Bonjour

L'indentation d'un programme c'est l'alignement en fonction des boucles et autres, exemple
J'ai profité de mon retour ici pour modifier le programme un peu plus haut, avec certaine machine rapide, il y avait un problème, il est résolu !
Code non indenté

Code : Tout sélectionner

While Hwnd <> 0
If GetwindowLong_(Hwnd, #GWL_STYLE) & #WS_VISIBLE = #WS_VISIBLE
If GetwindowLong_(Hwnd, #GWL_EXSTYLE) & #WS_EX_TOOLWINDOW <> #WS_EX_TOOLWINDOW
Txt.s = Space(256)
GetWindowText_(Hwnd, Txt, 256)
If FindString(UCase(Txt),"PUREBASIC -",1) >0
If Len(Trim(Txt))>Lenm
Lenm=Len(Txt)
Handle=Hwnd
Prog=Txt
EndIf
EndIf
EndIf
EndIf
Hwnd = GetWindow_(Hwnd, #GW_HWNDNEXT)
Wend
Code Indenté

Code : Tout sélectionner

While Hwnd <> 0
 If GetwindowLong_(Hwnd, #GWL_STYLE) & #WS_VISIBLE = #WS_VISIBLE
  If GetwindowLong_(Hwnd, #GWL_EXSTYLE) & #WS_EX_TOOLWINDOW <> #WS_EX_TOOLWINDOW
   Txt.s = Space(256)
   GetWindowText_(Hwnd, Txt, 256)
   If FindString(UCase(Txt),"PUREBASIC -",1) >0
    If Len(Trim(Txt))>Lenm
     Lenm=Len(Txt)
     Handle=Hwnd
     Prog=Txt
    EndIf
   EndIf
  EndIf
 EndIf
 Hwnd = GetWindow_(Hwnd, #GW_HWNDNEXT)
Wend
Salut

Denis
Dernière modification par brossden le jeu. 19/févr./2004 10:15, modifié 1 fois.
Lukky
Messages : 340
Inscription : dim. 25/janv./2004 12:22
Localisation : Morbihan

Message par Lukky »

Quel genre de problème ? J'ai eu quelques soucis je suis en train de voir la provenance. JL
Quand on me gonfle trop j'éclate, sinon ça va !
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

J'ai cru un instant que c'était à cause de la vitesse de la machine, mais je me suis aperçu que ce programme ne fonctionne qui si on l'a sauvegardé avant, je ne comprend pas trop pourquoi, mais c'est le cas !

J'ai modifié à noveau le source vous pouvez le Copier / Coller !

Denis
Lukky
Messages : 340
Inscription : dim. 25/janv./2004 12:22
Localisation : Morbihan

Message par Lukky »

Oui mais quel était le problème ? Pasque moi quand je le lance je te dis pas l'état de ma souris, elle devient dingue, le reboot est obligatoire. Amusant. Par contre j'ai pas testé la toute dernière version.
Quand on me gonfle trop j'éclate, sinon ça va !
Patrick88
Messages : 1564
Inscription : mer. 21/janv./2004 18:24

Message par Patrick88 »

hum,
j'ai des Hallucinations ou Régis a pas déja fait un utilitaire de ce genre là ?
bon, c'était p't'être dans l'autre forum.... ( celui de Chris ou de Cederavic )

Patrick
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

J'ai corrigé une nième fois le programme, il y avait un bug !!!

Désolé

Pour ce qui est du programme de Régis, il n'est pas actif directemnt sous l'éditeur comme celui là !
Sauf erreur de ma part bien sur !

Salut

Denis
Oliv
Messages : 2117
Inscription : mer. 21/janv./2004 18:39

Message par Oliv »

Oui celui de Régis n'était pas en direct, il est battu là :D
Lukky
Messages : 340
Inscription : dim. 25/janv./2004 12:22
Localisation : Morbihan

Message par Lukky »

Bon pour moi maintenant ça marche impec.

JL
Quand on me gonfle trop j'éclate, sinon ça va !
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

J'ai complété le programme, je pense avoir traité tous les cas

Salut


Denis
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

Bonjour à tous

Dans un soucis de performance maximale, j'ai modifié le programme et supprimé le code inutil dans le message Initial. Je pense qu'il est maintenant deverminé et qu'il répondra à votre attente (si vous en aviez une :D )

Si vous avez des suggestions, merci de m'en faire part ici !

Bonne journée à tous.

Denis
Lukky
Messages : 340
Inscription : dim. 25/janv./2004 12:22
Localisation : Morbihan

Message par Lukky »

Bon bein moi je te félicite sans compter pour ceux que ça interesse que si on met comme chaine de recherche de fenêtre le mot JaPBe et qu'on met l'exe dans les plugins et bein ça marche impec avec cet éditeur.

JL
Quand on me gonfle trop j'éclate, sinon ça va !
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

Lukky a écrit :Bon bein moi je te félicite sans compter pour ceux que ça interesse que si on met comme chaine de recherche de fenêtre le mot JaPBe et qu'on met l'exe dans les plugins et bein ça marche impec avec cet éditeur.
Bonjour, je dérange ?
JL
Merci pour les fleurs ! lol :onfire:

Mais pourrais tu mieux expliquer :
si on met comme chaine de recherche de fenêtre le mot JaPBe et qu'on met l'exe dans les plugins et bein ça marche impec avec cet éditeur.

Denis
Lukky
Messages : 340
Inscription : dim. 25/janv./2004 12:22
Localisation : Morbihan

Message par Lukky »

Bein comme ça :

Code : Tout sélectionner

While Hwnd <> 0 
    Txt = Space(256) 
    GetWindowText_(Hwnd, Txt, 256) 
    If FindString(UCase(Txt),"JaPBe",1) = 1 And FindString(UCase(Txt),"DEBUG",1) =0 
        Handle=Hwnd 
    EndIf 
    Hwnd = GetWindow_(Hwnd, #GW_HWNDNEXT) 
Wend 
JL
Quand on me gonfle trop j'éclate, sinon ça va !
Répondre