Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: application créée avec mon IDE Ven 24 Fév 2012 - 9:32 | |
| Ca vous est déjà arrivé ? Savoir avoir, un jour, on a trouvé une solution à un problème technique, en avoir besoin dans un nouveau programme et de ne plus se souvenir des détails ? Ne plus se souvenir exactement dans quel programme se trouvent les quelques lignes de code dont on a besoin ? Avoir à chercher partout pour les retrouver ? J'étais fatigué de cela et je me suis fait un petit outil que j'appelle "mes astuces". Il affiche, par catégorie, la liste des astuces, et en cliquant dessus, il affiche le code correspondant. Un bouton permet de copier le code dans le presse-papier. En Delphi, je l'ai ajouté dans le menu Outils - impeccable. Mais même en Panoramic, avec une icône sur le bureau, c'est facilement exploitable. Il faut, bien sûr, créer l'EXE à partir du source pour que cela marche. Le programme cherche un fichier "mes astuces.txt" dans le répertoire où se trouve son exécutable. Et ce n'est évidemment pas limité à Panoramic et Delphi, puisqu'il s'agit de simples séquences de texte, affectées d'un titre et d'une catégorie. Ce programme "mes astuces.bas" , je l'ai fait avec mon nouveau IDE. Cela se ressent à la structure. Le fichier source représente un projet IDE valide (il peut être ouvert avec l'IDE bouton "Ouvrir"). Voici le source: - Code:
-
' === Projet IDE label labels : gosub labels gosub FORM0 gosub variables gosub GUI gosub initialisations end
' === IDE subroutine labels labels: label charger_liste label categorie label copier label choix label retour label initialisations label FORM0 label GUI label variables return
' === IDE subroutine variables variables: dim rep$, s$, tit$, i%, cat_index% dim doit%, first%, found%, s1$ dim flag_sommaire% return
' === IDE subroutine GUI GUI: ' --- IDE objet list 1 top 1,10 left 1,10 height 1,530 width 1,500 show 1 active 1 show 1 active 1 on_click 1,choix
' --- IDE objet list 2 top 2,10 left 2,10 height 2,530 width 2,500 color 2,255,186,186 hide 2 active 2 ' --- IDE objet button 3 top 3,554 left 3,10 height 3,25 width 3,75 hide 3 active 3 caption 3,"Retour" on_click 3,retour
' --- IDE objet button 4 top 4,554 left 4,180 height 4,25 width 4,75 hide 4 active 4 caption 4,"Copier" on_click 4,copier ' --- IDE objet list 5 top 5,10 left 5,530 height 5,200 width 5,190 show 5 active 5 on_click 5,categorie
return
' === IDE subroutine FORM0 FORM0: top 0,0 left 0,0 height 0,650 width 0,740 show 0 active 0 caption 0,"Mes astuces" color 0,236,233,216 return
' === IDE subroutine initialisations initialisations: first% = 1 : ' premier passage cat_index% = 1 : ' toutes catégories rep$ = file_extract_path$(param_value$(0)) if right$(rep$,1)<>"\" then rep$ = rep$ + "\" file_open_read 1,rep$ + "mes astuces.txt" file_readln 1,s$ file_close 1 flag_sommaire% = 0 if s$="Sommaire:" then flag_sommaire% = 1 gosub charger_liste return
' === IDE subroutine retour retour: show 1 show 5 hide 2 hide 3 hide 4 return
' === IDE subroutine choix choix: clear 2 show 2 hide 1 hide 5 show 3 show 4 file_open_read 1,rep$ + "mes astuces.txt" tit$ = lower$(item_index$(1)) i% = instr(tit$," ") tit$ = mid$(tit$,i%+1,len(tit$)) if flag_sommaire%=1 repeat file_readln 1,s$ until instr(lower$(s$),tit$)>0 end_if repeat file_readln 1,s$ until instr(lower$(s$),tit$)>0 item_add 2,s$ while file_eof(1)=0 file_readln 1,s$ if left$(s$,2)="==" then exit_while item_add 2,s$ end_while file_close 1 return
' === IDE subroutine copier copier: s$ = "" for i%=1 to count(2) s$ = s$ + item_read$(2,i%)+chr$(13)+chr$(10) next i% clipboard_string_copy s$ return
' === IDE subroutine categorie categorie: cat_index% = item_index(5) gosub charger_liste return
' === IDE subroutine charger_liste charger_liste: clear 1 if first%=1 clear 5 item_add 5,"* Toutes catégories *" end_if file_open_read 1,rep$ + "mes astuces.txt" while file_eof(1)=0 while (left$(s$,2)<>"==") and (file_eof(1)=0) file_readln 1,s$ end_while if file_eof(1)=0 file_readln 1,s$ doit% = 1 if instr(s$,"Catégorie: ")=1 if cat_index%>1 doit% = 0 s1$ = item_read$(5,cat_index%) if instr(s$,s1$)=12 then doit% = 1 end_if if doit%=1 if first%=1 s$ = right$(s$,len(s$)-11) found% = 0 for i%=1 to count(5) if item_read$(5,i%)=s$ found% = 1 exit_for end_if next i% if found%=0 then item_add 5,s$ end_if file_readln 1,s$ end_if end_if if doit%=1 then item_add 1,s$ end_if end_while file_close 1 first% = 0 return ' === IDE EOF Le fichier "mes astuces.txt" doit être dans le répertoire où se trouve l'exécutable "mes astuces.exe". Il contient la doc éxpliquant la construction de ce fichier, plus 3 exemples d'astuces en Delphi et 1 exemple d'astuces en Panoramic (donc 2 catégories). Le nombre d'astuces et de catégories n'est pas limité. Voici le fichier "mes astuces.txt": - Code:
-
Sommaire:
Delphi: 1. Prendre un string de Panoramic 2. Retourner un string à Panoramic 3. Retourner une valeur entière à travers un paramètre
Panoramic: 1. Passer des données à une DLL -------- fin du sommaire ------------------------------------------------------------------------------
Ce fichier est utilisé par le programme "mes astuces.exe" écrit en Panoramic. Tout est ignoré jusqu'à la première ligne commençant par "==". A partir de là, les lignes commençant par "==" introduisent une nouvelle section, dont la première ligne est le titre, et qui se termine par une ligne commençant par "==" ou par la fin de fichier. Dans cet exemple, les lignes de titre sont rappelées en début de fichier pour constituer un sommaire, mais cela n'a qu'une incidence de lisibilité au niveau d'un éditeur de texte. Le programme ignore tout cela, tout comme ce texte. Cependant, si le sommaire est présent, la toute première ligne du fichier doit être "Sommaire:", suivi d'une répétition de TOUS les titres des différentes astuces contenues dans le fichier. Sinon, il suffit simplement d'omettre les lignes jusqu'à la ligne signalant la fin du sommaire: la première ligne contenant "Sommaire:" ainsi que la répétition des titres.
======================================================================================================== Catégorie: Delphi 1. Prendre un string de Panoramic
Pour prendre un string de Panoramic, faire comme dans: res% = dll_call1("GetWindowFilter",adr(txt$))
function SetWindowFilter(filter: pchar): integer; stdcall; export; var s: string; begin s := pchar(pstring(filter)^); sClassListe := Leftstr(s+StringOfChar(' ',255),255); result := 0; end;
======================================================================================================== Catégorie: Delphi 2. Retourner un string à Panoramic
Pour retourner un string à Panoramic: inclure dans USES: TextToPanoramic
puis faire comme dans: res% = dll_call1("SetWindowFilter",adr(txt$))
function GetWindowFilter(filter: integer): integer; stdcall; export; var s: string; begin s := TrimRight(sClassListe); CopyTextToPanoramic(integer(@s), 0, filter); { routine dans l'unité TextToPanoramic.pas } result := 0; end;
======================================================================================================== Catégorie: Delphi 3. Retourner une valeur entière à travers un paramètre
Pour retourner une valeur entière à travers un paramètre, faire comme dans: res% = dll_call1("test",adr(resultat%))
function test(res: integer): integer; stdcall; export; begin PInteger(res)^ := 17; result := 0: end; ======================================================================================================== Catégorie: Panoramic 1. Passer des données à une DLL
Les DLL en Panoramic n'acceptent que des entiers en paramètre. On peut donc distinguer les cas suivants:
On veut passer une valeur constante entière: On passe la valeur directement, dans le paramètre res% = dll_call1("test",17)
On veut passer une chaîne de caractères: On utilise la fonction adr() pour passer l'adresse d'une variable de type $ (les constantes "..." sont interdites) res% = dll_call1("test",adr(s$)) Une telle variable peut recevoir une chaîne de caractères en sortie. Pour cela, il faut lui réserver suffisamment de place au préalable: s$ = string(" ",255) : ' réserver 255 caractères res% = dll_call1("test",adr(s$)) print s$ : ' ici, s$ peut être modifié
On veut passer un entier et permettre à al DLL de le modifier: On utilise la fonction adr(à pour passer l'adresse d'une variable de type % (une constante ne peut être modifiée) i% = 17 res% = dll_call1("test",adr(i%)) print str$(i%) : ' ici, i% peut être modifié
| |
|
Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: application créée avec mon IDE Ven 24 Fév 2012 - 10:24 | |
| Cool, merci Klaus, j'essaye de tester ça ce soir | |
|
exdragon
Nombre de messages : 601 Date d'inscription : 05/01/2012
| Sujet: Re: application créée avec mon IDE Sam 25 Fév 2012 - 1:15 | |
| Bonne idée ce programme !
| |
|