FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Logiciel de planétarium.
KGF_dll - nouvelles versions - Page 25 Emptypar Pedro Aujourd'hui à 10:37

» Un autre pense-bête...
KGF_dll - nouvelles versions - Page 25 Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
KGF_dll - nouvelles versions - Page 25 Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
KGF_dll - nouvelles versions - Page 25 Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
KGF_dll - nouvelles versions - Page 25 Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
KGF_dll - nouvelles versions - Page 25 Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
KGF_dll - nouvelles versions - Page 25 Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
KGF_dll - nouvelles versions - Page 25 Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
KGF_dll - nouvelles versions - Page 25 Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
KGF_dll - nouvelles versions - Page 25 Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
KGF_dll - nouvelles versions - Page 25 Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
KGF_dll - nouvelles versions - Page 25 Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
KGF_dll - nouvelles versions - Page 25 Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
KGF_dll - nouvelles versions - Page 25 Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
KGF_dll - nouvelles versions - Page 25 Emptypar leclode Ven 20 Sep 2024 - 19:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier
-29%
Le deal à ne pas rater :
DYSON V8 Origin – Aspirateur balai sans fil
269.99 € 379.99 €
Voir le deal

 

 KGF_dll - nouvelles versions

Aller en bas 
+13
The Gamer
Nardo26
silverman
Minibug
Pedro
mindstorm
pascal10000
Jicehel
papydall
Jean Claude
JL35
Yannick
Klaus
17 participants
Aller à la page : Précédent  1 ... 14 ... 24, 25, 26 ... 32 ... 40  Suivant
AuteurMessage
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 25 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 25 EmptyLun 30 Mar 2015 - 1:30

Il retourne bien les guillemets. Regarde le contenu de la liste - ils y sont. C''est Panoramic qui les bouffe - un problème bien connu. Rends la liste visible et tu le verras. Essaie avec le code que je viens de poster...
Alternativement, charge ta variable a$ de la manière suivante:
Code:
a$=" "+item_read$(ListCopy%,1)
Tu es tombé sur un effet secondaire du traitement des chaînes de caractères que j'ai signalé depuis longtemps. Il faut juste le savoir...
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Yannick




Nombre de messages : 8635
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

KGF_dll - nouvelles versions - Page 25 Empty
MessageSujet: re   KGF_dll - nouvelles versions - Page 25 EmptyLun 30 Mar 2015 - 1:45

Effectivement, autant pour moi !
J' arrête le combat pour ce soir, je vais faire un puzzle, cela me changera les idées.
J' ai le caberlot qui va finir par exploser... Laughing

Heu... il faut que je mette le zip à jour avant  Rolling Eyes
Revenir en haut Aller en bas
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 25 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 25 EmptyLun 30 Mar 2015 - 17:38

Nouvelle version:
KGF.dll V4.57 du 30/03/2015

Nouveautés:
finalisation de la fonction WriteGridCell

Modules modifiés:
KGF.dll
KGF.chm

La doc et les sources sont à jour.

Cette fonction permet d'écrire une cellule d'un GRID (identique à GridWrite), juste pour avoir un ensemble cohérent.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 25 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 25 EmptyMar 31 Mar 2015 - 10:49

Nouvelle version:
KGF.dll V4.58 du 31/03/2015

Nouveautés:
transformation de la fonction WriteGridCell en WriteGridCells

Modules modifiés:
KGF.dll
KGF.chm

La doc et les sources sont à jour.

Cette fonction permet d'écrire un rectangle de cellules d'un GRID en une seule opération. Le programme de démo suivant a été adapté à cela: Sélectionnez un rectangle de cellules, puis cliquez sur "Remplacer". Renouvelez l'opération avec d'autres rectangles, ou un clic dans une seule cellule...
Code:
' demo_GetSelectedGridText.bas
label clic, exit, enligne, couleur, remplacer
dim s$, res%, x1%, y1%, x2%, y2%, x%, y%, i%, sepcel$, seplin$
dim RGB%, d%, att%,FRGB%, xd%, xf%

grid 1 : top 1,250 : left 1,10
grid_write 1,2,2,"aaa"
grid_write 1,2,3,"bbb"
grid_write 1,3,3,"ccc"
grid_write 1,4,3,"ddd"
grid_write 1,4,4,"eee"
on_click 1,clic

check 2 : top 2,10 : left 2,10 : width 2,150 : on_click 2,enligne
  caption 2,"GRID avec édition en ligne"
 
button 3 : top 3,190 : left 3,60 : width 3,200 : caption 3,"Appliquer attributs"
  on_click 3,couleur

check 4 : top 4,40 : left 4,110 : width 4,150 : on_click 4,enligne
  caption 4,"sans colorer les parties fixes"

combo 5 : top 5,70 : left 5,110 : width 5,150
  item_add 5,"à gauche"
  item_add 5,"centré"
  item_add 5,"à droite"

combo 6 : top 6,100 : left 6,110 : width 6,150
  font_names_load 6

alpha 7 : top 7,130 : left 7,10 : caption 7,"Taille:"
combo 8 : top 8,130 : left 8,110 : width 8,40
  item_add 8,"8"
  item_add 8,"10"
  item_add 8,"12"
  item_add 8,"14"
 
check  9 : top  9,160 : left  9, 10 : caption  9,"Gras"
check 10 : top 10,160 : left 10, 90 : caption 10,"Italique"
check 11 : top 11,160 : left 11,170 : caption 11,"Souligné"
check 12 : top 12,160 : left 12,250 : caption 12,"Barré"

button 20 : top 20,380 : left 20,10 : caption 20,"Remplacer"
  on_click 20,remplacer

memo 99 : top 99,10 : left 99,360 : bar_both 99 : height 99,400

' dll_on "KGF_GRID.dll"
dll_on "KGF.dll"
' on_close 0,exit

res% = dll_call2("SelectComboBoxItem",handle(5),1)
for i%=1 to count(6)
  if item_read$(6,i%)="Arial"
    res% = dll_call2("SelectComboBoxItem",handle(6),i%)
    exit_for
  end_if
next i%
res% = dll_call2("SelectComboBoxItem",handle(8),2)

end

exit:
  res% = dll_call1("KillProcessByHandle",handle(0))
  return
 
remplacer:
  ' récupérer les coordonnées du rectangle sélectionné
  item_add 99,"GetSelectedGridIndexes en cours..."
  res% = DLL_call5("GetSelectedGridIndexes",object_internal(1),adr(x1%),adr(y1%),adr(x2%),adr(y2%))
  item_add 99,"GetSelectedGridIndexes ok"
'  message "Rectangle: ("+str$(x1%)+","+str$(y1%)+") --> ("+str$(x2%)+","+str$(y2%)+")"

  ' remplacer le texte des cellules sélectionnées par autre chose
  s$ = ""
  xd% = x1%
  xf% = x2%
  for y%=y1% to y2%
    for x%=xd% to xf%
      s$ = s$ + "L"+str$(y%) + "  C"+str$(x%) + sepcel$
    next x%
  next y%
  item_add 99,"WriteGridCells en cours..."
  res% = dll_call6("WriteGridCell",object_internal(1),x1%,y1%,x2%,y2%,adr(s$))
  item_add 99,"WriteGridCells ok"
  return

 
  xd% = x1%
  xf% = x2%
  for y%=y1% to y2%
    for x%=xd% to xf%
      s$ = "L"+str$(y%) + "  C"+str$(x%)
      res% = dll_call4("WriteGridCell",object_internal(1),x%,y%,adr(s$))
    next x%
  next y%
  item_add 99,"WriteGridCells ok"
  return

clic:
  clear 99

  ' paramétrer les séparateurs (ce sont d'ailleurs les valeurs par défaut)
  sepcel$ = "\"
  seplin$ = "\" : ' chr$(13)+chr$(10)
  item_add 99,"SetGridSeparators en cours..."
  res% = dll_call2("SetGridSeparators",adr(sepcel$),adr(seplin$))
  item_add 99,"SetGridSeparators ok"

  ' récupérer les coordonnées du rectangle sélectionné
  item_add 99,"GetSelectedGridIndexes en cours..."
  res% = DLL_call5("GetSelectedGridIndexes",object_internal(1),adr(x1%),adr(y1%),adr(x2%),adr(y2%))
  item_add 99,"GetSelectedGridIndexes ok"
'  message "Rectangle: ("+str$(x1%)+","+str$(y1%)+") --> ("+str$(x2%)+","+str$(y2%)+")"

  ' récupérer le texte des cellules sélectionnées
  s$ = string$(255," ")
  item_add 99,"GetSelectedGridText en cours..."
  res% = DLL_call2("GetSelectedGridText",object_internal(1),adr(s$))
  item_add 99,"GetSelectedGridText ok"
  s$ = trim$(s$)
'  message s$
  return

enligne:
  i% = checked(2) : ' inverser le mode "édition"
  res% = dll_call6("GridFunction",object_internal(1),1,i%,0,0,0)
  return
 
 
couleur:
  d% = checked(4)*3

  ' forcer le centrage
  att% = val(item_index$(8))
  if checked(9) =1 then att% = att% + 256
  if checked(10)=1 then att% = att% + 512
  if checked(11)=1 then att% = att% + 1024
  if checked(12)=1 then att% = att% + 2048
  s$ = item_index$(6)
  res% = dll_call6("GridFunction",object_internal(1),9,item_index(5)-1,att%,adr(s$),0)

  ' remplacer ONDRAWCELL
  res% = dll_call6("GridFunction",object_internal(1),8,1,0,0,0)

  ' changer la couleur d'une colonne
  RGB(255,255,255)  : ' écriture blanche
  FRGB% = RGB%
  RGB(255,0,0)    : ' fond rouge
  res% = dll_call6("GridFunction",object_internal(1),4+d%,2,0,RGB%,FRGB%)

  ' changer la couleur d'une ligne
  RGB(255,255,0)  : ' écriture jaune
  FRGB% = RGB%
  RGB(0,0,255)    : ' fond bleu
  res% = dll_call6("GridFunction",object_internal(1),3+d%,0,3,RGB%,FRGB%)

  ' changer la couleur d'une cellule
  RGB(0,0,255)  : ' écriture bleue
  FRGB% = RGB%
  RGB(255,255,0)  : ' fond jaune
  res% = dll_call6("GridFunction",object_internal(1),2,2,3,RGB%,FRGB%)
  return

sub RGB(R%,G%,B%)
  RGB% = (B%*256+R%)*256+G%
end_sub
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

KGF_dll - nouvelles versions - Page 25 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 25 EmptyMar 31 Mar 2015 - 12:58

Tu me donnes une idée Klaus pour compléter tes fonction grid et tes fonction Excel.
Tu devrais créer 2 fonctions dans KGF, une qui copie de la grille vers Excel en gardant toute la mise en forme et sa réciproque d'Excel vers la grille en gardant le formatage.
D'après ce que j'ai vu dans les fonctions disponibles, ça me permet faisable, mais je me trompe peut être.
Revenir en haut Aller en bas
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 25 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 25 EmptyMar 31 Mar 2015 - 13:01

C'est une idée intéressante à creuser. Je vais regarder cela.

Pour commencer, il faudrait faire une maquette en utilisant les fonctions existantes. On verra.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Jean Claude

Jean Claude


Nombre de messages : 5950
Age : 70
Localisation : 83 Var
Date d'inscription : 07/05/2009

KGF_dll - nouvelles versions - Page 25 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 25 EmptyMar 31 Mar 2015 - 16:28

Oui, c'est intéressant mais ce serait bien mieux si cela pouvait également fonctionner avec Open_Calc (pour ceux qui n'on pas Excel).

Mais c'est peut-être trop de boulot.

A+


Dernière édition par Jean Claude le Mar 31 Mar 2015 - 20:45, édité 1 fois
Revenir en haut Aller en bas
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 25 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 25 EmptyMar 31 Mar 2015 - 16:36

Je ne suis pas contre un lien vers OpenCalc. Problème: je n'ai pas OpenOffice, et je n'ai aucune doc à ce sujet.

EDIT

Rectification: j'ai trouvé un module compatible qui peut faire des opérations indifféremment sur Excel et OpenCalc ! Je suis en train de l'adapter. Pour le moment, ouverture, fermeture et test de statut fonctionnent ! J'aurai bientôt un ensemble cohérent, et on aura alors le passage d'un GRID à Excel et/ou à OpenCalc, ainsi que le sens de retour !
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

KGF_dll - nouvelles versions - Page 25 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 25 EmptyMar 31 Mar 2015 - 20:38

Excellent, la boucle sera bouclée Smile On pourra ouvrir une feuille Excel (ou OpenCalc) dans Panoramic et la resauvegarder sous Excel (ou OpenCalc) sans perdre la mise en forme.
Pas mal, pas mal. Je ne parle pas non plus simplement de la possibilité d'exporter nos grilles dans ces 2 formats Wink
Revenir en haut Aller en bas
Jean Claude

Jean Claude


Nombre de messages : 5950
Age : 70
Localisation : 83 Var
Date d'inscription : 07/05/2009

KGF_dll - nouvelles versions - Page 25 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 25 EmptyMar 31 Mar 2015 - 20:44

Klaus a écrit:
Je ne suis pas contre un lien vers OpenCalc. Problème: je n'ai pas OpenOffice, et je n'ai aucune doc à ce sujet.

Là, tu m'étonnes Open_Office est un open source, il suffit de le télécharger (précaution pour ceux qui ont la suite Microsoft Office: Faites l'installation sur un Disque dur ou une partition à part, car je me souvient que la cohabitation est un peu difficile)
EDIT

Klaus a écrit:

Rectification: j'ai trouvé un module compatible qui peut faire des opérations indifféremment sur Excel et OpenCalc ! Je suis en train de l'adapter. Pour le moment, ouverture, fermeture et test de statut fonctionnent ! J'aurai bientôt un ensemble cohérent, et on aura alors le passage d'un GRID à Excel et/ou à OpenCalc, ainsi que le sens de retour !

C'est super, ainsi tous pourront profiter des fonctions GRID de KGF.dll.

Merci !
Revenir en haut Aller en bas
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 25 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 25 EmptyMar 31 Mar 2015 - 21:22

Nouvelle version:
KGF.dll V4.59 du 31/03/2015

Nouveautés:
version préliminaire avec gestion Excel/OpenCalc

Modules modifiés:
KGF.dll

La doc et les sources seront à jour prochainement.

Voici une idée de ce qui existe déjà:
Code:
' ouvrir un tableur et se connecter à ce tableur
res% = dll_call2("StartSpreadSheet",quoi%,visible%)
' quoi%: 1=Excel  2=OPenCalc
visible%: 1=visible  0=non visible

' se déconnecter du tableur et le fermer
res% = dll_call0("TerminateSpreadSheet")

' tester quel tableur est actif
res% = dll_call0("GetSpreadSheetType")
res%: -1=rien  0=a été lancé, mais n'est plus disponible  1=Excel  2=OpenCalc

' écrire une cellule de la page active du document actif
res% = dll_call4("WriteSpreadSheetCellByIndex",x%,y%,adr(txt$),adr(frm$))
' x%=colonne  y%=ligne  txt$=données  frm$=formule
si le 3ème et/ou le 4ème paramètre est passé comme 0, la modification de cette partie n'aura pas lieu

' exporter un GRID dans la page active directement
res% = dll_call3("ExportGridToSpreadSheet",object_internal(grid%),deltax%,deltay%)
' grid%=numéro du GRID
' deltax%, deltay% = délacage horizontal/vertical en destination dans la page active

' lire une cellule de la page active du document actif
res% = dll_call4("ReadSpreadSheetCellByIndex",x%,y%,adr(txt$),adr(frm$))
' x%=colonne  y%=ligne  txt$=données  frm$=formule
si le 3ème et/ou le 4ème paramètre est passé comme 0, la partie correspondante n'est pas lue

' importer un GRID de la page active directement
res% = dll_call3("ImportGridFromSpreadSheet",object_internal(grid%),deltax%,deltay%)
' grid%=numéro du GRID
' deltax%, deltay% = délacage horizontal/vertical en source dans la page active

Et voici une première petite démo. Le programme affiche un GRID de 11 lignes sur 8 colonnes. Le menu Fichiers" permet de lancer et arrêter le tableur et d'exporter le contenu du GRID dans le tableur. Le programme essaie d'abord d'ouvrir Excel. Si absent, il tente OPenCalc avant de jeter l'éponge. Le menu Options contient une ligne Mode Edition. Lorsque cette case est cochée, on peut saisir directement dans le GRID ! Alors, saisissez quelques cellules, puis exportez vers le tableur...
Code:
' GRID_et_EXCEL.bas


label connect, exit, editmode, export, import, disconnect
label test_what

dim nlin% : nlin% = 11
dim ncol% : ncol% = 8

dim res%, no%, no1%, no2%, editmode%

no% = no% + 1 : main_menu no% : no1% = no%
  no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Fichiers"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Connecter" : on_click no%,connect
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Exporter" : on_click no%,export
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Importer" : on_click no%,import
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Déconnecter" : on_click no%,disconnect
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Sortir" : on_click no%,exit
  no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Options"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Mode Edition" : on_click no%,editmode
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Test tableur" : on_click no%,test_what

grid 100 : top 100,10 : left 100,10 : width 100,525 : height 100,280
grid_column 100,ncol% : grid_row 100,nlin%



dll_on "KGF.dll"




end

exit:
  terminate
 
test_what:
  Test_What()
  return

connect:
  ConnectToExcel()
  return
 
disconnect:
  DisconnectFromExcel()
  return
 
editmode:
  editmode% = 1 - editmode%
  if editmode%=0
    res% = DLL_call6("GridFunction",object_internal(100),1,0,0,0,0)
    mark_off number_click
  else
    res% = DLL_call6("GridFunction",object_internal(100),1,1,0,0,0)
    mark_on number_click
  end_if
  return
 
export:
  ExportGridToExcel()
  return
 
import:
  ImportGridFromExcel()
  return
 
 

sub ConnectToExcel()
  dim_local res%
  res% = dll_call2("StartSpreadSheet",1,1)        : ' essayer Excel
  if res%<0
    res% = dll_call2("StartSpreadSheet",2,1)      : ' essayer OpenCalc
    if res%<0 then message "Aucun tableur n'est trouvé"
  end_if
end_sub

sub DisconnectFromExcel()
  dim_local res%
  res% = dll_call0("TerminateSpreadSheet")
end_sub

sub ExportGridToExcel()
  dim_local res%, x%, y%, s$
  res% = dll_call0("GetSpreadSheetType")
  if res%<1 then exit_sub
 
  ' 1ère alternative: export par fonction directe
  ' décalage de 3 cellules vers la droite et de 2 lignes vers le bas
  res% = dll_call3("ExportGridToSpreadSheet",object_internal(100),3,2)
  exit_sub

  ' 2ème alternative: export par boucle
  for y%=1 to nlin%
    for x%=1 to ncol%
      s$ = grid_read$(100,y%,x%)
      res% = dll_call4("WriteSpreadSheetCellByIndex",x%,y%,adr(s$),0)
    next x%
  next y%
 
end_sub

sub ImportGridFromExcel()
  dim_local res%, x%, y%, s$
  res% = dll_call0("GetSpreadSheetType")
  if res%<1 then exit_sub
  res% = dll_call3("ImportGridFromSpreadSheet",object_internal(100),3,2)
end_sub

sub Test_What()
  dim_local res%

  res% = dll_call0("GetSpreadSheetType")
  select res%
    case -1: message "aucun tableur n'est lancé"
    case  0: message "un tableur a été lancé, mais il n'est plus disponible"
    case  1: message "Excel est en cours..."
    case  2: message "OpenCalc est en cours..."
  end_select
end_sub

Ceci préfigure ce que sera la gestion Excel/OPenCalc dans l'avenir.

EDIT

Le code ci-dessus a été mis à jour avec une nouvelle fonction exportant directement un GRID entier dans la page active du document actif du tableur ! Plus besoin de faire une boucle. Même les dimensions du GRID sont détectées automatiquement.

EDIT

Deux nouvelles fonctions:
- lecture d'une cellule de la page active du document actif du tableur
- import direct d'un GRID entier à partir du tableur, symmétrique à la fonction d'export.

On a maintenant:
start, stop, test état, écriture cellule, lecture cellule, export GRID, import GRID.

Ca fait déjà un bel ensemble, non ? A partir de demain, je vais m'occuper de la gestion des pages, sauvegarde/ouverture de document, aspects graphiques etc.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 25 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 25 EmptyMer 1 Avr 2015 - 11:12

Nouvelle version:
KGF.dll V4.60 du 01/04/2015

Nouveautés:
suite de la gestion Excel/OpenCalc avec Open, Save, SaveAs

Modules modifiés:
KGF.dll

La doc et les sources seront à jour prochainement.

On peut même importer/exporter séparément, maintenant, les données et les formules !

Doc provisoire de l'existant:
' ouvrir un tableur et se connecter à ce tableur
res% = dll_call2("StartSpreadSheet",quoi%,visible%)
' quoi%: 1=Excel  2=OPenCalc
visible%: 1=visible  0=non visible

' se déconnecter du tableur et le fermer
res% = dll_call0("TerminateSpreadSheet")

' tester quel tableur est actif
res% = dll_call0("GetSpreadSheetType")
res%: -1=rien  0=a été lancé, mais n'est plus disponible  1=Excel  2=OpenCalc

' écrire une cellule de la page active du document actif
res% = dll_call4("WriteSpreadSheetCellByIndex",x%,y%,adr(txt$),adr(frm$))
' x%=colonne  y%=ligne  txt$=données  frm$=formule
si le 3ème et/ou le 4ème paramètre est passé comme 0, la modification de cette partie n'aura pas lieu

' exporter un GRID dans la page active directement
res% = dll_call4("ExportGridToSpreadSheet",object_internal(grid%),act%,deltax%,deltay%)
' grid%=numéro du GRID
' act%: 0=en tant que données 1=en tant que formules
' deltax%, deltay% = délacage horizontal/vertical en destination dans la page active

' lire une cellule de la page active du document actif
res% = dll_call4("ReadSpreadSheetCellByIndex",x%,y%,adr(txt$),adr(frm$))
' x%=colonne  y%=ligne  txt$=données  frm$=formule
si le 3ème et/ou le 4ème paramètre est passé comme 0, la partie correspondante n'est pas lue

' importer un GRID de la page active directement
res% = dll_call4("ImportGridFromSpreadSheet",object_internal(grid%),act%,deltax%,deltay%)
' grid%=numéro du GRID
' act%: 0=en tant que données 1=en tant que formules
' deltax%, deltay% = délacage horizontal/vertical en source dans la page active

' ouvrir un document existant
res% = dll_call1("OpenSpreadSheet",adr(f$))
' f$ = chemin et nom vers le fichier existant

' enregistrer un document du tableur
res% = dll_call0("SaveSpreadSheet")
' note: il faut que ce document ait déjà un nom !

' enregistrer un document dans un autre fichier
res% = dll_call1("SaveSpreadSheetAs",adr(f$))
' f$ = chemin et nom vers le nouveau fichier

Et voici le programme de démo avec toutes les fonctions:
(note: pour importer/exporter, un décalage de 3 colonnes est explicitement codé dans la démo !)
Code:
' GRID_et_EXCEL.bas


label connect, exit, editmode, export, import, disconnect
label open, save, saveas
label test_what

dim nlin% : nlin% = 11
dim ncol% : ncol% = 8

dim res%, no%, no1%, no2%, editmode%

no% = no% + 1 : main_menu no% : no1% = no%
  no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Fichiers"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Connecter" : on_click no%,connect
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Exporter" : on_click no%,export
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Importer" : on_click no%,import
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Déconnecter" : on_click no%,disconnect
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Ouvrir..." : on_click no%,open
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer" : on_click no%,save
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer sous..." : on_click no%,saveas
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Sortir" : on_click no%,exit
  no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Options"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Mode Edition" : on_click no%,editmode
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Test tableur" : on_click no%,test_what

grid 100 : top 100,10 : left 100,10 : width 100,525 : height 100,280
grid_column 100,ncol% : grid_row 100,nlin%

open_dialog 101
save_dialog 102

dll_on "KGF.dll"




end

exit:
  terminate
  
test_what:
  Test_What()
  return

connect:
  ConnectToExcel()
  return
  
disconnect:
  DisconnectFromExcel()
  return

open:
  open()
  return

saveas:
  SaveAs()
  return
  
save:
  Save()
  return

editmode:
  editmode% = 1 - editmode%
  if editmode%=0
    res% = DLL_call6("GridFunction",object_internal(100),1,0,0,0,0)
    mark_off number_click
  else
    res% = DLL_call6("GridFunction",object_internal(100),1,1,0,0,0)
    mark_on number_click
  end_if
  return
  
export:
  ExportGridToExcel()
  return
  
import:
  ImportGridFromExcel()
  return
  
  

sub ConnectToExcel()
  dim_local res%
  res% = dll_call2("StartSpreadSheet",1,1)        : ' essayer Excel
  if res%<0
    res% = dll_call2("StartSpreadSheet",2,1)      : ' essayer OpenCalc
    if res%<0 then message "Aucun tableur n'est trouvé"
  end_if
end_sub

sub DisconnectFromExcel()
  dim_local res%
  res% = dll_call0("TerminateSpreadSheet")
end_sub

sub ExportGridToExcel()
  dim_local res%, x%, y%, s$
  res% = dll_call0("GetSpreadSheetType")
  if res%<1 then exit_sub
  
  ' 1ère alternative: export par fonction directe
  ' décalage de 3 cellules vers la droite et de 2 lignes vers le bas
  res% = dll_call4("ExportGridToSpreadSheet",object_internal(100),0,3,2)
  exit_sub

  ' 2ème alternative: export par boucle
  for y%=1 to nlin%
    for x%=1 to ncol%
      s$ = grid_read$(100,y%,x%)
      res% = dll_call4("WriteSpreadSheetCellByIndex",x%,y%,adr(s$),0)
    next x%
  next y%
  
end_sub

sub ImportGridFromExcel()
  dim_local res%, x%, y%, s$
  res% = dll_call0("GetSpreadSheetType")
  if res%<1 then exit_sub
  res% = dll_call4("ImportGridFromSpreadSheet",object_internal(100),0,3,2)
end_sub

sub Test_What()
  dim_local res%
  res% = dll_call0("GetSpreadSheetType")
  select res%
    case -1: message "aucun tableur n'est lancé"
    case  0: message "un tableur a été lancé, mais il n'est plus disponible"
    case  1: message "Excel est en cours..."
    case  2: message "OpenCalc est en cours..."
  end_select
end_sub

sub open()
  dim_local res%, f$
  filter 101,"Fichiers Excel|*.xls"
  f$ = file_name$(101)
  if f$="_" then exit_sub
  if lower$(right$(f$,4))<>".xls" then f$ = f$ + ".xls"
  res% = dll_call1("OpenSpreadSheet",adr(f$))
end_sub

sub SaveAs()
  dim_local res%, f$
  filter 102,"Fichiers Excel|*.xls"
  f$ = file_name$(102)
  if f$="_" then exit_sub
  if lower$(right$(f$,4))<>".xls" then f$ = f$ + ".xls"
  res% = dll_call1("SaveSpreadSheetAs",adr(f$))
end_sub

sub Save()
  dim_local res%
  res% = dll_call0("SaveSpreadSheet")
end_sub
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

KGF_dll - nouvelles versions - Page 25 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 25 EmptyMer 1 Avr 2015 - 12:01

Classe et en plus ça étend l'offre à OpenOffice.

Bon maintenant pour que l'on puisse écrire les articles directement dans des memo Panoramic et que l'on puisse les sauvegarder au format OpenOffice, Acrobat ou Word, il ne reste plus qu'à faire la même chose ^^

(Si tu as une panne d'idées pour avoir du boulot, tu peux toujours compter sur moi .... Smile )
Revenir en haut Aller en bas
Yannick




Nombre de messages : 8635
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

KGF_dll - nouvelles versions - Page 25 Empty
MessageSujet: re   KGF_dll - nouvelles versions - Page 25 EmptyMer 1 Avr 2015 - 13:57

Ouais, ouais !...et avec la fonction d' export en pdf et ce sera parfait !

lol! lol! lol! lol!

Bon, puis si tu as un module pour écrire à notre place....n' hésites pas...

lol! lol! lol! lol! lol! lol! lol!
Revenir en haut Aller en bas
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 25 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 25 EmptyMer 1 Avr 2015 - 16:02

Nouvelle version:
KGF.dll V4.61 du 01/04/2015

Nouveautés:
suite de la gestion Excel/OpenCalc avec Close et avec la gestion des pages d'un document

Modules modifiés:
KGF.dll

La doc et les sources seront à jour prochainement.

On peut même importer/exporter séparément, maintenant, les données et les formules !

Doc provisoire de l'existant:
' ouvrir un tableur et se connecter à ce tableur
res% = dll_call2("StartSpreadSheet",quoi%,visible%)
' quoi%: 1=Excel  2=OPenCalc
visible%: 1=visible  0=non visible

' se déconnecter du tableur et le fermer
res% = dll_call0("TerminateSpreadSheet")

' tester quel tableur est actif
res% = dll_call0("GetSpreadSheetType")
res%: -1=rien  0=a été lancé, mais n'est plus disponible  1=Excel  2=OpenCalc

' écrire une cellule de la page active du document actif
res% = dll_call4("WriteSpreadSheetCellByIndex",x%,y%,adr(txt$),adr(frm$))
' x%=colonne  y%=ligne  txt$=données  frm$=formule
si le 3ème et/ou le 4ème paramètre est passé comme 0, la modification de cette partie n'aura pas lieu

' exporter un GRID dans la page active directement
res% = dll_call4("ExportGridToSpreadSheet",object_internal(grid%),act%,deltax%,deltay%)
' grid%=numéro du GRID
' act%: 0=en tant que données 1=en tant que formules
' deltax%, deltay% = délacage horizontal/vertical en destination dans la page active

' lire une cellule de la page active du document actif
res% = dll_call4("ReadSpreadSheetCellByIndex",x%,y%,adr(txt$),adr(frm$))
' x%=colonne  y%=ligne  txt$=données  frm$=formule
si le 3ème et/ou le 4ème paramètre est passé comme 0, la partie correspondante n'est pas lue

' importer un GRID de la page active directement
res% = dll_call4("ImportGridFromSpreadSheet",object_internal(grid%),act%,deltax%,deltay%)
' grid%=numéro du GRID
' act%: 0=en tant que données 1=en tant que formules
' deltax%, deltay% = délacage horizontal/vertical en source dans la page active

' ouvrir un document existant
res% = dll_call1("OpenSpreadSheet",adr(f$))
' f$ = chemin et nom vers le fichier existant

' enregistrer un document du tableur
res% = dll_call0("SaveSpreadSheet")
' note: il faut que ce document ait déjà un nom !

' enregistrer un document dans un autre fichier
res% = dll_call1("SaveSpreadSheetAs",adr(f$))
' f$ = chemin et nom vers le nouveau fichier

' fermer un document
res% = dll_call0("CloseSpreadSheet")

' insérer une nouvelle page
res% = dll_call2("NewSpreadSheetPage",adr(nom$),pos%)
' nom$=nom de la page  
' pos%=position   0=après la page active  1=après la dernière page

' activer une page par son incide
res% = dll_call1("ActivateSpreadSheetPageByIndex",n%)
' n%=indice  (1,2,...)

' activer une page par son nom
res% = dll_call1("ActivateSpreadSheetPageByName",adr(s$))
' s$=nom de la page recherchée

' retourner le nombre de pages du document
res% = dll_call0("GetSpreadSheetPageCount")

' retourner l'indice de la page active
res% = dll_call0("GetSpreadSheetActivePageNumber")

' retourner le nom de la page active
res% = dll_call1("GetSpreadSheetActivePageName",adr(nom$))
nom$ recevra le nom de la page active

Et voici le programme de démo avec toutes les fonctions:
(note: pour importer/exporter, un décalage de 3 colonnes est explicitement codé dans la démo !)
Les menus ont été réorganisés pour refléter la structure: Fichier(Document) - Pages - Options.
Code:
' GRID_et_EXCEL.bas

label connect, exit, editmode, export, import, disconnect
label open, save, saveas, close
label new_sheet, act_by_ind, act_by_name
label test_what, page_count, ind_actif, name_act

dim nlin% : nlin% = 11
dim ncol% : ncol% = 8

dim res%, no%, no1%, no2%, editmode%

no% = no% + 1 : main_menu no% : no1% = no%
  no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Fichiers"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Connecter" : on_click no%,connect
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Déconnecter" : on_click no%,disconnect
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Sortir" : on_click no%,exit
  no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Document"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Ouvrir..." : on_click no%,open
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer" : on_click no%,save
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer sous..." : on_click no%,saveas
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Fermer" : on_click no%,close
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Exporter" : on_click no%,export
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Importer" : on_click no%,import
  no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Pages"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nouveau" : on_click no%,new_sheet
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Activer par indice" : on_click no%,act_by_ind
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Activer par nom" : on_click no%,act_by_name
  no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Options"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Mode Edition" : on_click no%,editmode
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Test tableur" : on_click no%,test_what
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nombre de pages" : on_click no%,page_count
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Indice page active" : on_click no%,ind_actif
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nom page active" : on_click no%,name_act

grid 100 : top 100,10 : left 100,10 : width 100,525 : height 100,280
grid_column 100,ncol% : grid_row 100,nlin%

open_dialog 101
save_dialog 102

dll_on "KGF.dll"




end

exit:
  terminate
  
test_what:
  Test_What()
  return

connect:
  ConnectToExcel()
  return
  
disconnect:
  DisconnectFromExcel()
  return

open:
  open()
  return

saveas:
  SaveAs()
  return
  
save:
  Save()
  return
  
close:
  Close()
  return
  
new_sheet:
  NewSheet()
  return

act_by_ind:
  ActivateIndex()
  return
  
act_by_name:
  ActivateName()
  return

page_count:
  GetPageCount()
  return

ind_actif:
  GetActiveIndex()
  return

name_act:
  GetActiveName()
  return



editmode:
  editmode% = 1 - editmode%
  if editmode%=0
    res% = DLL_call6("GridFunction",object_internal(100),1,0,0,0,0)
    mark_off number_click
  else
    res% = DLL_call6("GridFunction",object_internal(100),1,1,0,0,0)
    mark_on number_click
  end_if
  return
  
export:
  ExportGridToExcel()
  return
  
import:
  ImportGridFromExcel()
  return
  
  

sub ConnectToExcel()
  dim_local res%
  res% = dll_call2("StartSpreadSheet",1,1)        : ' essayer Excel
  if res%<0
    res% = dll_call2("StartSpreadSheet",2,1)      : ' essayer OpenCalc
    if res%<0 then message "Aucun tableur n'est trouvé"
  end_if
end_sub

sub DisconnectFromExcel()
  dim_local res%
  res% = dll_call0("TerminateSpreadSheet")
end_sub

sub ExportGridToExcel()
  dim_local res%, x%, y%, s$
  res% = dll_call0("GetSpreadSheetType")
  if res%<1 then exit_sub
  
  ' 1ère alternative: export par fonction directe
  ' décalage de 3 cellules vers la droite et de 2 lignes vers le bas
  res% = dll_call4("ExportGridToSpreadSheet",object_internal(100),0,3,2)
  exit_sub

  ' 2ème alternative: export par boucle
  for y%=1 to nlin%
    for x%=1 to ncol%
      s$ = grid_read$(100,y%,x%)
      res% = dll_call4("WriteSpreadSheetCellByIndex",x%,y%,adr(s$),0)
    next x%
  next y%
  
end_sub

sub ImportGridFromExcel()
  dim_local res%, x%, y%, s$
  res% = dll_call0("GetSpreadSheetType")
  if res%<1 then exit_sub
  res% = dll_call4("ImportGridFromSpreadSheet",object_internal(100),0,3,2)
end_sub

sub Test_What()
  dim_local res%
  res% = dll_call0("GetSpreadSheetType")
  select res%
    case -1: message "aucun tableur n'est lancé"
    case  0: message "un tableur a été lancé, mais il n'est plus disponible"
    case  1: message "Excel est en cours..."
    case  2: message "OpenCalc est en cours..."
  end_select
end_sub

sub open()
  dim_local res%, f$
  filter 101,"Fichiers Excel|*.xls"
  f$ = file_name$(101)
  if f$="_" then exit_sub
  if lower$(right$(f$,4))<>".xls" then f$ = f$ + ".xls"
  res% = dll_call1("OpenSpreadSheet",adr(f$))
end_sub

sub SaveAs()
  dim_local res%, f$
  filter 102,"Fichiers Excel|*.xls"
  f$ = file_name$(102)
  if f$="_" then exit_sub
  if lower$(right$(f$,4))<>".xls" then f$ = f$ + ".xls"
  res% = dll_call1("SaveSpreadSheetAs",adr(f$))
end_sub

sub Save()
  dim_local res%
  res% = dll_call0("SaveSpreadSheet")
end_sub

sub Close()
  dim_local res%
  res% = dll_call0("CloseSpreadSheet")
end_sub

sub NewSheet()
  dim_local res%, nom$
  nom$ = message_input$("Nouvelle page","Nom de la page:","")
  if nom$="" then exit_sub
  res% = dll_call2("NewSpreadSheetPage",adr(nom$),1)
end_sub

sub  ActivateIndex()
  dim_local res%, n%, s$
  s$ = message_input$("Activer une page","Numéro de la page:","")
  if s$="" then exit_sub
  if numeric(s$)=0 then exit_sub
  n% = val(s$)
  res% = dll_call1("ActivateSpreadSheetPageByIndex",n%)
end_sub

sub  ActivateName()
  dim_local res%, n%, s$
  s$ = message_input$("Activer une page","Nom de la page:","")
  if s$="" then exit_sub
  res% = dll_call1("ActivateSpreadSheetPageByName",adr(s$))
end_sub

sub  GetPageCount()
  dim_local res%
  res% = dll_call0("GetSpreadSheetPageCount")
  message "Le document a "+str$(res%)+" pages"
end_sub

sub  GetActiveIndex()
  dim_local res%
  res% = dll_call0("GetSpreadSheetActivePageNumber")
  message "La page active est la page numéro "+str$(res%)
end_sub

sub  GetActiveName()
  dim_local res%, nom$
  nom$ = string$(255," ")
  res% = dll_call1("GetSpreadSheetActivePageName",adr(nom$))
  message "La page actuelle s'appelle ["+trim$(nom$)+"]"
end_sub
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

KGF_dll - nouvelles versions - Page 25 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 25 EmptyMer 1 Avr 2015 - 18:29

Pour écrire à notre place, pas évident, mais un petit programme Panoramic qui permettent de faire la conversion en Word / Open Office / PDF, ça serait bien pratique, que l'on modifie ou non le texte dans Panoramic. L'avantage c'est qu'avec la DLL, on a accès au memos formatés. On peut donc si je ne m'abuse (je rêve peut être, mais comme Klaus a tendance à rendre les rêves possibles ...). On pourrait donc tous travailler sur les articles sans se soucier du format. Par contre quand j'ai écrit ça, je n'ai pas penser aux illustrations qui poseront certainement problème au niveau de la mise en page. bon on vera bien ce qu'en dit Klaus. Smile
Revenir en haut Aller en bas
Jean Claude

Jean Claude


Nombre de messages : 5950
Age : 70
Localisation : 83 Var
Date d'inscription : 07/05/2009

KGF_dll - nouvelles versions - Page 25 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 25 EmptyMer 1 Avr 2015 - 20:22

Houla !!! çà bouge,

Je vais avoir du travail, dans les semaines à venir...

cheers
Revenir en haut Aller en bas
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 25 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 25 EmptyJeu 2 Avr 2015 - 0:22

Nouvelle version:
KGF.dll V4.62 du 02/04/2015

Nouveautés:
suite de la gestion Excel/OpenCalc avec Close et avec la suppression d'une page d'un document
et des tests de toutes les fonctions avec OpenCalc


Modules modifiés:
KGF.dll

La doc et les sources seront à jour prochainement.

On peut même importer/exporter séparément, maintenant, les données et les formules !

Doc provisoire de l'existant:
' ouvrir un tableur et se connecter à ce tableur
res% = dll_call2("StartSpreadSheet",quoi%,visible%)
' quoi%: 1=Excel 2=OPenCalc
visible%: 1=visible 0=non visible

' se déconnecter du tableur et le fermer
res% = dll_call0("TerminateSpreadSheet")

' tester quel tableur est actif
res% = dll_call0("GetSpreadSheetType")
res%: -1=rien 0=a été lancé, mais n'est plus disponible 1=Excel 2=OpenCalc

' écrire une cellule de la page active du document actif
res% = dll_call4("WriteSpreadSheetCellByIndex",x%,y%,adr(txt$),adr(frm$))
' x%=colonne y%=ligne txt$=données frm$=formule
si le 3ème et/ou le 4ème paramètre est passé comme 0, la modification de cette partie n'aura pas lieu

' exporter un GRID dans la page active directement
res% = dll_call4("ExportGridToSpreadSheet",object_internal(grid%),act%,deltax%,deltay%)
' grid%=numéro du GRID
' act%: 0=en tant que données 1=en tant que formules
' deltax%, deltay% = délacage horizontal/vertical en destination dans la page active

' lire une cellule de la page active du document actif
res% = dll_call4("ReadSpreadSheetCellByIndex",x%,y%,adr(txt$),adr(frm$))
' x%=colonne y%=ligne txt$=données frm$=formule
si le 3ème et/ou le 4ème paramètre est passé comme 0, la partie correspondante n'est pas lue

' importer un GRID de la page active directement
res% = dll_call4("ImportGridFromSpreadSheet",object_internal(grid%),act%,deltax%,deltay%)
' grid%=numéro du GRID
' act%: 0=en tant que données 1=en tant que formules
' deltax%, deltay% = délacage horizontal/vertical en source dans la page active

' ouvrir un document existant
res% = dll_call1("OpenSpreadSheet",adr(f$))
' f$ = chemin et nom vers le fichier existant

' enregistrer un document du tableur
res% = dll_call0("SaveSpreadSheet")
' note: il faut que ce document ait déjà un nom !

' enregistrer un document dans un autre fichier
res% = dll_call1("SaveSpreadSheetAs",adr(f$))
' f$ = chemin et nom vers le nouveau fichier

' fermer un document
res% = dll_call0("CloseSpreadSheet")

' insérer une nouvelle page
res% = dll_call2("NewSpreadSheetPage",adr(nom$),pos%)
' nom$=nom de la page
' pos%=position 0=après la page active 1=après la dernière page

' activer une page par son indice
res% = dll_call1("ActivateSpreadSheetPageByIndex",n%)
' n%=indice (1,2,...)

' activer une page par son nom
res% = dll_call1("ActivateSpreadSheetPageByName",adr(s$))
' s$=nom de la page recherchée

' supprimer une page par son indice
res% = dll_call1("RemoveSpreadSheetPageByIndex",n%)
' n%=indice (1,2,...)

' supprimer une page par son nom
res% = dll_call1("RemoveSpreadSheetPageByName",adr(s$))
' s$=nom de la page à supprimer

' retourner le nombre de pages du document
res% = dll_call0("GetSpreadSheetPageCount")

' retourner l'indice de la page active
res% = dll_call0("GetSpreadSheetActivePageNumber")

' retourner le nom de la page active
res% = dll_call1("GetSpreadSheetActivePageName",adr(nom$))
nom$ recevra le nom de la page active

Et voici le programme de démo avec toutes les fonctions:
(note: pour importer/exporter, un décalage de 3 colonnes est explicitement codé dans la démo !)
Les menus ont été réorganisés pour refléter la structure: Fichier(Document) - Pages - Options.
Toutes les fonctions ont été testées avec Excel et OpenCalc !
Code:
' GRID_et_EXCEL.bas


label connect, exit, editmode, export, import, disconnect
label open, save, saveas, close
label new_sheet, act_by_ind, act_by_name, del_by_ind, del_by_name
label test_what, page_count, ind_actif, name_act

dim nlin% : nlin% = 11
dim ncol% : ncol% = 8

dim res%, no%, no1%, no2%, editmode%

no% = no% + 1 : main_menu no% : no1% = no%
  no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Fichiers"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Connecter" : on_click no%,connect
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Déconnecter" : on_click no%,disconnect
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Sortir" : on_click no%,exit
  no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Document"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Ouvrir..." : on_click no%,open
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer" : on_click no%,save
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer sous..." : on_click no%,saveas
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Fermer" : on_click no%,close
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Exporter" : on_click no%,export
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Importer" : on_click no%,import
  no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Pages"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nouveau" : on_click no%,new_sheet
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Activer par indice" : on_click no%,act_by_ind
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Activer par nom" : on_click no%,act_by_name
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Supprimer par indice" : on_click no%,del_by_ind
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Supprimer par nom" : on_click no%,del_by_name
  no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Options"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Mode Edition" : on_click no%,editmode
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Test tableur" : on_click no%,test_what
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nombre de pages" : on_click no%,page_count
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Indice page active" : on_click no%,ind_actif
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nom page active" : on_click no%,name_act

grid 100 : top 100,10 : left 100,10 : width 100,525 : height 100,280
grid_column 100,ncol% : grid_row 100,nlin%

option 111 : top 111,320 : left 111,50 : caption 111,"Détection automatique"
option 112 : top 112,340 : left 112,50 : caption 112,"Excel"
option 113 : top 113,360 : left 113,50 : caption 113,"OpenCalc"

open_dialog 101
save_dialog 102

dll_on "KGF.dll"

mark_on 111


end

exit:
  terminate
 
test_what:
  Test_What()
  return

connect:
  ConnectToExcel()
  return
 
disconnect:
  DisconnectFromExcel()
  return

open:
  open()
  return

saveas:
  SaveAs()
  return
 
save:
  Save()
  return
 
close:
  Close()
  return
 
new_sheet:
  NewSheet()
  return

act_by_ind:
  ActivateIndex()
  return
 
act_by_name:
  ActivateName()
  return

del_by_ind:
  RemoveIndex()
  return

del_by_name:
  RemoveName()
  return

page_count:
  GetPageCount()
  return

ind_actif:
  GetActiveIndex()
  return

name_act:
  GetActiveName()
  return



editmode:
  editmode% = 1 - editmode%
  if editmode%=0
    res% = DLL_call6("GridFunction",object_internal(100),1,0,0,0,0)
    mark_off number_click
  else
    res% = DLL_call6("GridFunction",object_internal(100),1,1,0,0,0)
    mark_on number_click
  end_if
  return
 
export:
  ExportGridToExcel()
  return
 
import:
  ImportGridFromExcel()
  return
 
 

sub ConnectToExcel()
  dim_local res%
  if checked(111)=1
    res% = dll_call2("StartSpreadSheet",1,1)        : ' essayer Excel
    if res%<0
      res% = dll_call2("StartSpreadSheet",2,1)      : ' essayer OpenCalc
      if res%<0 then message "Aucun tableur n'est trouvé"
    end_if
  end_if
  if checked(112)=1
    res% = dll_call2("StartSpreadSheet",1,1)        : ' essayer Excel
    if res%<0 then message "Excel n'est pas trouvé"
  end_if
  if checked(113)=1
    res% = dll_call2("StartSpreadSheet",2,1)      : ' essayer OpenCalc
    if res%<0 then message "OpenCalc n'est pas trouvé"
  end_if
end_sub

sub DisconnectFromExcel()
  dim_local res%
  res% = dll_call1("TerminateSpreadSheet",1)
end_sub

sub ExportGridToExcel()
  dim_local res%, x%, y%, s$
  res% = dll_call0("GetSpreadSheetType")
  if res%<1 then exit_sub
 
  ' 1ère alternative: export par fonction directe
  ' décalage de 3 cellules vers la droite et de 2 lignes vers le bas
  res% = dll_call4("ExportGridToSpreadSheet",object_internal(100),0,3,2)
  exit_sub

  ' 2ème alternative: export par boucle
  for y%=1 to nlin%
    for x%=1 to ncol%
      s$ = grid_read$(100,y%,x%)
      res% = dll_call4("WriteSpreadSheetCellByIndex",x%,y%,adr(s$),0)
    next x%
  next y%
 
end_sub

sub ImportGridFromExcel()
  dim_local res%, x%, y%, s$
  res% = dll_call0("GetSpreadSheetType")
  if res%<1 then exit_sub
  res% = dll_call4("ImportGridFromSpreadSheet",object_internal(100),0,3,2)
end_sub

sub Test_What()
  dim_local res%
  res% = dll_call0("GetSpreadSheetType")
  select res%
    case -1: message "aucun tableur n'est lancé"
    case  0: message "un tableur a été lancé, mais il n'est plus disponible"
    case  1: message "Excel est en cours..."
    case  2: message "OpenCalc est en cours..."
  end_select
end_sub

sub open()
  dim_local res%, f$
  filter 101,"Fichiers Excel|*.xls"
  f$ = file_name$(101)
  if f$="_" then exit_sub
  if lower$(right$(f$,4))<>".xls" then f$ = f$ + ".xls"
  res% = dll_call1("OpenSpreadSheet",adr(f$))
end_sub

sub SaveAs()
  dim_local res%, f$
  filter 102,"Fichiers Excel|*.xls"
  f$ = file_name$(102)
  if f$="_" then exit_sub
  if lower$(right$(f$,4))<>".xls" then f$ = f$ + ".xls"
  res% = dll_call1("SaveSpreadSheetAs",adr(f$))
end_sub

sub Save()
  dim_local res%
  res% = dll_call0("SaveSpreadSheet")
end_sub

sub Close()
  dim_local res%
  res% = dll_call0("CloseSpreadSheet")
end_sub

sub NewSheet()
  dim_local res%, nom$
  nom$ = message_input$("Nouvelle page","Nom de la page:","")
  if nom$="" then exit_sub
  res% = dll_call2("NewSpreadSheetPage",adr(nom$),1)
end_sub

sub  ActivateIndex()
  dim_local res%, n%, s$
  s$ = message_input$("Activer une page","Numéro de la page:","")
  if s$="" then exit_sub
  if numeric(s$)=0 then exit_sub
  n% = val(s$)
  res% = dll_call1("ActivateSpreadSheetPageByIndex",n%)
end_sub

sub  ActivateName()
  dim_local res%, n%, s$
  s$ = message_input$("Activer une page","Nom de la page:","")
  if s$="" then exit_sub
  res% = dll_call1("ActivateSpreadSheetPageByName",adr(s$))
end_sub

sub  RemoveIndex()
  dim_local res%, n%, s$
  s$ = message_input$("Supprimer une page","Numéro de la page:","")
  if s$="" then exit_sub
  if numeric(s$)=0 then exit_sub
  n% = val(s$)
  res% = dll_call1("RemoveSpreadSheetPageByIndex",n%)
end_sub

sub  RemoveName()
  dim_local res%, n%, s$
  s$ = message_input$("Supprimer une page","Nom de la page:","")
  if s$="" then exit_sub
  res% = dll_call1("RemoveSpreadSheetPageByName",adr(s$))
end_sub

sub  GetPageCount()
  dim_local res%
  res% = dll_call0("GetSpreadSheetPageCount")
  message "Le document a "+str$(res%)+" pages"
end_sub

sub  GetActiveIndex()
  dim_local res%
  res% = dll_call0("GetSpreadSheetActivePageNumber")
  message "La page active est la page numéro "+str$(res%)
end_sub

sub  GetActiveName()
  dim_local res%, nom$
  nom$ = string$(255," ")
  res% = dll_call1("GetSpreadSheetActivePageName",adr(nom$))
  message "La page actuelle s'appelle ["+trim$(nom$)+"]"
end_sub
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 25 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 25 EmptyJeu 2 Avr 2015 - 2:06

Pour info:
avec les fonctions de gestion Excel/OpenCalc, on peut:
- copier un document Excel dans un document OPenCalc et inverse
- garder deux objets GRID en Panoramic et gérer dans le premier les données d'un tableau Excel ou OpenCalc, et dans l'autre les formules. Avec bien sûr la possibilité de passer d'un tableur à l'autre.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

KGF_dll - nouvelles versions - Page 25 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 25 EmptyJeu 2 Avr 2015 - 7:51

Bravo Klaus. C'est vraiment puissant et pratique.
Revenir en haut Aller en bas
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 25 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 25 EmptyJeu 2 Avr 2015 - 14:20

Nouvelle version:
KGF.dll V4.63 du 02/04/2015

Nouveautés:
suite de la gestion Excel/OpenCalc avec dimensions des lignes/colonnes et couleurs de fond/police
et des tests de toutes les fonctions avec OpenCalc


Modules modifiés:
KGF.dll

La doc et les sources seront à jour prochainement.

On peut même importer/exporter séparément, maintenant, les données et les formules !

Doc provisoire de l'existant:
' ouvrir un tableur et se connecter à ce tableur
res% = dll_call2("StartSpreadSheet",quoi%,visible%)
' quoi%: 1=Excel 2=OPenCalc
visible%: 1=visible 0=non visible

' se déconnecter du tableur et le fermer
res% = dll_call1("TerminateSpreadSheet",%kill)
kill%: si OpenCale st si kill%=1, alors le process soffice.bin sera supprimé automatiquement

' tester quel tableur est actif
res% = dll_call0("GetSpreadSheetType")
res%: -1=rien 0=a été lancé, mais n'est plus disponible 1=Excel 2=OpenCalc

' écrire une cellule de la page active du document actif
res% = dll_call4("WriteSpreadSheetCellByIndex",x%,y%,adr(txt$),adr(frm$))
' x%=colonne y%=ligne txt$=données frm$=formule
si le 3ème et/ou le 4ème paramètre est passé comme 0, la modification de cette partie n'aura pas lieu

' exporter un GRID dans la page active directement
res% = dll_call4("ExportGridToSpreadSheet",object_internal(grid%),act%,deltax%,deltay%)
' grid%=numéro du GRID
' act%: 0=en tant que données 1=en tant que formules
' deltax%, deltay% = délacage horizontal/vertical en destination dans la page active

' lire une cellule de la page active du document actif
res% = dll_call4("ReadSpreadSheetCellByIndex",x%,y%,adr(txt$),adr(frm$))
' x%=colonne y%=ligne txt$=données frm$=formule
si le 3ème et/ou le 4ème paramètre est passé comme 0, la partie correspondante n'est pas lue

' importer un GRID de la page active directement
res% = dll_call4("ImportGridFromSpreadSheet",object_internal(grid%),act%,deltax%,deltay%)
' grid%=numéro du GRID
' act%: 0=en tant que données 1=en tant que formules
' deltax%, deltay% = délacage horizontal/vertical en source dans la page active

' ouvrir un document existant
res% = dll_call1("OpenSpreadSheet",adr(f$))
' f$ = chemin et nom vers le fichier existant

' enregistrer un document du tableur
res% = dll_call0("SaveSpreadSheet")
' note: il faut que ce document ait déjà un nom !

' enregistrer un document dans un autre fichier
res% = dll_call1("SaveSpreadSheetAs",adr(f$))
' f$ = chemin et nom vers le nouveau fichier

' fermer un document
res% = dll_call0("CloseSpreadSheet")

' insérer une nouvelle page
res% = dll_call2("NewSpreadSheetPage",adr(nom$),pos%)
' nom$=nom de la page
' pos%=position 0=après la page active 1=après la dernière page

' activer une page par son indice
res% = dll_call1("ActivateSpreadSheetPageByIndex",n%)
' n%=indice (1,2,...)

' activer une page par son nom
res% = dll_call1("ActivateSpreadSheetPageByName",adr(s$))
' s$=nom de la page recherchée

' supprimer une page par son indice
res% = dll_call1("RemoveSpreadSheetPageByIndex",n%)
' n%=indice (1,2,...)

' supprimer une page par son nom
res% = dll_call1("RemoveSpreadSheetPageByName",adr(s$))
' s$=nom de la page à supprimer

' retourner le nombre de pages du document
res% = dll_call0("GetSpreadSheetPageCount")

' retourner l'indice de la page active
res% = dll_call0("GetSpreadSheetActivePageNumber")

' retourner le nom de la page active
res% = dll_call1("GetSpreadSheetActivePageName",adr(nom$))
nom$ recevra le nom de la page active

' ajuster les dimensions d'une ligne et/ou d'une colonne
res% = dll_call4("SetSpreadSheetDimensions",l%,h%,c%,w%)
' si l%>0, la ligne l% sera mise à h% millimètres de hauteur
' si c%>0, la colonne c% sera mise à w% millimètres de largeur

' couleurs de fond et/ou de police d'une cellule
res% = dll_call6("SetSpreadSheetColors",c%,l%,DoBack%,bclr%,DoFont%,fclr%)
' si DoBack%=1 alors la couleur de fond de la cellule sera mise à bclr%
' si DoFont%=1 alors la couleur de police de la cellule sera mise à fclr%

Et voici le programme de démo avec toutes les fonctions:
(note: pour importer/exporter, un décalage de 3 colonnes est explicitement codé dans la démo !)
Les menus ont été réorganisés pour refléter la structure: Fichier(Document) - Pages - Options.
Toutes les fonctions ont été testées avec Excel et OpenCalc !
Pour tester les couleurs: les lignes "couleur" du menu Edition changent ces couleurs de façon aléatoire.
Code:
' GRID_et_EXCEL.bas


label connect, exit, editmode, export, import, disconnect
label open, save, saveas, close
label new_sheet, act_by_ind, act_by_name, del_by_ind, del_by_name
label col_width, line_height, back_color, pol_color
label test_what, page_count, ind_actif, name_act

dim nlin% : nlin% = 11
dim ncol% : ncol% = 8

dim res%, no%, no1%, no2%, editmode%

width 0,700

no% = no% + 1 : main_menu no% : no1% = no%
  no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Fichiers"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Connecter" : on_click no%,connect
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Déconnecter" : on_click no%,disconnect
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Sortir" : on_click no%,exit
  no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Document"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Ouvrir..." : on_click no%,open
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer" : on_click no%,save
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer sous..." : on_click no%,saveas
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Fermer" : on_click no%,close
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Exporter" : on_click no%,export
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Importer" : on_click no%,import
  no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Pages"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nouveau" : on_click no%,new_sheet
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Activer par indice" : on_click no%,act_by_ind
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Activer par nom" : on_click no%,act_by_name
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Supprimer par indice" : on_click no%,del_by_ind
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Supprimer par nom" : on_click no%,del_by_name
  no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Edition"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Largeur de colonne" : on_click no%,col_width
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Hauteur de ligne" : on_click no%,line_height
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Couleur de fond" : on_click no%,back_color
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Couleur de police" : on_click no%,pol_color
  no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Options"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Mode Edition" : on_click no%,editmode
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Test tableur" : on_click no%,test_what
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nombre de pages" : on_click no%,page_count
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Indice page active" : on_click no%,ind_actif
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nom page active" : on_click no%,name_act

grid 100 : top 100,10 : left 100,10 : width 100,525 : height 100,280
grid_column 100,ncol% : grid_row 100,nlin%

option 111 : top 111,320 : left 111,50 : caption 111,"Détection automatique" : width 111,130
option 112 : top 112,340 : left 112,50 : caption 112,"Excel"
option 113 : top 113,360 : left 113,50 : caption 113,"OpenCalc"

alpha 121 : top 121,320 : left 121,200 : caption 121,"Colonne:"
edit 122 : top 122,320 : left 122,250 : width 122,40
alpha 123 : top 123,320 : left 123,310 : caption 123,"Largeur:"
edit 124 : top 124,320 : left 124,360 : width 124,40

alpha 131 : top 131,350 : left 131,200 : caption 131,"Ligne:"
edit 132 : top 132,350 : left 132,250 : width 132,40
alpha 133 : top 133,350 : left 133,310 : caption 133,"Hauteur:"
edit 134 : top 134,350 : left 134,360 : width 134,40



open_dialog 101
save_dialog 102

dll_on "KGF.dll"

mark_on 111


end

exit:
  terminate
 
test_what:
  Test_What()
  return

connect:
  ConnectToExcel()
  return
 
disconnect:
  DisconnectFromExcel()
  return

open:
  open()
  return

saveas:
  SaveAs()
  return
 
save:
  Save()
  return
 
close:
  Close()
  return
 
new_sheet:
  NewSheet()
  return

act_by_ind:
  ActivateIndex()
  return
 
act_by_name:
  ActivateName()
  return

del_by_ind:
  RemoveIndex()
  return

del_by_name:
  RemoveName()
  return

page_count:
  GetPageCount()
  return

ind_actif:
  GetActiveIndex()
  return

name_act:
  GetActiveName()
  return
 
col_width:
  SetColWidth()
  return
 
line_height:
  SetLineHeight()
  return
 
back_color:
  BackColor()
  return
 
pol_color:
  FontColor()
  return



editmode:
  editmode% = 1 - editmode%
  if editmode%=0
    res% = DLL_call6("GridFunction",object_internal(100),1,0,0,0,0)
    mark_off number_click
  else
    res% = DLL_call6("GridFunction",object_internal(100),1,1,0,0,0)
    mark_on number_click
  end_if
  return
 
export:
  ExportGridToExcel()
  return
 
import:
  ImportGridFromExcel()
  return
 
 

sub ConnectToExcel()
  dim_local res%
  if checked(111)=1
    res% = dll_call2("StartSpreadSheet",1,1)        : ' essayer Excel
    if res%<0
      res% = dll_call2("StartSpreadSheet",2,1)      : ' essayer OpenCalc
      if res%<0 then message "Aucun tableur n'est trouvé"
    end_if
  end_if
  if checked(112)=1
    res% = dll_call2("StartSpreadSheet",1,1)        : ' essayer Excel
    if res%<0 then message "Excel n'est pas trouvé"
  end_if
  if checked(113)=1
    res% = dll_call2("StartSpreadSheet",2,1)      : ' essayer OpenCalc
    if res%<0 then message "OpenCalc n'est pas trouvé"
  end_if
end_sub

sub DisconnectFromExcel()
  dim_local res%
  res% = dll_call1("TerminateSpreadSheet",1)
end_sub

sub ExportGridToExcel()
  dim_local res%, x%, y%, s$
  res% = dll_call0("GetSpreadSheetType")
  if res%<1 then exit_sub
 
  ' 1ère alternative: export par fonction directe
  ' décalage de 3 cellules vers la droite et de 2 lignes vers le bas
'  res% = dll_call4("ExportGridToSpreadSheet",object_internal(100),0,3,2)
  ' sans décalage:
  res% = dll_call4("ExportGridToSpreadSheet",object_internal(100),0,0,0)
  exit_sub

  ' 2ème alternative: export par boucle
  for y%=1 to nlin%
    for x%=1 to ncol%
      s$ = grid_read$(100,y%,x%)
      res% = dll_call4("WriteSpreadSheetCellByIndex",x%,y%,adr(s$),0)
    next x%
  next y%
 
end_sub

sub ImportGridFromExcel()
  dim_local res%, x%, y%, s$
  res% = dll_call0("GetSpreadSheetType")
  if res%<1 then exit_sub
  res% = dll_call4("ImportGridFromSpreadSheet",object_internal(100),0,3,2)
end_sub

sub Test_What()
  dim_local res%
  res% = dll_call0("GetSpreadSheetType")
  select res%
    case -1: message "aucun tableur n'est lancé"
    case  0: message "un tableur a été lancé, mais il n'est plus disponible"
    case  1: message "Excel est en cours..."
    case  2: message "OpenCalc est en cours..."
  end_select
end_sub

sub open()
  dim_local res%, f$
  filter 101,"Fichiers Excel|*.xls"
  f$ = file_name$(101)
  if f$="_" then exit_sub
  if lower$(right$(f$,4))<>".xls" then f$ = f$ + ".xls"
  res% = dll_call1("OpenSpreadSheet",adr(f$))
end_sub

sub SaveAs()
  dim_local res%, f$
  filter 102,"Fichiers Excel|*.xls"
  f$ = file_name$(102)
  if f$="_" then exit_sub
  if lower$(right$(f$,4))<>".xls" then f$ = f$ + ".xls"
  res% = dll_call1("SaveSpreadSheetAs",adr(f$))
end_sub

sub Save()
  dim_local res%
  res% = dll_call0("SaveSpreadSheet")
end_sub

sub Close()
  dim_local res%
  res% = dll_call0("CloseSpreadSheet")
end_sub

sub NewSheet()
  dim_local res%, nom$
  nom$ = message_input$("Nouvelle page","Nom de la page:","")
  if nom$="" then exit_sub
  res% = dll_call2("NewSpreadSheetPage",adr(nom$),1)
end_sub

sub  ActivateIndex()
  dim_local res%, n%, s$
  s$ = message_input$("Activer une page","Numéro de la page:","")
  if s$="" then exit_sub
  if numeric(s$)=0 then exit_sub
  n% = val(s$)
  res% = dll_call1("ActivateSpreadSheetPageByIndex",n%)
end_sub

sub  ActivateName()
  dim_local res%, n%, s$
  s$ = message_input$("Activer une page","Nom de la page:","")
  if s$="" then exit_sub
  res% = dll_call1("ActivateSpreadSheetPageByName",adr(s$))
end_sub

sub  RemoveIndex()
  dim_local res%, n%, s$
  s$ = message_input$("Supprimer une page","Numéro de la page:","")
  if s$="" then exit_sub
  if numeric(s$)=0 then exit_sub
  n% = val(s$)
  res% = dll_call1("RemoveSpreadSheetPageByIndex",n%)
end_sub

sub  RemoveName()
  dim_local res%, n%, s$
  s$ = message_input$("Supprimer une page","Nom de la page:","")
  if s$="" then exit_sub
  res% = dll_call1("RemoveSpreadSheetPageByName",adr(s$))
end_sub

sub  GetPageCount()
  dim_local res%
  res% = dll_call0("GetSpreadSheetPageCount")
  message "Le document a "+str$(res%)+" pages"
end_sub

sub  GetActiveIndex()
  dim_local res%
  res% = dll_call0("GetSpreadSheetActivePageNumber")
  message "La page active est la page numéro "+str$(res%)
end_sub

sub  GetActiveName()
  dim_local res%, nom$
  nom$ = string$(255," ")
  res% = dll_call1("GetSpreadSheetActivePageName",adr(nom$))
  message "La page actuelle s'appelle ["+trim$(nom$)+"]"
end_sub

sub SetColWidth()
  dim_local res%, s$, c%, w%
  s$ = trim$(text$(122))
  if len(s$)=0 then exit_sub
  if numeric(s$)=0 then exit_sub
  c% = val(s$)
  s$ = trim$(text$(124))
  if len(s$)=0 then exit_sub
  if numeric(s$)=0 then exit_sub
  w% = val(s$)*100
  res% = dll_call4("SetSpreadSheetDimensions",0,0,c%,w%)
end_sub

sub SetLineHeight()
  dim_local res%, s$, l%, h%
  s$ = trim$(text$(132))
  if len(s$)=0 then exit_sub
  if numeric(s$)=0 then exit_sub
  l% = val(s$)
  s$ = trim$(text$(134))
  if len(s$)=0 then exit_sub
  if numeric(s$)=0 then exit_sub
  h% = val(s$)*100
  res% = dll_call4("SetSpreadSheetDimensions",l%,h%,0,0)
end_sub

sub BackColor()
  dim_local res%, l%, c%, clr%, s$
  s$ = trim$(text$(132))
  if len(s$)=0 then exit_sub
  if numeric(s$)=0 then exit_sub
  l% = val(s$)
  s$ = trim$(text$(122))
  if len(s$)=0 then exit_sub
  if numeric(s$)=0 then exit_sub
  c% = val(s$)
  clr% = (rnd(255)*256+rnd(255))*255+rnd(255)
  res% = dll_call6("SetSpreadSheetColors",c%,l%,1,clr%,0,0)
end_sub

sub FontColor()
  dim_local res%, l%, c%, clr%, s$
  s$ = trim$(text$(132))
  if len(s$)=0 then exit_sub
  if numeric(s$)=0 then exit_sub
  l% = val(s$)
  s$ = trim$(text$(122))
  if len(s$)=0 then exit_sub
  if numeric(s$)=0 then exit_sub
  c% = val(s$)
  clr% = (rnd(255)*256+rnd(255))*255+rnd(255)
  res% = dll_call6("SetSpreadSheetColors",c%,l%,0,0,1,clr%)
end_sub
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 25 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 25 EmptyJeu 2 Avr 2015 - 16:53

Nouvelle version:
KGF.dll V4.64 du 02/04/2015

Nouveautés:
suite de la gestion Excel/OpenCalc avec nom et taille de police et les attributs graphiques
et des tests de toutes les fonctions avec OpenCalc


Modules modifiés:
KGF.dll

La doc et les sources seront à jour prochainement.

On peut même importer/exporter séparément, maintenant, les données et les formules !

Doc provisoire de l'existant:
' ouvrir un tableur et se connecter à ce tableur
res% = dll_call2("StartSpreadSheet",quoi%,visible%)
' quoi%: 1=Excel  2=OPenCalc
visible%: 1=visible  0=non visible

' se déconnecter du tableur et le fermer
res% = dll_call1("TerminateSpreadSheet",%kill)
kill%: si OpenCale st si kill%=1, alors le process soffice.bin sera supprimé automatiquement

' tester quel tableur est actif
res% = dll_call0("GetSpreadSheetType")
res%: -1=rien  0=a été lancé, mais n'est plus disponible  1=Excel  2=OpenCalc

' écrire une cellule de la page active du document actif
res% = dll_call4("WriteSpreadSheetCellByIndex",x%,y%,adr(txt$),adr(frm$))
' x%=colonne  y%=ligne  txt$=données  frm$=formule
si le 3ème et/ou le 4ème paramètre est passé comme 0, la modification de cette partie n'aura pas lieu

' exporter un GRID dans la page active directement
res% = dll_call4("ExportGridToSpreadSheet",object_internal(grid%),act%,deltax%,deltay%)
' grid%=numéro du GRID
' act%: 0=en tant que données 1=en tant que formules
' deltax%, deltay% = délacage horizontal/vertical en destination dans la page active

' lire une cellule de la page active du document actif
res% = dll_call4("ReadSpreadSheetCellByIndex",x%,y%,adr(txt$),adr(frm$))
' x%=colonne  y%=ligne  txt$=données  frm$=formule
si le 3ème et/ou le 4ème paramètre est passé comme 0, la partie correspondante n'est pas lue

' importer un GRID de la page active directement
res% = dll_call4("ImportGridFromSpreadSheet",object_internal(grid%),act%,deltax%,deltay%)
' grid%=numéro du GRID
' act%: 0=en tant que données 1=en tant que formules
' deltax%, deltay% = délacage horizontal/vertical en source dans la page active

' ouvrir un document existant
res% = dll_call1("OpenSpreadSheet",adr(f$))
' f$ = chemin et nom vers le fichier existant

' enregistrer un document du tableur
res% = dll_call0("SaveSpreadSheet")
' note: il faut que ce document ait déjà un nom !

' enregistrer un document dans un autre fichier
res% = dll_call1("SaveSpreadSheetAs",adr(f$))
' f$ = chemin et nom vers le nouveau fichier

' fermer un document
res% = dll_call0("CloseSpreadSheet")

' insérer une nouvelle page
res% = dll_call2("NewSpreadSheetPage",adr(nom$),pos%)
' nom$=nom de la page  
' pos%=position   0=après la page active  1=après la dernière page

' activer une page par son indice
res% = dll_call1("ActivateSpreadSheetPageByIndex",n%)
' n%=indice  (1,2,...)

' activer une page par son nom
res% = dll_call1("ActivateSpreadSheetPageByName",adr(s$))
' s$=nom de la page recherchée

' supprimer une page par son indice
res% = dll_call1("RemoveSpreadSheetPageByIndex",n%)
' n%=indice  (1,2,...)

' supprimer une page par son nom
res% = dll_call1("RemoveSpreadSheetPageByName",adr(s$))
' s$=nom de la page à supprimer

' retourner le nombre de pages du document
res% = dll_call0("GetSpreadSheetPageCount")

' retourner l'indice de la page active
res% = dll_call0("GetSpreadSheetActivePageNumber")

' retourner le nom de la page active
res% = dll_call1("GetSpreadSheetActivePageName",adr(nom$))
nom$ recevra le nom de la page active

' ajuster les dimensions d'une ligne et/ou d'une colonne
res% = dll_call4("SetSpreadSheetDimensions",l%,h%,c%,w%)
' si l%>0, la ligne l% sera mise à h% millimètres de hauteur
' si c%>0, la colonne c% sera mise à w% millimètres de largeur

' couleurs de fond et/ou de police d'une cellule
res% = dll_call6("SetSpreadSheetColors",c%,l%,DoBack%,bclr%,DoFont%,fclr%)
' si DoBack%=1 alors la couleur de fond de la cellule sera mise à bclr%
' si DoFont%=1 alors la couleur de police de la cellule sera mise à fclr%

' nom et/ou taille de la police
res% = dll_call4("SetSpreadSheetFont",c%,l%,adr(font$),siz%)
' si adr(font$) est passé comme 0, la police n'est pas changée
' siz%=nouvelle taille de la police si siz%>0

' atributs graphiques des caractères
res% = dll_call6("SetSpreadSheetAtributes",c%,l%,gras%,italique%,souligne%,barre%)
' les attributs sont passée en 0 ou 1

Et voici le programme de démo avec toutes les fonctions:
(note: pour importer/exporter, un décalage de 3 colonnes est explicitement codé dans la démo !)
Les menus ont été réorganisés pour refléter la structure: Fichier(Document) - Pages - Options.
Toutes les fonctions ont été testées avec Excel et OpenCalc !
Pour tester les couleurs: les lignes "couleur" du menu Edition changent ces couleurs de façon aléatoire.
Code:
' GRID_et_EXCEL.bas


label connect, exit, editmode, export, import, disconnect
label open, save, saveas, close
label new_sheet, act_by_ind, act_by_name, del_by_ind, del_by_name
label col_width, line_height, back_color, pol_color, pol_size, pol_name, pol_att
label test_what, page_count, ind_actif, name_act

dim nlin% : nlin% = 11
dim ncol% : ncol% = 8

dim res%, no%, no1%, no2%, editmode%

width 0,700

no% = no% + 1 : main_menu no% : no1% = no%
  no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Fichiers"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Connecter" : on_click no%,connect
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Déconnecter" : on_click no%,disconnect
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Sortir" : on_click no%,exit
  no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Document"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Ouvrir..." : on_click no%,open
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer" : on_click no%,save
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer sous..." : on_click no%,saveas
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Fermer" : on_click no%,close
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Exporter" : on_click no%,export
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Importer" : on_click no%,import
  no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Pages"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nouveau" : on_click no%,new_sheet
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Activer par indice" : on_click no%,act_by_ind
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Activer par nom" : on_click no%,act_by_name
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Supprimer par indice" : on_click no%,del_by_ind
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Supprimer par nom" : on_click no%,del_by_name
  no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Edition"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Largeur de colonne" : on_click no%,col_width
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Hauteur de ligne" : on_click no%,line_height
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Couleur de fond" : on_click no%,back_color
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Couleur de police" : on_click no%,pol_color
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Taille de police" : on_click no%,pol_size
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nom de police" : on_click no%,pol_name
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Attributs de police" : on_click no%,pol_att
  no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Options"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Mode Edition" : on_click no%,editmode
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Test tableur" : on_click no%,test_what
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nombre de pages" : on_click no%,page_count
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Indice page active" : on_click no%,ind_actif
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nom page active" : on_click no%,name_act

grid 100 : top 100,10 : left 100,10 : width 100,525 : height 100,280
grid_column 100,ncol% : grid_row 100,nlin%

option 111 : top 111,320 : left 111,50 : caption 111,"Détection automatique" : width 111,130
option 112 : top 112,340 : left 112,50 : caption 112,"Excel"
option 113 : top 113,360 : left 113,50 : caption 113,"OpenCalc"

alpha 121 : top 121,320 : left 121,200 : caption 121,"Colonne:"
edit 122 : top 122,320 : left 122,250 : width 122,40
alpha 123 : top 123,320 : left 123,310 : caption 123,"Largeur:"
edit 124 : top 124,320 : left 124,360 : width 124,40

alpha 131 : top 131,350 : left 131,200 : caption 131,"Ligne:"
edit 132 : top 132,350 : left 132,250 : width 132,40
alpha 133 : top 133,350 : left 133,310 : caption 133,"Hauteur:"
edit 134 : top 134,350 : left 134,360 : width 134,40

alpha 141 : top 141,320 : left 141,420 : caption 141,"Police:"
combo 142 : top 142,320 : left 142,470 : width 142,40
  item_add 142,8
  item_add 142,10
  item_add 142,12
  item_add 142,14
  item_add 142,16
  text 142,10
  
combo 143 : top 143,350 : left 143,470 : width 143,130
  font_names_load 143
  text 143,"Arial"

check 151 : top 151,380 : left 151,470 : width 151,40 : caption 151,"B" : font_bold 151
check 152 : top 152,380 : left 152,510 : width 152,40 : caption 152,"It" : font_italic 152
check 153 : top 153,380 : left 153,550 : width 153,40 : caption 153,"U" : font_underline 153
check 154 : top 154,380 : left 154,590 : width 154,40 : caption 154,"S" : font_strike 154

open_dialog 101
save_dialog 102

dll_on "KGF.dll"

mark_on 111


end

exit:
  terminate
  
test_what:
  Test_What()
  return

connect:
  ConnectToExcel()
  return
  
disconnect:
  DisconnectFromExcel()
  return

open:
  open()
  return

saveas:
  SaveAs()
  return
  
save:
  Save()
  return
  
close:
  Close()
  return
  
new_sheet:
  NewSheet()
  return

act_by_ind:
  ActivateIndex()
  return
  
act_by_name:
  ActivateName()
  return

del_by_ind:
  RemoveIndex()
  return

del_by_name:
  RemoveName()
  return

page_count:
  GetPageCount()
  return

ind_actif:
  GetActiveIndex()
  return

name_act:
  GetActiveName()
  return
  
col_width:
  SetColWidth()
  return
  
line_height:
  SetLineHeight()
  return
  
back_color:
  BackColor()
  return
  
pol_color:
  FontColor()
  return

pol_size:
  FontSize()
  return

pol_name:
  FontName()
  return

pol_att:
  FontAttributes()
  return




editmode:
  editmode% = 1 - editmode%
  if editmode%=0
    res% = DLL_call6("GridFunction",object_internal(100),1,0,0,0,0)
    mark_off number_click
  else
    res% = DLL_call6("GridFunction",object_internal(100),1,1,0,0,0)
    mark_on number_click
  end_if
  return
  
export:
  ExportGridToExcel()
  return
  
import:
  ImportGridFromExcel()
  return
  
  

sub ConnectToExcel()
  dim_local res%
  if checked(111)=1
    res% = dll_call2("StartSpreadSheet",1,1)        : ' essayer Excel
    if res%<0
      res% = dll_call2("StartSpreadSheet",2,1)      : ' essayer OpenCalc
      if res%<0 then message "Aucun tableur n'est trouvé"
    end_if
  end_if
  if checked(112)=1
    res% = dll_call2("StartSpreadSheet",1,1)        : ' essayer Excel
    if res%<0 then message "Excel n'est pas trouvé"
  end_if
  if checked(113)=1
    res% = dll_call2("StartSpreadSheet",2,1)      : ' essayer OpenCalc
    if res%<0 then message "OpenCalc n'est pas trouvé"
  end_if
end_sub

sub DisconnectFromExcel()
  dim_local res%
  res% = dll_call1("TerminateSpreadSheet",1)
end_sub

sub ExportGridToExcel()
  dim_local res%, x%, y%, s$
  res% = dll_call0("GetSpreadSheetType")
  if res%<1 then exit_sub
  
  ' 1ère alternative: export par fonction directe
  ' décalage de 3 cellules vers la droite et de 2 lignes vers le bas
'  res% = dll_call4("ExportGridToSpreadSheet",object_internal(100),0,3,2)
  ' sans décalage:
  res% = dll_call4("ExportGridToSpreadSheet",object_internal(100),0,0,0)
  exit_sub

  ' 2ème alternative: export par boucle
  for y%=1 to nlin%
    for x%=1 to ncol%
      s$ = grid_read$(100,y%,x%)
      res% = dll_call4("WriteSpreadSheetCellByIndex",x%,y%,adr(s$),0)
    next x%
  next y%
  
end_sub

sub ImportGridFromExcel()
  dim_local res%, x%, y%, s$
  res% = dll_call0("GetSpreadSheetType")
  if res%<1 then exit_sub
  res% = dll_call4("ImportGridFromSpreadSheet",object_internal(100),0,3,2)
end_sub

sub Test_What()
  dim_local res%
  res% = dll_call0("GetSpreadSheetType")
  select res%
    case -1: message "aucun tableur n'est lancé"
    case  0: message "un tableur a été lancé, mais il n'est plus disponible"
    case  1: message "Excel est en cours..."
    case  2: message "OpenCalc est en cours..."
  end_select
end_sub

sub open()
  dim_local res%, f$
  filter 101,"Fichiers Excel|*.xls"
  f$ = file_name$(101)
  if f$="_" then exit_sub
  if lower$(right$(f$,4))<>".xls" then f$ = f$ + ".xls"
  res% = dll_call1("OpenSpreadSheet",adr(f$))
end_sub

sub SaveAs()
  dim_local res%, f$
  filter 102,"Fichiers Excel|*.xls"
  f$ = file_name$(102)
  if f$="_" then exit_sub
  if lower$(right$(f$,4))<>".xls" then f$ = f$ + ".xls"
  res% = dll_call1("SaveSpreadSheetAs",adr(f$))
end_sub

sub Save()
  dim_local res%
  res% = dll_call0("SaveSpreadSheet")
end_sub

sub Close()
  dim_local res%
  res% = dll_call0("CloseSpreadSheet")
end_sub

sub NewSheet()
  dim_local res%, nom$
  nom$ = message_input$("Nouvelle page","Nom de la page:","")
  if nom$="" then exit_sub
  res% = dll_call2("NewSpreadSheetPage",adr(nom$),1)
end_sub

sub  ActivateIndex()
  dim_local res%, n%, s$
  s$ = message_input$("Activer une page","Numéro de la page:","")
  if s$="" then exit_sub
  if numeric(s$)=0 then exit_sub
  n% = val(s$)
  res% = dll_call1("ActivateSpreadSheetPageByIndex",n%)
end_sub

sub  ActivateName()
  dim_local res%, n%, s$
  s$ = message_input$("Activer une page","Nom de la page:","")
  if s$="" then exit_sub
  res% = dll_call1("ActivateSpreadSheetPageByName",adr(s$))
end_sub

sub  RemoveIndex()
  dim_local res%, n%, s$
  s$ = message_input$("Supprimer une page","Numéro de la page:","")
  if s$="" then exit_sub
  if numeric(s$)=0 then exit_sub
  n% = val(s$)
  res% = dll_call1("RemoveSpreadSheetPageByIndex",n%)
end_sub

sub  RemoveName()
  dim_local res%, n%, s$
  s$ = message_input$("Supprimer une page","Nom de la page:","")
  if s$="" then exit_sub
  res% = dll_call1("RemoveSpreadSheetPageByName",adr(s$))
end_sub

sub  GetPageCount()
  dim_local res%
  res% = dll_call0("GetSpreadSheetPageCount")
  message "Le document a "+str$(res%)+" pages"
end_sub

sub  GetActiveIndex()
  dim_local res%
  res% = dll_call0("GetSpreadSheetActivePageNumber")
  message "La page active est la page numéro "+str$(res%)
end_sub

sub  GetActiveName()
  dim_local res%, nom$
  nom$ = string$(255," ")
  res% = dll_call1("GetSpreadSheetActivePageName",adr(nom$))
  message "La page actuelle s'appelle ["+trim$(nom$)+"]"
end_sub

sub SetColWidth()
  dim_local res%, s$, c%, w%
  s$ = trim$(text$(122))
  if len(s$)=0 then exit_sub
  if numeric(s$)=0 then exit_sub
  c% = val(s$)
  s$ = trim$(text$(124))
  if len(s$)=0 then exit_sub
  if numeric(s$)=0 then exit_sub
  w% = val(s$)*100
  res% = dll_call4("SetSpreadSheetDimensions",0,0,c%,w%)
end_sub

sub SetLineHeight()
  dim_local res%, s$, l%, h%
  s$ = trim$(text$(132))
  if len(s$)=0 then exit_sub
  if numeric(s$)=0 then exit_sub
  l% = val(s$)
  s$ = trim$(text$(134))
  if len(s$)=0 then exit_sub
  if numeric(s$)=0 then exit_sub
  h% = val(s$)*100
  res% = dll_call4("SetSpreadSheetDimensions",l%,h%,0,0)
end_sub

sub BackColor()
  dim_local res%, l%, c%, clr%, s$
  s$ = trim$(text$(132))
  if len(s$)=0 then exit_sub
  if numeric(s$)=0 then exit_sub
  l% = val(s$)
  s$ = trim$(text$(122))
  if len(s$)=0 then exit_sub
  if numeric(s$)=0 then exit_sub
  c% = val(s$)
  clr% = (rnd(255)*256+rnd(255))*255+rnd(255)
  res% = dll_call6("SetSpreadSheetColors",c%,l%,1,clr%,0,0)
end_sub

sub FontColor()
  dim_local res%, l%, c%, clr%, s$
  s$ = trim$(text$(132))
  if len(s$)=0 then exit_sub
  if numeric(s$)=0 then exit_sub
  l% = val(s$)
  s$ = trim$(text$(122))
  if len(s$)=0 then exit_sub
  if numeric(s$)=0 then exit_sub
  c% = val(s$)
  clr% = (rnd(255)*256+rnd(255))*255+rnd(255)
  res% = dll_call6("SetSpreadSheetColors",c%,l%,0,0,1,clr%)
end_sub

sub FontSize()
  dim_local res%, l%, c%, siz%, s$
  s$ = trim$(text$(132))
  if len(s$)=0 then exit_sub
  if numeric(s$)=0 then exit_sub
  l% = val(s$)
  s$ = trim$(text$(122))
  if len(s$)=0 then exit_sub
  if numeric(s$)=0 then exit_sub
  c% = val(s$)
  siz% = val(text$(142))
  res% = dll_call4("SetSpreadSheetFont",c%,l%,0,siz%)
end_sub

sub FontName()
  dim_local res%, l%, c%, nam$, s$
  s$ = trim$(text$(132))
  if len(s$)=0 then exit_sub
  if numeric(s$)=0 then exit_sub
  l% = val(s$)
  s$ = trim$(text$(122))
  if len(s$)=0 then exit_sub
  if numeric(s$)=0 then exit_sub
  c% = val(s$)
  nam$ = text$(143)
  res% = dll_call4("SetSpreadSheetFont",c%,l%,adr(nam$),0)
end_sub

sub FontAttributes()
  dim_local res%, l%, c%, nam$, s$
  s$ = trim$(text$(132))
  if len(s$)=0 then exit_sub
  if numeric(s$)=0 then exit_sub
  l% = val(s$)
  s$ = trim$(text$(122))
  if len(s$)=0 then exit_sub
  if numeric(s$)=0 then exit_sub
  c% = val(s$)
  nam$ = text$(143)
  res% = dll_call6("SetSpreadSheetAtributes",c%,l%,checked(151),checked(152),checked(153),checked(154))
end_sub
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 25 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 25 EmptyVen 3 Avr 2015 - 13:49

Nouvelle version:
KGF.dll V4.65 du 03/04/2015

Nouveautés:
suite de la gestion Excel/OpenCalc avec bordures des cellules et leurs couleurs
et des tests de toutes les fonctions avec OpenCalc


Modules modifiés:
KGF.dll

La doc et les sources seront à jour prochainement.

On peut même importer/exporter séparément, maintenant, les données et les formules !

Doc provisoire de l'existant:
' ouvrir un tableur et se connecter à ce tableur
res% = dll_call2("StartSpreadSheet",quoi%,visible%)
' quoi%: 1=Excel 2=OPenCalc
visible%: 1=visible 0=non visible

' se déconnecter du tableur et le fermer
res% = dll_call1("TerminateSpreadSheet",%kill)
kill%: si OpenCale st si kill%=1, alors le process soffice.bin sera supprimé automatiquement

' tester quel tableur est actif
res% = dll_call0("GetSpreadSheetType")
res%: -1=rien 0=a été lancé, mais n'est plus disponible 1=Excel 2=OpenCalc

' écrire une cellule de la page active du document actif
res% = dll_call4("WriteSpreadSheetCellByIndex",x%,y%,adr(txt$),adr(frm$))
' x%=colonne y%=ligne txt$=données frm$=formule
si le 3ème et/ou le 4ème paramètre est passé comme 0, la modification de cette partie n'aura pas lieu

' exporter un GRID dans la page active directement
res% = dll_call4("ExportGridToSpreadSheet",object_internal(grid%),act%,deltax%,deltay%)
' grid%=numéro du GRID
' act%: 0=en tant que données 1=en tant que formules
' deltax%, deltay% = délacage horizontal/vertical en destination dans la page active

' lire une cellule de la page active du document actif
res% = dll_call4("ReadSpreadSheetCellByIndex",x%,y%,adr(txt$),adr(frm$))
' x%=colonne y%=ligne txt$=données frm$=formule
si le 3ème et/ou le 4ème paramètre est passé comme 0, la partie correspondante n'est pas lue

' importer un GRID de la page active directement
res% = dll_call4("ImportGridFromSpreadSheet",object_internal(grid%),act%,deltax%,deltay%)
' grid%=numéro du GRID
' act%: 0=en tant que données 1=en tant que formules
' deltax%, deltay% = délacage horizontal/vertical en source dans la page active

' ouvrir un document existant
res% = dll_call1("OpenSpreadSheet",adr(f$))
' f$ = chemin et nom vers le fichier existant

' enregistrer un document du tableur
res% = dll_call0("SaveSpreadSheet")
' note: il faut que ce document ait déjà un nom !

' enregistrer un document dans un autre fichier
res% = dll_call1("SaveSpreadSheetAs",adr(f$))
' f$ = chemin et nom vers le nouveau fichier

' fermer un document
res% = dll_call0("CloseSpreadSheet")

' insérer une nouvelle page
res% = dll_call2("NewSpreadSheetPage",adr(nom$),pos%)
' nom$=nom de la page
' pos%=position 0=après la page active 1=après la dernière page

' activer une page par son indice
res% = dll_call1("ActivateSpreadSheetPageByIndex",n%)
' n%=indice (1,2,...)

' activer une page par son nom
res% = dll_call1("ActivateSpreadSheetPageByName",adr(s$))
' s$=nom de la page recherchée

' supprimer une page par son indice
res% = dll_call1("RemoveSpreadSheetPageByIndex",n%)
' n%=indice (1,2,...)

' supprimer une page par son nom
res% = dll_call1("RemoveSpreadSheetPageByName",adr(s$))
' s$=nom de la page à supprimer

' retourner le nombre de pages du document
res% = dll_call0("GetSpreadSheetPageCount")

' retourner l'indice de la page active
res% = dll_call0("GetSpreadSheetActivePageNumber")

' retourner le nom de la page active
res% = dll_call1("GetSpreadSheetActivePageName",adr(nom$))
nom$ recevra le nom de la page active

' ajuster les dimensions d'une ligne et/ou d'une colonne
res% = dll_call4("SetSpreadSheetDimensions",l%,h%,c%,w%)
' si l%>0, la ligne l% sera mise à h% millimètres de hauteur
' si c%>0, la colonne c% sera mise à w% millimètres de largeur

' couleurs de fond et/ou de police d'une cellule
res% = dll_call6("SetSpreadSheetColors",c%,l%,DoBack%,bclr%,DoFont%,fclr%)
' si DoBack%=1 alors la couleur de fond de la cellule sera mise à bclr%
' si DoFont%=1 alors la couleur de police de la cellule sera mise à fclr%

' nom et/ou taille de la police
res% = dll_call4("SetSpreadSheetFont",c%,l%,adr(font$),siz%)
' si siz%=0 la taille ne sera pas changée
' si adr(font$) est passée comme 0, la police ne sera pas changée

' atributs graphiques des caractères
res% = dll_call6("SetSpreadSheetAtributes",c%,l%,gras%,italique%,souligne%,barre%)
' les attributs sont passée en 0 ou 1

' bordures autour des cellules
res% = dll_call5("SetSpreadSheetBorders",c%,l%,typ%,style%,clr%)
' typ%: type de bordure: 0=aucune 1=toutes 2=bas 3=haut 4=gauche 5=droite 6=oblique en bas 7=oblique en haut
' style%: style de ligne: 0=Aucun 1=Trait 2=Tirets 3=Points 4=Tiret point
' 5=Tiret point point 6=Moyen tiret slash point 7=Trait 8=Tirets 9=Double

Et voici le programme de démo avec toutes les fonctions:
(note: pour importer/exporter, un décalage de 3 colonnes est explicitement codé dans la démo !)
Les menus ont été réorganisés pour refléter la structure: Fichier(Document) - Pages - Options.
Toutes les fonctions ont été testées avec Excel et OpenCalc !
Pour tester les couleurs: les lignes "couleur" du menu Edition changent ces couleurs de façon aléatoire.
Pour tester les bordures: connecter sur Excel ou OpenCalc, cocher les cases des bordures souhaitées,
choisir une ligne et colonne hors colonnes 9 à 12, puis utiliser le menu Edition\Bordures.
Code:
' GRID_et_EXCEL.bas


label connect, exit, editmode, export, import, disconnect
label open, save, saveas, close
label new_sheet, act_by_ind, act_by_name, del_by_ind, del_by_name
label col_width, line_height, back_color, pol_color, pol_size, pol_name
label pol_att, borders
label test_what, page_count, ind_actif, name_act

dim nlin% : nlin% = 11
dim ncol% : ncol% = 8

dim res%, no%, no1%, no2%, editmode%

width 0,750

no% = no% + 1 : main_menu no% : no1% = no%
  no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Fichiers"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Connecter" : on_click no%,connect
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Déconnecter" : on_click no%,disconnect
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Sortir" : on_click no%,exit
  no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Document"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Ouvrir..." : on_click no%,open
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer" : on_click no%,save
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer sous..." : on_click no%,saveas
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Fermer" : on_click no%,close
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Exporter" : on_click no%,export
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Importer" : on_click no%,import
  no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Pages"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nouveau" : on_click no%,new_sheet
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Activer par indice" : on_click no%,act_by_ind
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Activer par nom" : on_click no%,act_by_name
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Supprimer par indice" : on_click no%,del_by_ind
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Supprimer par nom" : on_click no%,del_by_name
  no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Edition"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Largeur de colonne" : on_click no%,col_width
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Hauteur de ligne" : on_click no%,line_height
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Couleur de fond" : on_click no%,back_color
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Couleur de police" : on_click no%,pol_color
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Taille de police" : on_click no%,pol_size
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nom de police" : on_click no%,pol_name
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Attributs de police" : on_click no%,pol_att
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Bordures" : on_click no%,borders
  no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Options"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Mode Edition" : on_click no%,editmode
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Test tableur" : on_click no%,test_what
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nombre de pages" : on_click no%,page_count
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Indice page active" : on_click no%,ind_actif
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nom page active" : on_click no%,name_act

grid 100 : top 100,10 : left 100,10 : width 100,525 : height 100,280
grid_column 100,ncol% : grid_row 100,nlin%

option 111 : top 111,320 : left 111,50 : caption 111,"Détection automatique" : width 111,130
option 112 : top 112,340 : left 112,50 : caption 112,"Excel"
option 113 : top 113,360 : left 113,50 : caption 113,"OpenCalc"

alpha 121 : top 121,320 : left 121,200 : caption 121,"Colonne:"
edit 122 : top 122,320 : left 122,250 : width 122,40
alpha 123 : top 123,320 : left 123,310 : caption 123,"Largeur:"
edit 124 : top 124,320 : left 124,360 : width 124,40

alpha 131 : top 131,350 : left 131,200 : caption 131,"Ligne:"
edit 132 : top 132,350 : left 132,250 : width 132,40
alpha 133 : top 133,350 : left 133,310 : caption 133,"Hauteur:"
edit 134 : top 134,350 : left 134,360 : width 134,40

alpha 141 : top 141,320 : left 141,420 : caption 141,"Police:"
combo 142 : top 142,320 : left 142,470 : width 142,40
  item_add 142,8
  item_add 142,10
  item_add 142,12
  item_add 142,14
  item_add 142,16
  text 142,10
 
combo 143 : top 143,350 : left 143,470 : width 143,130
  font_names_load 143
  text 143,"Arial"

check 151 : top 151,380 : left 151,470 : width 151,40 : caption 151,"B" : font_bold 151
check 152 : top 152,380 : left 152,510 : width 152,40 : caption 152,"It" : font_italic 152
check 153 : top 153,380 : left 153,550 : width 153,40 : caption 153,"U" : font_underline 153
check 154 : top 154,380 : left 154,590 : width 154,40 : caption 154,"S" : font_strike 154

alpha 161 : top 161,10 : left 161,550 : caption 161,"Bords:"
check 162 : top 162,30 : left 162,590 : caption 162,"Haut"
check 163 : top 163,60 : left 163,550 : caption 163,"Gauche"
check 164 : top 164,60 : left 164,630 : caption 164,"Droite"
check 165 : top 165,90 : left 165,590 : caption 165,"Bas"
check 166 : top 166,120 : left 166,550 : caption 166,"Diag \"
check 167 : top 167,120 : left 167,630 : caption 167,"Diag /"
combo 168 : top 168,150 : left 168,550
  item_add 168,"0 = Aucun"
  item_add 168,"1 = Trait"
  item_add 168,"2 = Tirets"
  item_add 168,"3 = Points"
  item_add 168,"4 = Tiret point"
  item_add 168,"5 = Tiret point point"
  item_add 168,"6 = Moyen tiret slash point"
  item_add 168,"7 = Trait"
  item_add 168,"8 = Tirets"
  item_add 168,"9 = Double"
  text 168,item_read$(168,1)

open_dialog 101
save_dialog 102

dll_on "KGF.dll"

mark_on 111


end

exit:
  terminate
 
test_what:
  Test_What()
  return

connect:
  ConnectToExcel()
  return
 
disconnect:
  DisconnectFromExcel()
  return

open:
  open()
  return

saveas:
  SaveAs()
  return
 
save:
  Save()
  return
 
close:
  Close()
  return
 
new_sheet:
  NewSheet()
  return

act_by_ind:
  ActivateIndex()
  return
 
act_by_name:
  ActivateName()
  return

del_by_ind:
  RemoveIndex()
  return

del_by_name:
  RemoveName()
  return

page_count:
  GetPageCount()
  return

ind_actif:
  GetActiveIndex()
  return

name_act:
  GetActiveName()
  return
 
col_width:
  SetColWidth()
  return
 
line_height:
  SetLineHeight()
  return
 
back_color:
  BackColor()
  return
 
pol_color:
  FontColor()
  return

pol_size:
  FontSize()
  return

pol_name:
  FontName()
  return

pol_att:
  FontAttributes()
  return

borders:
  Borders()
  return




editmode:
  editmode% = 1 - editmode%
  if editmode%=0
    res% = DLL_call6("GridFunction",object_internal(100),1,0,0,0,0)
    mark_off number_click
  else
    res% = DLL_call6("GridFunction",object_internal(100),1,1,0,0,0)
    mark_on number_click
  end_if
  return
 
export:
  ExportGridToExcel()
  return
 
import:
  ImportGridFromExcel()
  return
 
 

sub ConnectToExcel()
  dim_local res%
  if checked(111)=1
    res% = dll_call2("StartSpreadSheet",1,1)        : ' essayer Excel
    if res%<0
      res% = dll_call2("StartSpreadSheet",2,1)      : ' essayer OpenCalc
      if res%<0 then message "Aucun tableur n'est trouvé"
    end_if
  end_if
  if checked(112)=1
    res% = dll_call2("StartSpreadSheet",1,1)        : ' essayer Excel
    if res%<0 then message "Excel n'est pas trouvé"
  end_if
  if checked(113)=1
    res% = dll_call2("StartSpreadSheet",2,1)      : ' essayer OpenCalc
    if res%<0 then message "OpenCalc n'est pas trouvé"
  end_if
end_sub

sub DisconnectFromExcel()
  dim_local res%
  res% = dll_call1("TerminateSpreadSheet",1)
end_sub

sub ExportGridToExcel()
  dim_local res%, x%, y%, s$
  res% = dll_call0("GetSpreadSheetType")
  if res%<1 then exit_sub
 
  ' 1ère alternative: export par fonction directe
  ' décalage de 3 cellules vers la droite et de 2 lignes vers le bas
'  res% = dll_call4("ExportGridToSpreadSheet",object_internal(100),0,3,2)
  ' sans décalage:
  res% = dll_call4("ExportGridToSpreadSheet",object_internal(100),0,0,0)
  exit_sub

  ' 2ème alternative: export par boucle
  for y%=1 to nlin%
    for x%=1 to ncol%
      s$ = grid_read$(100,y%,x%)
      res% = dll_call4("WriteSpreadSheetCellByIndex",x%,y%,adr(s$),0)
    next x%
  next y%
 
end_sub

sub ImportGridFromExcel()
  dim_local res%, x%, y%, s$
  res% = dll_call0("GetSpreadSheetType")
  if res%<1 then exit_sub
  res% = dll_call4("ImportGridFromSpreadSheet",object_internal(100),0,3,2)
end_sub

sub Test_What()
  dim_local res%
  res% = dll_call0("GetSpreadSheetType")
  select res%
    case -1: message "aucun tableur n'est lancé"
    case  0: message "un tableur a été lancé, mais il n'est plus disponible"
    case  1: message "Excel est en cours..."
    case  2: message "OpenCalc est en cours..."
  end_select
end_sub

sub open()
  dim_local res%, f$
  filter 101,"Fichiers Excel|*.xls"
  f$ = file_name$(101)
  if f$="_" then exit_sub
  if lower$(right$(f$,4))<>".xls" then f$ = f$ + ".xls"
  res% = dll_call1("OpenSpreadSheet",adr(f$))
end_sub

sub SaveAs()
  dim_local res%, f$
  filter 102,"Fichiers Excel|*.xls"
  f$ = file_name$(102)
  if f$="_" then exit_sub
  if lower$(right$(f$,4))<>".xls" then f$ = f$ + ".xls"
  res% = dll_call1("SaveSpreadSheetAs",adr(f$))
end_sub

sub Save()
  dim_local res%
  res% = dll_call0("SaveSpreadSheet")
end_sub

sub Close()
  dim_local res%
  res% = dll_call0("CloseSpreadSheet")
end_sub

sub NewSheet()
  dim_local res%, nom$
  nom$ = message_input$("Nouvelle page","Nom de la page:","")
  if nom$="" then exit_sub
  res% = dll_call2("NewSpreadSheetPage",adr(nom$),1)
end_sub

sub  ActivateIndex()
  dim_local res%, n%, s$
  s$ = message_input$("Activer une page","Numéro de la page:","")
  if s$="" then exit_sub
  if numeric(s$)=0 then exit_sub
  n% = val(s$)
  res% = dll_call1("ActivateSpreadSheetPageByIndex",n%)
end_sub

sub  ActivateName()
  dim_local res%, n%, s$
  s$ = message_input$("Activer une page","Nom de la page:","")
  if s$="" then exit_sub
  res% = dll_call1("ActivateSpreadSheetPageByName",adr(s$))
end_sub

sub  RemoveIndex()
  dim_local res%, n%, s$
  s$ = message_input$("Supprimer une page","Numéro de la page:","")
  if s$="" then exit_sub
  if numeric(s$)=0 then exit_sub
  n% = val(s$)
  res% = dll_call1("RemoveSpreadSheetPageByIndex",n%)
end_sub

sub  RemoveName()
  dim_local res%, n%, s$
  s$ = message_input$("Supprimer une page","Nom de la page:","")
  if s$="" then exit_sub
  res% = dll_call1("RemoveSpreadSheetPageByName",adr(s$))
end_sub

sub  GetPageCount()
  dim_local res%
  res% = dll_call0("GetSpreadSheetPageCount")
  message "Le document a "+str$(res%)+" pages"
end_sub

sub  GetActiveIndex()
  dim_local res%
  res% = dll_call0("GetSpreadSheetActivePageNumber")
  message "La page active est la page numéro "+str$(res%)
end_sub

sub  GetActiveName()
  dim_local res%, nom$
  nom$ = string$(255," ")
  res% = dll_call1("GetSpreadSheetActivePageName",adr(nom$))
  message "La page actuelle s'appelle ["+trim$(nom$)+"]"
end_sub

sub SetColWidth()
  dim_local res%, s$, c%, w%
  s$ = trim$(text$(122))
  if len(s$)=0 then exit_sub
  if numeric(s$)=0 then exit_sub
  c% = val(s$)
  s$ = trim$(text$(124))
  if len(s$)=0 then exit_sub
  if numeric(s$)=0 then exit_sub
  w% = val(s$)*100
  res% = dll_call4("SetSpreadSheetDimensions",0,0,c%,w%)
end_sub

sub SetLineHeight()
  dim_local res%, s$, l%, h%
  s$ = trim$(text$(132))
  if len(s$)=0 then exit_sub
  if numeric(s$)=0 then exit_sub
  l% = val(s$)
  s$ = trim$(text$(134))
  if len(s$)=0 then exit_sub
  if numeric(s$)=0 then exit_sub
  h% = val(s$)*100
  res% = dll_call4("SetSpreadSheetDimensions",l%,h%,0,0)
end_sub

sub BackColor()
  dim_local res%, l%, c%, clr%, s$
  s$ = trim$(text$(132))
  if len(s$)=0 then exit_sub
  if numeric(s$)=0 then exit_sub
  l% = val(s$)
  s$ = trim$(text$(122))
  if len(s$)=0 then exit_sub
  if numeric(s$)=0 then exit_sub
  c% = val(s$)
  clr% = (rnd(255)*256+rnd(255))*255+rnd(255)
  res% = dll_call6("SetSpreadSheetColors",c%,l%,1,clr%,0,0)
end_sub

sub FontColor()
  dim_local res%, l%, c%, clr%, s$
  s$ = trim$(text$(132))
  if len(s$)=0 then exit_sub
  if numeric(s$)=0 then exit_sub
  l% = val(s$)
  s$ = trim$(text$(122))
  if len(s$)=0 then exit_sub
  if numeric(s$)=0 then exit_sub
  c% = val(s$)
  clr% = (rnd(255)*256+rnd(255))*256+rnd(255)
  res% = dll_call6("SetSpreadSheetColors",c%,l%,0,0,1,clr%)
end_sub

sub FontSize()
  dim_local res%, l%, c%, siz%, s$
  s$ = trim$(text$(132))
  if len(s$)=0 then exit_sub
  if numeric(s$)=0 then exit_sub
  l% = val(s$)
  s$ = trim$(text$(122))
  if len(s$)=0 then exit_sub
  if numeric(s$)=0 then exit_sub
  c% = val(s$)
  siz% = val(text$(142))
  res% = dll_call4("SetSpreadSheetFont",c%,l%,0,siz%)
end_sub

sub FontName()
  dim_local res%, l%, c%, nam$, s$
  s$ = trim$(text$(132))
  if len(s$)=0 then exit_sub
  if numeric(s$)=0 then exit_sub
  l% = val(s$)
  s$ = trim$(text$(122))
  if len(s$)=0 then exit_sub
  if numeric(s$)=0 then exit_sub
  c% = val(s$)
  nam$ = text$(143)
  res% = dll_call4("SetSpreadSheetFont",c%,l%,adr(nam$),0)
end_sub

sub FontAttributes()
  dim_local res%, l%, c%, nam$, s$
  s$ = trim$(text$(132))
  if len(s$)=0 then exit_sub
  if numeric(s$)=0 then exit_sub
  l% = val(s$)
  s$ = trim$(text$(122))
  if len(s$)=0 then exit_sub
  if numeric(s$)=0 then exit_sub
  c% = val(s$)
  nam$ = text$(143)
  res% = dll_call6("SetSpreadSheetAtributes",c%,l%,checked(151),checked(152),checked(153),checked(154))
end_sub

sub Borders()
  dim_local res%, l%, c%, nam$, s$, style%, clr%, i%
  s$ = trim$(text$(132))
  if len(s$)=0 then exit_sub
  if numeric(s$)=0 then exit_sub
  l% = val(s$)
  s$ = trim$(text$(122))
  if len(s$)=0 then exit_sub
  if numeric(s$)=0 then exit_sub
  c% = val(s$)
  style% = item_index(168)
  if style%=0 then style% = 1
  style% = style% - 1
  clr% = (rnd(255)*256+rnd(255))*256+rnd(255)

  ' pour documenter les possibilités
  for i%=1 to count(168)
    res% = dll_call5("SetSpreadSheetBorders",9,i%*2-1,1,i%-1,clr%)
    s$ = item_read$(168,i%)
    res% = dll_call4("WriteSpreadSheetCellByIndex",10,i%*2-1,adr(s$),0)
  next i%

  ' bords individuels de la cellule choisie
  if checked(162)=1    : ' haut
    res% = dll_call5("SetSpreadSheetBorders",c%,l%,3,style%,clr%)
  else
    res% = dll_call5("SetSpreadSheetBorders",c%,l%,3,0,0)
  end_if
  if checked(163)=1    : ' gauche
    res% = dll_call5("SetSpreadSheetBorders",c%,l%,4,style%,clr%)
  else
    res% = dll_call5("SetSpreadSheetBorders",c%,l%,4,0,0)
  end_if
  if checked(164)=1    : ' droite
    res% = dll_call5("SetSpreadSheetBorders",c%,l%,5,style%,clr%)
  else
    res% = dll_call5("SetSpreadSheetBorders",c%,l%,5,0,0)
  end_if
  if checked(165)=1    : ' bas
    res% = dll_call5("SetSpreadSheetBorders",c%,l%,2,style%,clr%)
  else
    res% = dll_call5("SetSpreadSheetBorders",c%,l%,2,0,0)
  end_if
  if checked(166)=1    : ' diagonal haut
    res% = dll_call5("SetSpreadSheetBorders",c%,l%,6,style%,clr%)
  else
    res% = dll_call5("SetSpreadSheetBorders",c%,l%,6,0,0)
  end_if
  if checked(167)=1    : ' diagonal bas
    res% = dll_call5("SetSpreadSheetBorders",c%,l%,7,style%,clr%)
  else
    res% = dll_call5("SetSpreadSheetBorders",c%,l%,7,0,0)
  end_if
  s$ = "Style "+str$(style%)
  res% = dll_call4("WriteSpreadSheetCellByIndex",c%,l%,adr(s$),0)
end_sub

Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 25 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 25 EmptyLun 6 Avr 2015 - 12:33

Nouvelle version:
KGF.dll V4.66 du 04/04/2015

Nouveautés:
suite de la gestion Excel/OpenCalc avec sélection d'un rectangle, récupération des coordonnées
de la sélection active, et application d'une bordure à un rectangle sélectionné
et des tests de toutes les fonctions avec OpenCalc


Modules modifiés:
KGF.dll

La doc sera à jour prochainement.
Les sources sont à jour.

On peut même importer/exporter séparément, maintenant, les données et les formules !

Doc provisoire de l'existant:
' ouvrir un tableur et se connecter à ce tableur
res% = dll_call2("StartSpreadSheet",quoi%,visible%)
' quoi%: 1=Excel 2=OPenCalc
visible%: 1=visible 0=non visible

' se déconnecter du tableur et le fermer
res% = dll_call1("TerminateSpreadSheet",%kill)
kill%: si OpenCale st si kill%=1, alors le process soffice.bin sera supprimé automatiquement

' tester quel tableur est actif
res% = dll_call0("GetSpreadSheetType")
res%: -1=rien 0=a été lancé, mais n'est plus disponible 1=Excel 2=OpenCalc

' écrire une cellule de la page active du document actif
res% = dll_call4("WriteSpreadSheetCellByIndex",x%,y%,adr(txt$),adr(frm$))
' x%=colonne y%=ligne txt$=données frm$=formule
si le 3ème et/ou le 4ème paramètre est passé comme 0, la modification de cette partie n'aura pas lieu

' exporter un GRID dans la page active directement
res% = dll_call4("ExportGridToSpreadSheet",object_internal(grid%),act%,deltax%,deltay%)
' grid%=numéro du GRID
' act%: 0=en tant que données 1=en tant que formules
' deltax%, deltay% = délacage horizontal/vertical en destination dans la page active

' lire une cellule de la page active du document actif
res% = dll_call4("ReadSpreadSheetCellByIndex",x%,y%,adr(txt$),adr(frm$))
' x%=colonne y%=ligne txt$=données frm$=formule
si le 3ème et/ou le 4ème paramètre est passé comme 0, la partie correspondante n'est pas lue

' importer un GRID de la page active directement
res% = dll_call4("ImportGridFromSpreadSheet",object_internal(grid%),act%,deltax%,deltay%)
' grid%=numéro du GRID
' act%: 0=en tant que données 1=en tant que formules
' deltax%, deltay% = délacage horizontal/vertical en source dans la page active

' ouvrir un document existant
res% = dll_call1("OpenSpreadSheet",adr(f$))
' f$ = chemin et nom vers le fichier existant

' enregistrer un document du tableur
res% = dll_call0("SaveSpreadSheet")
' note: il faut que ce document ait déjà un nom !

' enregistrer un document dans un autre fichier
res% = dll_call1("SaveSpreadSheetAs",adr(f$))
' f$ = chemin et nom vers le nouveau fichier

' fermer un document
res% = dll_call0("CloseSpreadSheet")

' insérer une nouvelle page
res% = dll_call2("NewSpreadSheetPage",adr(nom$),pos%)
' nom$=nom de la page
' pos%=position 0=après la page active 1=après la dernière page

' activer une page par son indice
res% = dll_call1("ActivateSpreadSheetPageByIndex",n%)
' n%=indice (1,2,...)

' activer une page par son nom
res% = dll_call1("ActivateSpreadSheetPageByName",adr(s$))
' s$=nom de la page recherchée

' supprimer une page par son indice
res% = dll_call1("RemoveSpreadSheetPageByIndex",n%)
' n%=indice (1,2,...)

' supprimer une page par son nom
res% = dll_call1("RemoveSpreadSheetPageByName",adr(s$))
' s$=nom de la page à supprimer

' retourner le nombre de pages du document
res% = dll_call0("GetSpreadSheetPageCount")

' retourner l'indice de la page active
res% = dll_call0("GetSpreadSheetActivePageNumber")

' retourner le nom de la page active
res% = dll_call1("GetSpreadSheetActivePageName",adr(nom$))
nom$ recevra le nom de la page active

' ajuster les dimensions d'une ligne et/ou d'une colonne
res% = dll_call4("SetSpreadSheetDimensions",l%,h%,c%,w%)
' si l%>0, la ligne l% sera mise à h% millimètres de hauteur
' si c%>0, la colonne c% sera mise à w% millimètres de largeur

' couleurs de fond et/ou de police d'une cellule
res% = dll_call6("SetSpreadSheetColors",c%,l%,DoBack%,bclr%,DoFont%,fclr%)
' si DoBack%=1 alors la couleur de fond de la cellule sera mise à bclr%
' si DoFont%=1 alors la couleur de police de la cellule sera mise à fclr%

' nom et/ou taille de la police
res% = dll_call4("SetSpreadSheetFont",c%,l%,adr(font$),siz%)
' si siz%=0 la taille ne sera pas changée
' si adr(font$) est passée comme 0, la police ne sera pas changée

' atributs graphiques des caractères
res% = dll_call6("SetSpreadSheetAtributes",c%,l%,gras%,italique%,souligne%,barre%)
' les attributs sont passée en 0 ou 1

' bordures autour des cellules
res% = dll_call5("SetSpreadSheetBorders",c%,l%,typ%,style%,clr%)
' typ%: type de bordure: 0=aucune 1=toutes 2=bas 3=haut 4=gauche 5=droite 6=oblique en bas 7=oblique en haut
' style%: style de ligne: 0=Aucun 1=Trait 2=Tirets 3=Points 4=Tiret point
' 5=Tiret point point 6=Moyen tiret slash point 7=Trait 8=Tirets 9=Double

' sélectionner un rectangle
res% = dll_call4("SelectSpreadSheetRange",x1%,y1%,x2%,y2%)
' (x1%,y1%)=coint en haut à gauche (x2%,y2%)=coin en bas à droite

' récupérer le rectangle de la sélection actuelle
res% = dll_call4("GetSelectedSpreadSheetRange",adr(x1%),adr(y1%),adr(x2%),adr(y2%))
' (x1%,y1%)=coint en haut à gauche (x2%,y2%)=coin en bas à droite

' appliquer une bordure à la sélection actuelle
res% = dll_call3("SetSpreadSheetSelectionBorders",bord%,style%,clr%)
' bord%: somme des valeurs suivantes:
' 1 =haut 2=gauche 4=droite 8=bas 16=diagonal haut 32=diagonal bas 64=intérieur horizontal 128= intérieur vertical

Et voici le programme de démo avec toutes les fonctions:
(note: pour importer/exporter, un décalage de 3 colonnes est explicitement codé dans la démo !)
Les menus ont été réorganisés pour refléter la structure: Fichier(Document) - Pages - Options.
Toutes les fonctions ont été testées avec Excel et OpenCalc !
Pour tester les couleurs: les lignes "couleur" du menu Edition changent ces couleurs de façon aléatoire.
Pour tester les bordures: connecter sur Excel ou OpenCalc, cocher les cases des bordures souhaitées,
choisir une ligne et colonne hors colonnes 9 à 12, puis utiliser le menu Edition\Bordures.
Ou pour un rectangle: dans le menu Edition, choisissez Selection, cofigurez la bordure avec les champs à droite, puis utilisez menu Edition`\Bordure de sélection.
Code:
' GRID_et_EXCEL.bas


label connect, exit, editmode, export, import, disconnect
label open, save, saveas, close
label new_sheet, act_by_ind, act_by_name, del_by_ind, del_by_name
label col_width, line_height, back_color, pol_color, pol_size, pol_name
label pol_att, borders, sel_range, sel_borders
label test_what, page_count, ind_actif, name_act

dim nlin% : nlin% = 11
dim ncol% : ncol% = 8

dim res%, no%, no1%, no2%, editmode%

width 0,750

no% = no% + 1 : main_menu no% : no1% = no%
  no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Fichiers"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Connecter" : on_click no%,connect
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Déconnecter" : on_click no%,disconnect
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Sortir" : on_click no%,exit
  no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Document"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Ouvrir..." : on_click no%,open
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer" : on_click no%,save
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Enregistrer sous..." : on_click no%,saveas
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Fermer" : on_click no%,close
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Exporter" : on_click no%,export
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Importer" : on_click no%,import
  no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Pages"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nouveau" : on_click no%,new_sheet
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Activer par indice" : on_click no%,act_by_ind
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Activer par nom" : on_click no%,act_by_name
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Supprimer par indice" : on_click no%,del_by_ind
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Supprimer par nom" : on_click no%,del_by_name
  no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Edition"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Largeur de colonne" : on_click no%,col_width
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Hauteur de ligne" : on_click no%,line_height
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Couleur de fond" : on_click no%,back_color
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Couleur de police" : on_click no%,pol_color
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Taille de police" : on_click no%,pol_size
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nom de police" : on_click no%,pol_name
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Attributs de police" : on_click no%,pol_att
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Bordures" : on_click no%,borders
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Sélection" : on_click no%,sel_range
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Bordures de sélection" : on_click no%,sel_borders
  no% = no% + 1 : sub_menu no% : no2% = no% : parent no%,no1% : caption no%,"Options"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Mode Edition" : on_click no%,editmode
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Test tableur" : on_click no%,test_what
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"-"
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nombre de pages" : on_click no%,page_count
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Indice page active" : on_click no%,ind_actif
    no% = no% + 1 : sub_menu no% : parent no%,no2% : caption no%,"Nom page active" : on_click no%,name_act

grid 100 : top 100,10 : left 100,10 : width 100,525 : height 100,280
grid_column 100,ncol% : grid_row 100,nlin%

option 111 : top 111,320 : left 111,50 : caption 111,"Détection automatique" : width 111,130
option 112 : top 112,340 : left 112,50 : caption 112,"Excel"
option 113 : top 113,360 : left 113,50 : caption 113,"OpenCalc"

alpha 121 : top 121,320 : left 121,200 : caption 121,"Colonne:"
edit 122 : top 122,320 : left 122,250 : width 122,40
alpha 123 : top 123,320 : left 123,310 : caption 123,"Largeur:"
edit 124 : top 124,320 : left 124,360 : width 124,40

alpha 131 : top 131,350 : left 131,200 : caption 131,"Ligne:"
edit 132 : top 132,350 : left 132,250 : width 132,40
alpha 133 : top 133,350 : left 133,310 : caption 133,"Hauteur:"
edit 134 : top 134,350 : left 134,360 : width 134,40

alpha 141 : top 141,320 : left 141,420 : caption 141,"Police:"
combo 142 : top 142,320 : left 142,470 : width 142,40
  item_add 142,8
  item_add 142,10
  item_add 142,12
  item_add 142,14
  item_add 142,16
  text 142,10
 
combo 143 : top 143,350 : left 143,470 : width 143,130
  font_names_load 143
  text 143,"Arial"

check 151 : top 151,380 : left 151,470 : width 151,40 : caption 151,"B" : font_bold 151
check 152 : top 152,380 : left 152,510 : width 152,40 : caption 152,"It" : font_italic 152
check 153 : top 153,380 : left 153,550 : width 153,40 : caption 153,"U" : font_underline 153
check 154 : top 154,380 : left 154,590 : width 154,40 : caption 154,"S" : font_strike 154

alpha 161 : top 161,10 : left 161,550 : caption 161,"Bords:"
check 162 : top 162,30 : left 162,590 : caption 162,"Haut"
check 163 : top 163,60 : left 163,550 : caption 163,"Gauche"
check 164 : top 164,60 : left 164,630 : caption 164,"Droite"
check 165 : top 165,90 : left 165,590 : caption 165,"Bas"
check 166 : top 166,120 : left 166,550 : caption 166,"Diag \"
check 167 : top 167,120 : left 167,630 : caption 167,"Diag /"
check 168 : top 168,150 : left 168,550 : caption 168,"Intérieur -"
check 169 : top 169,150 : left 169,630 : caption 169,"Intérieur |"
combo 170 : top 170,180 : left 170,550
  item_add 170,"0 = Aucun"
  item_add 170,"1 = Trait"
  item_add 170,"2 = Tirets"
  item_add 170,"3 = Points"
  item_add 170,"4 = Tiret point"
  item_add 170,"5 = Tiret point point"
  item_add 170,"6 = Moyen tiret slash point"
  item_add 170,"7 = Trait"
  item_add 170,"8 = Tirets"
  item_add 170,"9 = Double"
  text 170,item_read$(170,1)

open_dialog 101
save_dialog 102

dll_on "KGF.dll"

mark_on 111


end

exit:
  terminate
 
test_what:
  Test_What()
  return

connect:
  ConnectToExcel()
  return
 
disconnect:
  DisconnectFromExcel()
  return

open:
  open()
  return

saveas:
  SaveAs()
  return
 
save:
  Save()
  return
 
close:
  Close()
  return
 
new_sheet:
  NewSheet()
  return

act_by_ind:
  ActivateIndex()
  return
 
act_by_name:
  ActivateName()
  return

del_by_ind:
  RemoveIndex()
  return

del_by_name:
  RemoveName()
  return

page_count:
  GetPageCount()
  return

ind_actif:
  GetActiveIndex()
  return

name_act:
  GetActiveName()
  return
 
col_width:
  SetColWidth()
  return
 
line_height:
  SetLineHeight()
  return
 
back_color:
  BackColor()
  return
 
pol_color:
  FontColor()
  return

pol_size:
  FontSize()
  return

pol_name:
  FontName()
  return

pol_att:
  FontAttributes()
  return

borders:
  Borders()
  return

sel_range:
  SelectRange()
  return
 
sel_borders:
  SelectionBorders()
  return

editmode:
  editmode% = 1 - editmode%
  if editmode%=0
    res% = DLL_call6("GridFunction",object_internal(100),1,0,0,0,0)
    mark_off number_click
  else
    res% = DLL_call6("GridFunction",object_internal(100),1,1,0,0,0)
    mark_on number_click
  end_if
  return
 
export:
  ExportGridToExcel()
  return
 
import:
  ImportGridFromExcel()
  return
 
 

sub ConnectToExcel()
  dim_local res%
  if checked(111)=1
    res% = dll_call2("StartSpreadSheet",1,1)        : ' essayer Excel
    if res%<0
      res% = dll_call2("StartSpreadSheet",2,1)      : ' essayer OpenCalc
      if res%<0 then message "Aucun tableur n'est trouvé"
    end_if
  end_if
  if checked(112)=1
    res% = dll_call2("StartSpreadSheet",1,1)        : ' essayer Excel
    if res%<0 then message "Excel n'est pas trouvé"
  end_if
  if checked(113)=1
    res% = dll_call2("StartSpreadSheet",2,1)      : ' essayer OpenCalc
    if res%<0 then message "OpenCalc n'est pas trouvé"
  end_if
end_sub

sub DisconnectFromExcel()
  dim_local res%
  res% = dll_call1("TerminateSpreadSheet",1)
end_sub

sub ExportGridToExcel()
  dim_local res%, x%, y%, s$
  res% = dll_call0("GetSpreadSheetType")
  if res%<1 then exit_sub
 
  ' 1ère alternative: export par fonction directe
  ' décalage de 3 cellules vers la droite et de 2 lignes vers le bas
'  res% = dll_call4("ExportGridToSpreadSheet",object_internal(100),0,3,2)
  ' sans décalage:
  res% = dll_call4("ExportGridToSpreadSheet",object_internal(100),0,0,0)
  exit_sub

  ' 2ème alternative: export par boucle
  for y%=1 to nlin%
    for x%=1 to ncol%
      s$ = grid_read$(100,y%,x%)
      res% = dll_call4("WriteSpreadSheetCellByIndex",x%,y%,adr(s$),0)
    next x%
  next y%
 
end_sub

sub ImportGridFromExcel()
  dim_local res%, x%, y%, s$
  res% = dll_call0("GetSpreadSheetType")
  if res%<1 then exit_sub
  res% = dll_call4("ImportGridFromSpreadSheet",object_internal(100),0,3,2)
end_sub

sub Test_What()
  dim_local res%
  res% = dll_call0("GetSpreadSheetType")
  select res%
    case -1: message "aucun tableur n'est lancé"
    case  0: message "un tableur a été lancé, mais il n'est plus disponible"
    case  1: message "Excel est en cours..."
    case  2: message "OpenCalc est en cours..."
  end_select
end_sub

sub open()
  dim_local res%, f$
  filter 101,"Fichiers Excel|*.xls"
  f$ = file_name$(101)
  if f$="_" then exit_sub
  if lower$(right$(f$,4))<>".xls" then f$ = f$ + ".xls"
  res% = dll_call1("OpenSpreadSheet",adr(f$))
end_sub

sub SaveAs()
  dim_local res%, f$
  filter 102,"Fichiers Excel|*.xls"
  f$ = file_name$(102)
  if f$="_" then exit_sub
  if lower$(right$(f$,4))<>".xls" then f$ = f$ + ".xls"
  res% = dll_call1("SaveSpreadSheetAs",adr(f$))
end_sub

sub Save()
  dim_local res%
  res% = dll_call0("SaveSpreadSheet")
end_sub

sub Close()
  dim_local res%
  res% = dll_call0("CloseSpreadSheet")
end_sub

sub NewSheet()
  dim_local res%, nom$
  nom$ = message_input$("Nouvelle page","Nom de la page:","")
  if nom$="" then exit_sub
  res% = dll_call2("NewSpreadSheetPage",adr(nom$),1)
end_sub

sub  ActivateIndex()
  dim_local res%, n%, s$
  s$ = message_input$("Activer une page","Numéro de la page:","")
  if s$="" then exit_sub
  if numeric(s$)=0 then exit_sub
  n% = val(s$)
  res% = dll_call1("ActivateSpreadSheetPageByIndex",n%)
end_sub

sub  ActivateName()
  dim_local res%, n%, s$
  s$ = message_input$("Activer une page","Nom de la page:","")
  if s$="" then exit_sub
  res% = dll_call1("ActivateSpreadSheetPageByName",adr(s$))
end_sub

sub  RemoveIndex()
  dim_local res%, n%, s$
  s$ = message_input$("Supprimer une page","Numéro de la page:","")
  if s$="" then exit_sub
  if numeric(s$)=0 then exit_sub
  n% = val(s$)
  res% = dll_call1("RemoveSpreadSheetPageByIndex",n%)
end_sub

sub  RemoveName()
  dim_local res%, n%, s$
  s$ = message_input$("Supprimer une page","Nom de la page:","")
  if s$="" then exit_sub
  res% = dll_call1("RemoveSpreadSheetPageByName",adr(s$))
end_sub

sub  GetPageCount()
  dim_local res%
  res% = dll_call0("GetSpreadSheetPageCount")
  message "Le document a "+str$(res%)+" pages"
end_sub

sub  GetActiveIndex()
  dim_local res%
  res% = dll_call0("GetSpreadSheetActivePageNumber")
  message "La page active est la page numéro "+str$(res%)
end_sub

sub  GetActiveName()
  dim_local res%, nom$
  nom$ = string$(255," ")
  res% = dll_call1("GetSpreadSheetActivePageName",adr(nom$))
  message "La page actuelle s'appelle ["+trim$(nom$)+"]"
end_sub

sub SetColWidth()
  dim_local res%, s$, c%, w%
  s$ = trim$(text$(122))
  if len(s$)=0 then exit_sub
  if numeric(s$)=0 then exit_sub
  c% = val(s$)
  s$ = trim$(text$(124))
  if len(s$)=0 then exit_sub
  if numeric(s$)=0 then exit_sub
  w% = val(s$)*100
  res% = dll_call4("SetSpreadSheetDimensions",0,0,c%,w%)
end_sub

sub SetLineHeight()
  dim_local res%, s$, l%, h%
  s$ = trim$(text$(132))
  if len(s$)=0 then exit_sub
  if numeric(s$)=0 then exit_sub
  l% = val(s$)
  s$ = trim$(text$(134))
  if len(s$)=0 then exit_sub
  if numeric(s$)=0 then exit_sub
  h% = val(s$)*100
  res% = dll_call4("SetSpreadSheetDimensions",l%,h%,0,0)
end_sub

sub BackColor()
  dim_local res%, l%, c%, clr%, s$
  s$ = trim$(text$(132))
  if len(s$)=0 then exit_sub
  if numeric(s$)=0 then exit_sub
  l% = val(s$)
  s$ = trim$(text$(122))
  if len(s$)=0 then exit_sub
  if numeric(s$)=0 then exit_sub
  c% = val(s$)
  clr% = (rnd(255)*256+rnd(255))*255+rnd(255)
  res% = dll_call6("SetSpreadSheetColors",c%,l%,1,clr%,0,0)
end_sub

sub FontColor()
  dim_local res%, l%, c%, clr%, s$
  s$ = trim$(text$(132))
  if len(s$)=0 then exit_sub
  if numeric(s$)=0 then exit_sub
  l% = val(s$)
  s$ = trim$(text$(122))
  if len(s$)=0 then exit_sub
  if numeric(s$)=0 then exit_sub
  c% = val(s$)
  clr% = (rnd(255)*256+rnd(255))*256+rnd(255)
  res% = dll_call6("SetSpreadSheetColors",c%,l%,0,0,1,clr%)
end_sub

sub FontSize()
  dim_local res%, l%, c%, siz%, s$
  s$ = trim$(text$(132))
  if len(s$)=0 then exit_sub
  if numeric(s$)=0 then exit_sub
  l% = val(s$)
  s$ = trim$(text$(122))
  if len(s$)=0 then exit_sub
  if numeric(s$)=0 then exit_sub
  c% = val(s$)
  siz% = val(text$(142))
  res% = dll_call4("SetSpreadSheetFont",c%,l%,0,siz%)
end_sub

sub FontName()
  dim_local res%, l%, c%, nam$, s$
  s$ = trim$(text$(132))
  if len(s$)=0 then exit_sub
  if numeric(s$)=0 then exit_sub
  l% = val(s$)
  s$ = trim$(text$(122))
  if len(s$)=0 then exit_sub
  if numeric(s$)=0 then exit_sub
  c% = val(s$)
  nam$ = text$(143)
  res% = dll_call4("SetSpreadSheetFont",c%,l%,adr(nam$),0)
end_sub

sub FontAttributes()
  dim_local res%, l%, c%, nam$, s$
  s$ = trim$(text$(132))
  if len(s$)=0 then exit_sub
  if numeric(s$)=0 then exit_sub
  l% = val(s$)
  s$ = trim$(text$(122))
  if len(s$)=0 then exit_sub
  if numeric(s$)=0 then exit_sub
  c% = val(s$)
  nam$ = text$(143)
  res% = dll_call6("SetSpreadSheetAtributes",c%,l%,checked(151),checked(152),checked(153),checked(154))
end_sub

sub Borders()
  dim_local res%, l%, c%, nam$, s$, style%, clr%, i%
  s$ = trim$(text$(132))
  if len(s$)=0 then exit_sub
  if numeric(s$)=0 then exit_sub
  l% = val(s$)
  s$ = trim$(text$(122))
  if len(s$)=0 then exit_sub
  if numeric(s$)=0 then exit_sub
  c% = val(s$)
  style% = item_index(170)
  if style%=0 then style% = 1
  style% = style% - 1
  clr% = (rnd(255)*256+rnd(255))*256+rnd(255)

  ' pour documenter les possibilités
  for i%=1 to count(170)
    res% = dll_call5("SetSpreadSheetBorders",9,i%*2-1,1,i%-1,clr%)
    s$ = item_read$(170,i%)
    res% = dll_call4("WriteSpreadSheetCellByIndex",10,i%*2-1,adr(s$),0)
  next i%

  ' bords individuels de la cellule choisie
  if checked(162)=1    : ' haut
    res% = dll_call5("SetSpreadSheetBorders",c%,l%,3,style%,clr%)
  else
    res% = dll_call5("SetSpreadSheetBorders",c%,l%,3,0,0)
  end_if
  if checked(163)=1    : ' gauche
    res% = dll_call5("SetSpreadSheetBorders",c%,l%,4,style%,clr%)
  else
    res% = dll_call5("SetSpreadSheetBorders",c%,l%,4,0,0)
  end_if
  if checked(164)=1    : ' droite
    res% = dll_call5("SetSpreadSheetBorders",c%,l%,5,style%,clr%)
  else
    res% = dll_call5("SetSpreadSheetBorders",c%,l%,5,0,0)
  end_if
  if checked(165)=1    : ' bas
    res% = dll_call5("SetSpreadSheetBorders",c%,l%,2,style%,clr%)
  else
    res% = dll_call5("SetSpreadSheetBorders",c%,l%,2,0,0)
  end_if
  if checked(166)=1    : ' diagonal haut
    res% = dll_call5("SetSpreadSheetBorders",c%,l%,6,style%,clr%)
  else
    res% = dll_call5("SetSpreadSheetBorders",c%,l%,6,0,0)
  end_if
  if checked(167)=1    : ' diagonal bas
    res% = dll_call5("SetSpreadSheetBorders",c%,l%,7,style%,clr%)
  else
    res% = dll_call5("SetSpreadSheetBorders",c%,l%,7,0,0)
  end_if
  s$ = "Style "+str$(style%)
  res% = dll_call4("WriteSpreadSheetCellByIndex",c%,l%,adr(s$),0)
end_sub
 
sub SelectRange()
  dim_local res%, x1%, y1%, x2%, y2%
  res% = dll_call4("SelectSpreadSheetRange",4,5,7,12)
  res% = dll_call4("GetSelectedSpreadSheetRange",adr(x1%),adr(y1%),adr(x2%),adr(y2%))
  message "Sélection: ("+str$(x1%)+","+str$(y1%)+") -> ("+str$(x2%)+","+str$(y2%)+")"
end_sub

sub SelectionBorders()
  dim_local res%, style%, clr%, bord%
  style% = item_index(170)
  if style%=0 then style% = 1
  style% = style% - 1
  clr% = (rnd(255)*256+rnd(255))*256+rnd(255)
  res% = dll_call4("SelectSpreadSheetRange",4,5,7,12)

  bord% = 0
  if checked(162)=1 then bord% = bord% +  1    : ' haut
  if checked(163)=1 then bord% = bord% +  2    : ' gauche
  if checked(164)=1 then bord% = bord% +  4    : ' droite
  if checked(165)=1 then bord% = bord% +  8    : ' bas
  if checked(166)=1 then bord% = bord% +  16    : ' diagonal haut
  if checked(167)=1 then bord% = bord% +  32    : ' diagonal bas
  if checked(168)=1 then bord% = bord% +  64    : ' intérieur horizontal
  if checked(169)=1 then bord% = bord% + 128    : ' intérieur vertical

  res% = dll_call3("SetSpreadSheetSelectionBorders",bord%,style%,clr%)

end_sub
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
papydall

papydall


Nombre de messages : 7017
Age : 74
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

KGF_dll - nouvelles versions - Page 25 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 25 EmptyLun 6 Avr 2015 - 14:28

Salut Klaus

J’ai téléchargé la nouvelle version de KGF.DLL puis j’ai lancé le code que tu as donné comme exemple en modifiant uniquement le chemin de la dll et sans même jeté un œil sur le code.
Ne sachant trop ce que je dois faire, j’ai choisis Fichier / sortir : conséquence : plantage et aucune possibilité de m’en sortir même pas avec tuer le processus.
La seule issue était de Redémarrer.
J’ai regardé le code de plus près : la cause c’est TERMINATE.
Une fois de plus, cette commande m’a joué des tours !.
J’ai du la remplacer par
Code:
 res% = dll_call1("KillProcessByHandle",handle(0))
Et là tout me semble être correct.
Je dis me ‘semble’ parce que je ne suis pas habitué à utiliser Excel ni OpenCalc !

Proposition :
Puisqu’il y a un problème de TERMINATE avec KGF.DLL, tu veux bien coder dans tes exemples res% = dll_call1("KillProcessByHandle",handle(0)) au lieu de TERMINATE
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Contenu sponsorisé





KGF_dll - nouvelles versions - Page 25 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 25 Empty

Revenir en haut Aller en bas
 
KGF_dll - nouvelles versions
Revenir en haut 
Page 25 sur 40Aller à la page : Précédent  1 ... 14 ... 24, 25, 26 ... 32 ... 40  Suivant
 Sujets similaires
-
» KGF_dll - nouvelles versions
» Nouvelles versions
» Synedit_Editor - nouvelles versions
» KGF_dll - nouvelles versions
» KGF_dll - nouvelles versions

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: Activité des sites créés par les Panoramiciens. :: Le site de Klaus-
Sauter vers: