FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» Logiciel de soutien scolaire en langues.
par Pedro Alvarez Aujourd'hui à 16:52

» KGF_dll - nouvelles versions
par Klaus Aujourd'hui à 14:16

» Compilateur FBPano
par Ouf_ca_passe Aujourd'hui à 12:25

» mise a jour calculatrice
par papydall Aujourd'hui à 2:01

» double guillemets "" dans un EDIT
par Marc Hier à 23:43

» Documentation de KGF
par Klaus Lun 20 Nov 2017 - 22:52

» Zoom sur une portion d'écran
par JL35 Lun 20 Nov 2017 - 21:51

» Recherche d'une expression dans un source
par Marc Lun 20 Nov 2017 - 13:08

» Tracer une grille n'importe où sur l'écran
par JL35 Dim 19 Nov 2017 - 22:14

» TourD Version 2
par Klaus Sam 18 Nov 2017 - 23:58

» La métamatière et le peuple
par JL35 Ven 17 Nov 2017 - 21:18

» Capture d'une zone de l'écran total
par JL35 Ven 17 Nov 2017 - 18:41

» qui peut résoudre mon prb
par pascal10000 Jeu 16 Nov 2017 - 17:30

» évènements et objets système : listage automatique
par Jean Claude Jeu 16 Nov 2017 - 11:15

» Panoramic et la reconnaissance vocale.
par papydall Jeu 16 Nov 2017 - 3:45

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2017
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
27282930   
CalendrierCalendrier

Partagez | 
 

 PanoConverter

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Yannick

avatar

Nombre de messages : 7997
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: PanoConverter   Jeu 3 Nov 2016 - 1:21

J' ai repris les derniers codes sur la création d' un *.exe
J' ai mixé avec recover source
Puis dans l' idée de pouvoir faire tout cela depuis le menu contextuel

cela donne cela :
Code:
' ------------------------------------------------------------------------------
'                            PANORAMIC CONVERTER
'                              par ygeronimi
'                                  Vs 1.0
'                      Avec l' aide de la communauté
'                  Utilise KGF.dll, développé par Klaus
' ------------------------------------------------------------------------------

VARIABLES()
CONSTANTES()
GUI()
INIT()
MENU()
QUITTER()
end
' ------------------------------------------------------------------------------
' DECLARATION DES VARIABLES
' ------------------------------------------------------------------------------

sub VARIABLES()
'  variable d' incrementation des objets
  dim no%
'  variable fichier importer
  dim file$
'  variable type déterminant le sens de conversion
  dim type%
'  variables projet
  dim nclic%
  dim nchange%
  dim decoder%(255)
  dim decoder$
  dim work_file$
  dim ps%
  dim size%
  dim Panofile%
  dim prg$
end_sub

' ------------------------------------------------------------------------------
' DECLARATION DES CONSTANTES
' ------------------------------------------------------------------------------

sub CONSTANTES()
'  dossier source
  dim path$ : path$=dir_current$
  if right$(path$,1)="\" : path$=left$(len(path$)-1) : end_if
  path$=path$+"\"
'  fichiers dll
  dim kgf$    :' kgf$="C:\KGF\KGF.dll"
  dim kernel$ : kernel$="C:\Windows\System32\kernel32.dll"
'  fichier paramètres
  dim param$
'  objets panoramic
  dim pan%  : no%=no%+1 : pan%=no%
  dim alph1% : no%=no%+1 : alph1%=no%
  dim alph2% : no%=no%+1 : alph2%=no%
  dim alph3% : no%=no%+1 : alph3%=no%
  dim alph4% : no%=no%+1 : alph4%=no%
  dim pbar%  : no%=no%+1 : pbar%=no%
  dim mem1%  : no%=no%+1 : mem1%=no%
  dim mem2%  : no%=no%+1 : mem2%=no%
  dim FRO%  : no%=no%+1 : FRO%=no%
  dim FWO%  : no%=no%+1 : FWO%=no%
  dim F_OR%  : no%=no%+1 : F_OR%=no%
  dim F_OW%  : no%=no%+1 : F_OW%=no%
  dim Odial% : no%=no%+1 : Odial%=no%
end_sub

' ------------------------------------------------------------------------------
' INITIALISATIONS
' ------------------------------------------------------------------------------

sub INIT()
  dim_local i%,sep%,k%,f$

  prg$ = param_value$(0)
  param$=file_extract_path$(prg$)+"Param.inf"
  file$= param_value$(2)
 
  if file_exists(kgf$)=0
      if file_exists(param$)=1
        file_open_read F_OR%,param$
        file_readln F_OR%,kgf$
        file_close F_OR%
      else
        if message_warning_yes_no("KGF.dll n' a pas été trouvé !"+chr$(13)+"Voulez vous indiquer son chemin d' accès ?" )=1
            open_dialog Odial%
            dir_dialog Odial%,"C:\"
            filter Odial%,"*.dll|*.dll"
            f$=file_name$(Odial%)
            delete Odial%
            if upper$(file_extract_name$(f$))="KGF.DLL"
              kgf$=f$
              file_open_write F_OW%,param$
              file_writeln F_OW%,kgf$
              file_close F_OW%
            else
              Message "Désolé, KGF.dll est indispensable."+chr$(13)+"L' application va se fermer."
              Terminate
            end_if
        else
            Message "Désolé, KGF.dll est indispensable."+chr$(13)+"L' application va se fermer."
            Terminate
        end_if
      end_if
  end_if
 
  dll_on kgf$
 
  if file_extract_extension$(file$)=".bas" : type%=1 : end_if
  if file_extract_extension$(file$)=".exe" : type%=2 : end_if
 
  for i%=0 to 255
      k%=bin_xor(i%,23)
      if i%=0 or i%=10 or i%=13 then k%=0
      decoder%(i%) = k%
  next i%
end_sub

' ------------------------------------------------------------------------------
' INTERFACE UTILISATEUR
' ------------------------------------------------------------------------------

sub GUI()
  dim_local h%,w%
 
  border_hide 0
  height 0,100
  width 0,350
  top 0,(screen_y-height(0))/2
  left 0,(screen_x-width(0))/2
 
  panel pan%
  full_space pan%
  w%=width(pan%)
  h%=height(pan%)
  color pan%,255,210,140
  font_name pan%,"Arial"
  font_size pan%,8
  font_color pan%,140,0,0
  font_bold pan%

  alpha alph1%
  parent alph1%,pan%
  top alph1%,10
  font_name alph1%,"Times"
  font_size alph1%,18
  caption alph1%,"Panoramic-Converter"
  left alph1%,(w%-width(alph1%))/2
 
  alpha alph2%
  parent alph2%,pan%
  top alph2%,45
  left alph2%,10
  caption alph2%,""
 
  progress_bar pbar%
  parent pbar%,pan%
  top pbar%,60
  left pbar%,10
  width pbar%,w%-55
  color_progress_bar(pbar%,140,0,0)
  min pbar%,0 : max pbar%,100 : position pbar%,0
 
  alpha alph3%
  parent alph3%,pan%
  top alph3%,60
  caption alph3%,"0 %"
  left alph3%,w%-width(alph3%)-10
 
  alpha alph4%
  parent alph4%,pan%
  top alph4%,80
  if type%=1
      caption alph4%,"Convert *.bas to *.exe"
  else
      caption alph4%,"Convert *.exe to *.bas"
  end_if
  left alph4%,(w%-width(alph4%))/2
 
  memo mem1% : hide mem1%
  memo mem2% : hide mem2%
end_sub

' ------------------------------------------------------------------------------
' MENU
' ------------------------------------------------------------------------------

sub MENU()
  dim_local i%,l$,f$,sep%,ctfile%,p,prct
  if type%=1
      caption alph2%,file_extract_name$(file$)
      file_load mem2%,file$

      for i%=1 to count(mem2%)
        l$=item_read$(mem2%,i%)
        if Upper$(left$(trim$(l$),8))="#INCLUDE"
            ctfile%=ctfile%+1
            prct=100/(ctfile%+1)
        end_if
      next i%
     
      if ctfile%=0
        prct=100/(count(mem2%)+1)
      end_if
     
      for i%=1 to count(mem2%)
        l$=item_read$(mem2%,i%)
        if Upper$(left$(trim$(l$),8))="#INCLUDE"
            sep%=instr(l$,chr$(34)) : f$=right$(l$,len(l$)-sep%)
            sep%=instr(f$,chr$(34)) : f$=left$(f$,sep%-1)
            f$=file_extract_path$(file$)+f$
            caption alph2%,f$
            file_add mem1%,f$
            p=p+prct
            if frac(p)=0
              GotoPbarPosition(int(p))
            end_if
        else
            caption alph2%,file_extract_name$(file$)
            item_add mem1%,l$
            if ctfile%=0
              p=p+prct
              if frac(p)=0
                  GotoPbarPosition(int(p))
              end_if
            end_if
        end_if
      next i%
     
      caption alph2%,"Edition du fichier *.exe"
      EDIT_EXE()
      if PanoFile%=0
        GotoPbarPosition(100)
      end_if
      exit_sub
  else
      EXTRACT_BAS()
      if PanoFile%=1
        exit_sub
      else
        SAVE_FILE()
        exit_sub
      end_if
  end_if
end_sub

' ------------------------------------------------------------------------------
' FONCTIONS INTERFACE
' ------------------------------------------------------------------------------

sub COLOR_PROGRESS_BAR(nb%,r%,g%,b%)
 dim_local i,j,k%,my_library$,my_dll$,found%
 ' verifie si "user32" existe:
 my_dll$="user32"
  i=0
  k%=0
  found%=0
  my_dll$=lower$(my_dll$)
  j=instr(my_dll$,".") : if j>0 then my_dll$=left$(my_dll$,j-1)
  repeat
      k%=k%+1
  until library$(k%)="_"
  repeat
      i=i+1
        my_library$=lower$(library$(i))
        j=instr(my_library$,".") : if j>0 then my_library$=left$(my_library$,j-1)
        '
        if my_library$=my_dll$
            found%=1
            exit_repeat
        end_if
  until i=32
  ' charge la librairie et cré la commande si nécessaire
  if found%=0
      library k%,my_dll$
'      print k%," : not found ",library$(k%)  :' debug
      command "pb_color","SendMessageA",k%,"IIII","stdcall"
  else
'      print i," : found ",library$(i)  :' debug
  end_if
  ' colore la progress_bar
  pb_color handle(nb%),1033,0,(b%*65536)+(g%*256)+r%
end_sub

' ------------------------------------------------------------------------------

sub GotoPbarPosition(n%)
  dim_local i%
  for i%=Position(pbar%) to n%
      position pbar%,i%
      caption alph3%,str$(position(pbar%))+" %"
      left alph3%,width(pan%)-(width(alph3%)+10)
      display
      pause 100
  next i%
end_sub

' ------------------------------------------------------------------------------
' FONCTIONS D EXTRACTION D UN SOURCE
' ------------------------------------------------------------------------------

SUB EXTRACT_BAS()
  dim_local l%,s$,b%,i%,n%,res%,pos_pbar%
  Caption alph2%,file_extract_name$(file$)
  if file_extract_extension$(file$)=".exe"
      filebin_open_read FRO%,file$
      l%=filebin_size(FRO%)
      filebin_position FRO%,l%-4
      filebin_hexa_read FRO%,4,s$
      if (s$<>"33422E46")
        message "["+time$+"] -ERROR- Ce fichier n' a pas été créé avec Panoramic"
        filebin_close FRO%
        Panofile%=1
        exit_sub
      end_if
      filebin_position FRO%,l%-8
      s$=""
      for i%=0 to 3
        filebin_read FRO%,b%
        s$=s$+chr$(b%)
      next i%
      ps%=adr(s$)
      get_size()
      n%=size%
      size%=size%+8
      filebin_position FRO%,l%-size%
      s$=""
      for i%=0 to n%-1
        filebin_read FRO%,b%

        pos_pbar%=int((i%*100)/size%)
        position pbar%,pos_pbar%
        caption alph3%,str$(pos_pbar%)+" %"
        left alph3%,width(pan%)-(width(alph3%)+10)
        display

        b%=decoder%(b%)
        if (b%=0)
            item_add mem1%,s$
            s$=""
            pause 10
        else
            s$=s$+chr$(b%)
        end_if
      next i%
      if (len(s$)>0)
        item_add mem1%,s$
      end_if
      filebin_close FRO%
  else
      message "["+time$+"] -ERROR- Fichier invalide !..."
      Panofile%=1
      exit_sub
  end_if
END_SUB

' ------------------------------------------------------------------------------

SUB Get_size()
  dim_local res%,fonction$,hnd_kernel%
  fonction$="RtlMoveMemory"
  hnd_kernel% = dll_call1("LoadDLL",adr(kernel$))
  res% = dll_call2("TargetDLL",hnd_kernel%,adr(fonction$))
  res% = dll_call3("CallDLL3",adr(ps%),ps%,4)
  res% = dll_call3("CallDLL3",adr(size%),ps%,4)
  res% = dll_call1("UnLoadDLL",hnd_kernel%)
END_SUB

' ------------------------------------------------------------------------------
' FONCTION DE CREATION D UN EXE
' ------------------------------------------------------------------------------

sub EDIT_EXE()
    dim_local res%,nom$
    nom$=left$(file$,len(file$)-3)+"exe"
    if file_exists(nom$)=1 then file_delete nom$
    res% = dll_call3("CompilePanoramicToEXE",adr(prg$),handle(mem1%),adr(nom$))
    if res%<> 0 : MESSAGERIE(res%) : end_if
    PanoFile%=res%
end_sub

' ------------------------------------------------------------------------------
' FONCTION DE SAUVEGARDE
' ------------------------------------------------------------------------------

sub SAVE_FILE()
  dim_local NewFile$
  if type%=2
      NewFile$=left$(file$,len(file$)-3)+"bas"
  end_if
  file_save mem1%,NewFile$
end_sub

' ------------------------------------------------------------------------------
' FONCTION DE SORTIE
' ------------------------------------------------------------------------------

sub QUITTER()
  dim_local fin%
  fin% = dll_call1("KillProcessByHandle",handle(0))
end_sub

' ------------------------------------------------------------------------------
' MESSAGES D ERREUR
' ------------------------------------------------------------------------------

sub MESSAGERIE(n%)
  dim_local m%,mes$,p%
  m%=(n%*-1)
  select m%
  case 1
      m$="Erreur inattendue !"
  case 2
      m$="Nom de programme invalide !"
  case 3
      m$="Programme non trouvé !"
  case 4
      m$="Nom du fichier *.exe invalide !"
  case 5
      m$="Le fichier *.exe existe déjà !"
  case 6
      m$="Erreur en copie du moteur Panoramic !"
  case 7
      m$="Erreur en écriture dans le fichier *.exe"
  end_select

  if message_warning_ok(mes$))=1
      p%=p%
  end_if
end_sub


Vous suivez le tuto de Minibug pour ajouter dans le menu contextuel
Convert to *.bas dans la clé [.exe]
Convert to *.exe dans la clé [.bas]

La commande est la même pour les deux "chemin de l' exe" nul: "%1"

Le programme vous proposera de lui indiquer le chemin de KGF.dll à sa première utilisation.

Normalement, si tout va bien, le menu contextuel doit apparaitre que ce soit pour un *.exe ou un *.bas
Si ce n' est pas un exe créé à partir de panoramic le programme se fermera mais bon le logo Panoramic étant de partout...

Bon, aller, je vous laisse tester...
Laughing


Dernière édition par ygeronimi le Jeu 3 Nov 2016 - 16:52, édité 2 fois (Raison : Amélioration du progress_bar sens bas vers exe)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 10129
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: PanoConverter   Jeu 3 Nov 2016 - 1:43

Tiens... tu dis:
Citation :
Convert to *.bas dans la clé [.bas]
Convert to *.exe dans la clé [.exe]
Ca ne devrait pas plutôt être:
Citation :
Convert to *.bas dans la clé [.exe]
Convert to *.exe dans la clé [.bas]
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Yannick

avatar

Nombre de messages : 7997
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Jeu 3 Nov 2016 - 14:00

@ Klaus,

Oui, effectivement, dans la précipitation j' ai inversé.
C' est corrigé dans le post.

Edit : A noter que ce programme tient compte des #INCLUDE placé sur le source passé en paramètres.
Il me reste à améliorer la progress_bar qui est un peu factice pour le sens *.bas > *.exe
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Yannick

avatar

Nombre de messages : 7997
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Jeu 3 Nov 2016 - 16:54

J' ai amélioré l' objet Progress_bar dans le sens *.bas vers *.exe
l' avancement est plus en adéquation avec la réalité...
Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: PanoConverter   

Revenir en haut Aller en bas
 
PanoConverter
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: