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.
API Windows Emptypar Pedro Aujourd'hui à 8:08

» Un autre pense-bête...
API Windows Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
API Windows Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
API Windows Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
API Windows Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
API Windows Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
API Windows Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
API Windows Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
API Windows Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
API Windows Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
API Windows Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
API Windows Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
API Windows Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
API Windows Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
API Windows 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
-17%
Le deal à ne pas rater :
(Black Friday) Apple watch Apple SE GPS + Cellular 44mm (plusieurs ...
249 € 299 €
Voir le deal

 

 API Windows

Aller en bas 
+6
Pedro
Yannick
papydall
Klaus
silverman
JL35
10 participants
Aller à la page : 1, 2  Suivant
AuteurMessage
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

API Windows Empty
MessageSujet: API Windows   API Windows EmptyMer 8 Mar 2017 - 17:56

J'ai trouvé (ici sûrement, mais je ne sais plus où ni qui, peut-être silverman ?) un appel à gdi32.dll pour tracer une ellipse, et ça marche très bien.
Du coup par curiosité j'ai voulu regarder s'il n'y avait pas d'autres fonctions utilisables, j'ai trouvé une mine de renseignements ici: http://www.jasinskionline.com/windowsapi/ref/index.html et j'essaie une fonction: affichage d'un texte dans un picture, mais ça ne veut pas marcher, je récupère 'Not correct arithmetic expression' et je ne vois pas du tout pourquoi, ma syntaxe semble correcte...
Code:
' Référence: http://www.jasinskionline.com/windowsapi/ref/index.html
DIM txt$,p%,x%,y%,x1%,y1%,h%,lt%,res%
p% = 1: PICTURE p%: FULL_SPACE p%
' 1) tracé d'une ellipse
x% = 100: y% = 50: x1% = 300: y1% = 100
DLL_ON "gdi32.dll"
    h% = HANDLE_CANVAS(p%)
    res% = DLL_CALL5("Ellipse",h%,x%,y%,x1%,y1%)
DLL_OFF
display
' 2) écriture de texte
x% = 100: y% = 150: txt$ = "Hello, world"
lt% = LEN(txt$): ' taille du texte
DLL_ON "gdi32.dll"
    h% = HANDLE_CANVAS(p%)
    res% = DLL_CALL5("TextOut",h%,x%,y%,txt$,lt%)
DLL_OFF
END
Revenir en haut Aller en bas
silverman

silverman


Nombre de messages : 970
Age : 52
Localisation : Picardie
Date d'inscription : 18/03/2015

API Windows Empty
MessageSujet: Re: API Windows   API Windows EmptyMer 8 Mar 2017 - 18:57

il y a 2 erreurs:
-la fonction c'est : "TextOutA", c'est précisé sous le nom de la dll dans les pages MSDN(si on le sait pas, on le voit pas; Je me suis fait avoir aussi Very Happy )
-tu ne peux pas envoyer une "string" directement, il faut passer par son pointeur
Pour récupérer facilement le pointeur d'une "string", utilise ma fonction personnalisé(je l'utilise tout le temps).
Code:
' commande : copie de mémoire
dim kernel32%
kernel32%=3
LIBRARY kernel32%,"kernel32"
command "copy_memory","RtlMoveMemory",kernel32%,"III","stdcall"
' ex.: copy_memory adr(destination), adr(source), taille_en_octet%


' Référence: http://www.jasinskionline.com/windowsapi/ref/index.html
DIM txt$,p%,x%,y%,x1%,y1%,h%,lt%,res%
dim txt_ptr%
p% = 1: PICTURE p%: FULL_SPACE p%
' 1) tracé d'une ellipse
x% = 100: y% = 50: x1% = 300: y1% = 100
DLL_ON "gdi32.dll"
    h% = HANDLE_CANVAS(p%)
    res% = DLL_CALL5("Ellipse",h%,x%,y%,x1%,y1%)
DLL_OFF
display
' 2) écriture de texte
x% = 100: y% = 150: txt$ = "Hello, world"
lt% = LEN(txt$)-1: ' taille du texte
DLL_ON "gdi32.dll"
    h% = HANDLE_CANVAS(p%)
    copy_memory adr(txt_ptr%),adr(txt$),4                    :' <-----
    res% = DLL_CALL5("TextOutA",h%,x%,y%,txt_ptr%,lt%)       :' <-----
DLL_OFF
END
Par contre, tu arriveras à sortir du texte sur le form 0, mais pas sur le picture; 'handle_canvas(n)' ne retourne pas systématiquement le bon handle(erreur externe, ligne xxx: xxxxxxxx is not a valid integer value) du device context(le picture dans ton cas). Va savoir pourquoi? Seul jack peut nous répondre...
Revenir en haut Aller en bas
Klaus

Klaus


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

API Windows Empty
MessageSujet: Re: API Windows   API Windows EmptyMer 8 Mar 2017 - 19:30

Citation :
Va savoir pourquoi? Seul jack peut nous répondre...
Je parle sous le contrôle de Jack, mais j'ai eu quelques expériences avec le canvas des picture. A chaque modification d'un picture, le canvas est reconstruit, et son handle change. Ce n'est pas une valeur constante comme c'est le cas pour une form. Pour utiliser handle_canvas correctement, il faut le faire immédiatement avant l'appel d'une API utilisant le canvas, et encore... il ne faut pas que cette API modifie le canvas réel du picture avant l'utilisation de a valeur de handle_canvas passée en paramètre...
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

API Windows Empty
MessageSujet: Re: API Windows   API Windows EmptyMer 8 Mar 2017 - 19:48

Merci les amis pour vos remarques.

@silverman,
Pour le nom de la fonction, c'était bien TextOut dans le lien que j'ai cité, avec un exemple du même nom..
TextOutA on ne peut pas l'inventer... et pour le passage de la string, je ne savais pas, mais j'aurais dû (avec les exemples donnés ici).
Pour la sortie sur picture, le handle_canvas doit convenir puisque ça marche à tous les coups avec l'ellipse, sans problème.

@Klaus,
Pour le handle_canvas je m'en doutais un peu, qu'il faut le récupérer juste avant d'appeler la fonction, tout ça varie dynamiquement.

PS effectivement silverman, ça ne semble pas marcher sur le picture, seulement sur le Form 0, et encore il s'affiche quelque chose à l'emplacement demandé mais pas ce que je voudrais...
Je passe la chaîne sous la forme ADR(txt$), mais ça ne doit pas être aussi simple.

PS2
J'y arrive sur le Form 0, mais pas sur le picture...
Code:
DIM txt$,p%,x%,y%,x1%,y1%,h%,lt%,res%,adp%,adr%
' p% = 1: PICTURE p%: FULL_SPACE p%
p% = 0
' 1) tracé d'une ellipse
x% = 100: y% = 50: x1% = 300: y1% = 100
DLL_ON "gdi32.dll"
    h% = HANDLE_CANVAS(p%)
    res% = DLL_CALL5("Ellipse",h%,x%,y%,x1%,y1%)
DLL_OFF
display
' 2) écriture de texte
x% = 100: y% = 150: txt$ = "Hello, world"
lt% = LEN(txt$): ' taille du texte
adp% = ADR(txt$): ' adresse du pointeur
' -> adr% =  adresse de la chaîne (longueur + chaîne)
adr% = PEEK(adp%)+256*PEEK(adp%+1)+65536*PEEK(adp%+2)+16777216*PEEK(adp%+3)
DLL_ON "gdi32.dll"
    h% = HANDLE_CANVAS(p%)
    res% = DLL_CALL5("TextOutA",h%,x%,y%,adr%,lt%)
DLL_OFF
END
Revenir en haut Aller en bas
papydall

papydall


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

API Windows Empty
MessageSujet: Re: API Windows   API Windows EmptyJeu 9 Mar 2017 - 0:08

Pour info :
Dans les appels des fonctions contenues dans les API, parfois on doit utiliser non pas le nom de la fonction mais son ALIAS.
Par exemple :
TextOut c’est le nom de la fonction et ça ne marche pas !
TextOutA c’est l’ALIAS de la fonction : le A à  la fin signifie que la routine est "en version ANSI".

Si vous n’arrivez pas à faire exécuter une fonction d’une API, essayez de l’appeler non pas par son nom mais par son ALIAS en ajoutant le A à la fin.

Voici un exemple de tracé de la courbe de Lissajous utilisant la fonction SetPixel de la gdi32.dll

Code:

dim hDC%,a%,x%,y%,couleur%,ret%
' picture 10 : full_space 10 : hDC% = handle_canvas(10)
hDC% = handle_canvas(0)

couleur% = hex("0000ff") : ' < --- Attention: le code est inversé c'est BGR et non RGB
                           ' C'est rouge dans cet exemple
dll_on "gdi32.dll"
for a% = 100 to 10000
    x% = 250+200*cos(a%/3)
    y% = 220+200*sin(a%/3.5)
    ret% = dll_call4("SetPixel",hDC%,x%,y%,couleur%)
next a%



Essayez le tracé sur FORM 0 puis sur PICTURE 10 et observez le comportement.



EDIT : dans le lien que tu as donné, il est bien précisé Allias "TextOutA".
Il faut TOUJOURS utiliser l'Alias s'il existe.


Citation :

TextOut Function

Declare Function TextOut Lib "gdi32.dll" Alias "TextOutA" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal lpString As String, ByVal nCount As Long) As Long

Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
papydall

papydall


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

API Windows Empty
MessageSujet: Re: API Windows   API Windows EmptyJeu 9 Mar 2017 - 3:16

Lancez le programme et observez : il va tout seul cliquer sur le button comme si vous le faisiez vous-même.

Code:

rem ============================================================================
rem         Simulation de ON_CLICK par mouse_event de la USER32.DLL
rem ============================================================================
label test
dim x%,y%,ret%
button 10 : left 10,100 : top 10,50 : caption 10,"Test" : on_click 10,test
x% = left(10) + 30 : y% = top(10) + 30
dll_on "user32"

' Déplacer le curseur de la souris aux coordonnées du button
ret% = dll_call2("SetCursorPos",x%,y%)
pause 1000  : ' Pour observer
' Simuler ON_CLICK
 ret% = dll_call5("mouse_event",2,0,0,0,0) : ' 2 <--- bouton gauche appuyé
 ret% = dll_call5("mouse_event",4,0,0,0,0) : ' 4 <--- bouton gauche relâché

end
rem ============================================================================
test:
   message "Simulation de ON_CLICK"
return
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Yannick




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

API Windows Empty
MessageSujet: re   API Windows EmptyJeu 9 Mar 2017 - 4:22

Cela ne fonctionne pas chez moi...
Sad
Revenir en haut Aller en bas
Pedro

Pedro


Nombre de messages : 1595
Date d'inscription : 19/01/2014

API Windows Empty
MessageSujet: Simulation de 'on_click'.   API Windows EmptyJeu 9 Mar 2017 - 8:34

Bonjour à tous.

J'ai testé la routine.
Elle ne fonctionnait pas sur mon PC sous Windows 10.

Mais, en remplaçant 30 par 40 dans la ligne suivante, tout fonctionne correctement.

y% = top(10) + 30

->

y% = top(10) + 40
Revenir en haut Aller en bas
papydall

papydall


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

API Windows Empty
MessageSujet: Re: API Windows   API Windows EmptyJeu 9 Mar 2017 - 10:49

Citation :
Cela ne fonctionne pas chez moi...sous w10

Cela est dù à ce que les dimensions du bandeau sont différentes selon la version de Windows.
X% et y% sont les coordonnées absolues de la souris.
Pour que ça marche sur tous les Wndows (xp,7,8,10), il faut déterminer la hauteur du bandeau.
Pour cela :

Code:

bandeau% = height(0) - height_client(0)

Puis ajouter cette valeur à y%

Voici le code qui devrait marcher sous XP,7…10

Code:

rem ============================================================================
rem         Simulation de ON_CLICK par mouse_event de la USER32.DLL
rem ============================================================================
label test
dim x%,y%,ret%,bandeau%
button 10 : left 10,100 : top 10,50 : caption 10,"Test" : on_click 10,test
bandeau% = height(0) - height_client(0)
x% = left(10) + 30 : y% = top(10) + bandeau%
dll_on "user32"

' Déplacer le curseur de la souris aux coordonnées du button
ret% = dll_call2("SetCursorPos",x%,y%)
pause 1000  : ' Pour observer
' Simuler ON_CLICK
 ret% = dll_call5("mouse_event",2,0,0,0,0) : ' 2 <--- bouton gauche appuyé
 ret% = dll_call5("mouse_event",4,0,0,0,0) : ' 4 <--- bouton gauche relâché

end
rem ============================================================================
test:
   message "Simulation de ON_CLICK"
return


Une autre idée : déterminer les décalages dx% et dy% d’abord.
Puis ajouter ces valeurs aux coordonnées x% et y%

Code:

rem ============================================================================
rem         Simulation de ON_CLICK par mouse_event de la USER32.DLL
rem ============================================================================
label test
dim x%,y%,ret%,dx%,dy%
button 10 : left 10,100 : top 10,50 : caption 10,"Test" : on_click 10,test
dx% = width(0)  - width_client(0)
dy% = height(0) - height_client(0)
x% = left(10) + dx% : y% = top(10) + dy%
dll_on "user32"

' Déplacer le curseur de la souris aux coordonnées du button
ret% = dll_call2("SetCursorPos",x%,y%)
pause 1000  : ' Pour observer
' Simuler ON_CLICK
 ret% = dll_call5("mouse_event",2,0,0,0,0) : ' 2 <--- bouton gauche appuyé
 ret% = dll_call5("mouse_event",4,0,0,0,0) : ' 4 <--- bouton gauche relâché

end
rem ============================================================================
test:
   message "Simulation de ON_CLICK"
return

Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

API Windows Empty
MessageSujet: Re: API Windows   API Windows EmptyMar 5 Déc 2017 - 22:33

Je remonte ce vieux sujet concernant l'utilisation des API Windows.
J'avais soumis un code qui ne marchait pas, et qui a judicieusement été corrigé par silverman.

L'objectif était de tracer une ellipse et d'écrire un texte sur un picture en utilisant gdi32.dll.                          
Pour l'ellipse ça marche, mais on en était arrivés à la conclusion que ce n'était pas possible de tracer un texte sur le picture (seulement sur un Form).
J'ai repris le code (version silverman), et juste avant l'appel au tracé de texte, j'ai ajouté une opération graphique invisible sur le picture: 2D_LINE 0,0,0,0 (ligne  24), et là miracle, le texte s'affiche bien sur le picture:
Code:
' commande : copie de mémoire
dim kernel32%
kernel32%=3
LIBRARY kernel32%,"kernel32"
command "copy_memory","RtlMoveMemory",kernel32%,"III","stdcall"
' ex.: copy_memory adr(destination), adr(source), taille_en_octet%

' Référence: http://www.jasinskionline.com/windowsapi/ref/index.html
DIM txt$,p%,x%,y%,x1%,y1%,h%,lt%,res%
dim txt_ptr%
COLOR 0,180,255,255: border_small 0
p% = 1: PICTURE p%: width p%,500: HEIGHT p%,200

' 1) tracé d'une ellipse
x% = 100: y% = 50: x1% = 300: y1% = 100
DLL_ON "gdi32.dll"
    h% = HANDLE_CANVAS(p%)
    res% = DLL_CALL5("Ellipse",h%,x%,y%,x1%,y1%)
DLL_OFF

' 2) écriture de texte
x% = 40: y% = 120: txt$ = "Hello, world": txt$ = "Au clair de la lune "
lt% = LEN(txt$): ' taille du texte
2D_LINE 0,0,0,0
DLL_ON "gdi32.dll"
    h% = HANDLE_CANVAS(p%)
    copy_memory adr(txt_ptr%),adr(txt$),4                    :' <-----
    res% = DLL_CALL5("TextOutA",h%,x%,y%,txt_ptr%,lt%)       :' <-----
DLL_OFF
display
END
Ce que je ne sais pas (encore...) par contre, c'est comment modifier les caractéristiques du texte: police, taille etc.

PS Tout simplement, le texte a les caractéristiques texte du picture cible (Font_Name, Font_Size etc...)
Malheureusement il s'écrit sur fond blanc (fond non transparent... dommage...)
Revenir en haut Aller en bas
Klaus

Klaus


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

API Windows Empty
MessageSujet: Re: API Windows   API Windows EmptyMar 5 Déc 2017 - 23:09

Avant d'écrire le texte, il faudrait définir
Brush.Style = bsClear
Ceci signifie "fond transparent pour l'écriture"
Je dis ça parce que je fais ça en Delphi dans mes fonctions de traitement d'image. Et sans avoir regardé le code - juste pour passer dans quelle direction il faut chercher...
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

API Windows Empty
MessageSujet: Re: API Windows   API Windows EmptyMar 5 Déc 2017 - 23:15

Merci Klaus pour la suggestion,
effectivement ça semble être une piste intéressante...
Par contre je ne vois pas l'équivalent dans les fonctions API Windows...

Il ne semble pas y en avoir dans les fonctions 'Fonts & Text'

Et si on ne peut pas faire de fond transparent, ça perd évidemment tout son intérêt, autant utiliser les fonctions Panoramic d'écriture.
Merci en tout cas, et maintenant... Sleep
Revenir en haut Aller en bas
Klaus

Klaus


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

API Windows Empty
MessageSujet: Re: API Windows   API Windows EmptyMar 5 Déc 2017 - 23:39

Tout dépend des fonctions exportées par gdi32.dll. Je ne connais pas cette dll.
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

API Windows Empty
MessageSujet: Re: API Windows   API Windows EmptyMer 6 Déc 2017 - 1:36

Salut tout le monde.

Profitant d’une sensible amélioration de ma santé, j’interviens ici pour « exhiber mon savoir » tongue

Code:

dim kernel32%
kernel32%=3
LIBRARY kernel32%,"kernel32"
command "copy_memory","RtlMoveMemory",kernel32%,"III","stdcall"
dim txt_ptr%
dim x%,y%,x1%,y1%,h%,res%
dim txt$ : txt$ = "Salut tout le monde"
dim long% : long% = len(txt$)
picture 10 : full_space 10

x% = 200: y% = 100: x1% = 400: y1% = 300
DLL_ON "gdi32.dll"
    h% = HANDLE_CANVAS(10)
    
    res% = DLL_CALL5("Ellipse",h%,x%,y%,x1%,y1%) : ' Tracé d'une ellipse (cercle)
    res% = dll_call2("SetBkColor",h%,hex("ff0000")) : ' Couleur du fond; le code est inversé c'est BGR et non RGB, ici c'est bleu
    res% = dll_call2("SetTextColor",h%,hex("0000ff")) : ' Couleur du texte, ici c'est rouge
    copy_memory adr(txt_ptr%),adr(txt$),4  
    res% = DLL_CALL5("TextOutA",h%,x%+50,y%+100,txt_ptr%,long%) : ' Affichage du texte
    
DLL_OFF

ça donne:
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
pascal10000

pascal10000


Nombre de messages : 812
Localisation : Troyes
Date d'inscription : 05/02/2011

API Windows Empty
MessageSujet: Re: API Windows   API Windows EmptyMer 6 Déc 2017 - 6:41

c cool papydall pour ton rétablissement

pour ton code tu me coupe le sifflet!!

à la ligne 3 et 4. panoramic devrait se planter
je n'ai pas du tout compris Question Question Question Question Question
du fait que LIBRARY et command ne soient pas déclaré en dim
tu peut expliquer la chose!!
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

API Windows Empty
MessageSujet: Re: API Windows   API Windows EmptyMer 6 Déc 2017 - 8:30

Depuis la version instantanée du 20 mars 2016 : PANORAMIC V 0.9.27i6, les commandes suivantes ont été implémentées:
Citation :
LIBRARY N, L$ : déclaration d'une bibliothèque
N : numéro de la bibliothèque
L$ : nom absolu ou relatif de la bibliothèque (exemple : ma_lib.dll)

COMMAND CP$,CL$,N,T$,C$ : déclaration d'une commande
CP$ : nom de la commande pour PANORAMIC
CL$ : nom de la commande dans la bibliothèque (attention, CL$ est sensible à la casse : respectez majuscules et minuscules)
N : numéro de la bibliothèque dans laquelle on trouve la commande
T$ : chaine de caractères donnant le type de chaque paramètre : I (entier) R (réel) S (chaine de caractères)
C$ : convention d'appel de la commande

FUNCTION CP$,CL$,N,T$,C$ : déclaration d'une fonction
CP$ : nom de la fonction pour PANORAMIC
CL$ : nom de la fonction dans la bibliothèque (attention, CL$ est sensible à la casse : respectez majuscules et minuscules)
N : numéro de la bibliothèque dans laquelle on trouve la fonction
T$ : chaine de caractères donnant le type de chaque paramètre : I (entier) R (réel) S (chaine de caractères)
C$ : convention d'appel de la fonction

Le type de retour est dans le nom de la fonction Panoramic:
fonction "fn","fonction_dans_dll",1,"II","stdcall" définit que fonction_dans_dll retourne un réel
fonction "fn%","fonction_dans_dll",1,"II","stdcall" définit que fonction_dans_dll retourne un entier
fonction "fn$","fonction_dans_dll",1,"II","stdcall" définit que fonction_dans_dll retourne une chaine de caractères

Pour le moment, cela ne fonctionne :
- qu'avec 6 paramètres maximum,
- que lorsque les paramètres sont entiers (I)
- que lorsque les fonctions retournent des nombres
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
pascal10000

pascal10000


Nombre de messages : 812
Localisation : Troyes
Date d'inscription : 05/02/2011

API Windows Empty
MessageSujet: Re: API Windows   API Windows EmptyMer 6 Déc 2017 - 9:25

merci klaus pour ces précisions

je ne savais pas que ces commandes étaient disponibles
j'ai cru qu'il étaient en cour de réalisation!
Revenir en haut Aller en bas
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

API Windows Empty
MessageSujet: Re: API Windows   API Windows EmptyMer 6 Déc 2017 - 13:48

Tout d'abord papydall, bon courage , tu tiens le bon bout !

Une remarque: il semble que les figures (dans mon exemple une ellipse) soient tracées à 'fond plein'.
Comme le texte dans ton exemple, ce qui n'est pas très intéressant, on fait aussi bien avec les commandes Panoramic.

Si je reprends ton exemple, pour voir, je colore d'abord le picture en cyan:
la ligne 9 devient:
picture 10 : FULL_SPACE 10: color 10,164 ,255,255

et là, mystère, plus rien ne s'affiche !
Revenir en haut Aller en bas
Klaus

Klaus


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

API Windows Empty
MessageSujet: Re: API Windows   API Windows EmptyMer 6 Déc 2017 - 14:11

Tu peux adapter la couleur de fond du texte en modifiant la ligne
Code:
res% = dll_call2("SetBkColor",h%,hex("ff0000")) : ' Couleur du fond; le code est inversé c'est BGR et non RGB, ici c'est bleu
en utilisant la couleur du fond...

Mais ce n'est qu'ile solution partielle. En effet, si le texte est à cheval sur différents détails de l'image. Dans ce cas, il faut bien arriver à gérer la propriété "BRUSH.STYLE". Je sais faire en Delphi, mais pour cette DLL, je laisse Papydall trouver l'astuce.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

API Windows Empty
MessageSujet: Re: API Windows   API Windows EmptyMer 6 Déc 2017 - 14:50

Oui Klaus, je sais bien qu'on peut modifier la couleur de fond du texte, mais ça on le fait encore plus facilement en panoramic pur, donc aucun intérêt !
Ce qui m'intéresse c'est écrire à fond transparent, ce qu'on ne peut pas faire en panoramic, il faut faire appel à des ressources externes.

Je l'ai déjà fait avec avec une image en SCENE2D comme fond et des sprites contenant le texte, avec la notion de transparence, là c'est possible, mais un peu moins simple.
Revenir en haut Aller en bas
papydall

papydall


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

API Windows Empty
MessageSujet: Re: API Windows   API Windows EmptyMer 6 Déc 2017 - 15:26

La fonction SetBkMode peut faire l’affaire : elle fixe le mode d’affichage pour le périphérique sélectionné (fond transparent ou font opaque)


Code:

rem ============================================================================
rem   Affichage d’un texte sur fond opaque ou sur fond transparent
rem ============================================================================

LIBRARY 1,"kernel32"
command "copy_memory","RtlMoveMemory",1,"III","stdcall"
dim txt_ptr%
dim x%,y%,h%,res%
dim txt$ : txt$ = "Salut tout le monde"
dim long% : long% = len(txt$)
dim transparent% : transparent% = 1  : ' fond transparent
dim opaque%      : opaque% = 2       : ' fond opaque
full_space 0
x% = 200: y% = 100
h% = HANDLE_CANVAS(0)
dll_on "user32"
res% = dll_call1("PaintDesktop",H%) : ' Afficher l’image de fond du bureau
dll_off
DLL_ON "gdi32.dll"
    
    res% = dll_call2("SetBkMode",h%,transparent%)  : ' Fond transparent
    res% = dll_call2("SetBkColor",h%,hex("ffffff")) : ' Couleur du fond; le code est inversé c'est BGR et non RGB, ici c'est bleu
    res% = dll_call2("SetTextColor",h%,hex("0000ff")) : ' Couleur du texte, ici c'est rouge
    copy_memory adr(txt_ptr%),adr(txt$),4  
    res% = DLL_CALL5("TextOutA",h%,x%,y%,txt_ptr%,long%) : ' Affichage du texte sur fond trasparent
    res% = dll_call2("SetBkMode",h%,opaque%)  : ' Fond Opaque
    res% = DLL_CALL5("TextOutA",h%,x%+50,y%+100,txt_ptr%,long%) : ' Affichage du texte sur fond opaque
DLL_OFF
rem ============================================================================



Le code a été édité deux fois
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

API Windows Empty
MessageSujet: Re: API Windows   API Windows EmptyMer 6 Déc 2017 - 15:54

Génial papydall ! ça marche !

J'ai écrit sur une image dans un picture (et non sur le Form 0 comme toi), et ça fonctionne très bien.
Et on peut facilement moduler les caractéristiques du texte: police, taille, couleur, etc. simplement avec les paramètres print du picture: Font_Name, Font_Size, etc.

Super, merci à toi, et soigne-toi bien surtout, on a encore besoin de tes lumières ! (c'est désintéressé...)
Revenir en haut Aller en bas
papydall

papydall


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

API Windows Empty
MessageSujet: Re: API Windows   API Windows EmptyMer 6 Déc 2017 - 16:05

Merci JL35
Je t’offre une cerise  à mettre sur le gâteau.
On peut définir le nombre d’espaces à mettre entre les caractères du texte.
C’est la fonction SetTextCharacterExtra qui fait ça


Code:

rem ============================================================================
rem   Affichage d’un texte sur fond opaque ou sur fond transparent
rem ============================================================================

LIBRARY 1,"kernel32"
command "copy_memory","RtlMoveMemory",1,"III","stdcall"
dim txt_ptr%
dim x%,y%,h%,res%
dim txt$ : txt$ = "Salut tout le monde"
dim long% : long% = len(txt$)
dim transparent% : transparent% = 1  : ' fond transparent
dim opaque%      : opaque% = 2       : ' fond opaque
dim NbEspaces% : NbEspaces% = 10     : ' Nombre d’espaces entre les caractères lors de l’écriture
full_space 0
x% = 500: y% = 300
h% = HANDLE_CANVAS(0)
dll_on "user32"
res% = dll_call1("PaintDesktop",H%) : ' Afficher l’image de fond du bureau
dll_off
DLL_ON "gdi32.dll"

    res% = dll_call2("SetTextCharacterExtra",h%,NbEspaces%) : ' Ajouter NbEspaces% entre chaque caractère
    
    res% = dll_call2("SetBkMode",h%,transparent%)  : ' Fond transparent
    res% = dll_call2("SetBkColor",h%,hex("ffffff")) : ' Couleur du fond; le code est inversé c'est BGR et non RGB, ici c'est bleu
    res% = dll_call2("SetTextColor",h%,hex("0000ff")) : ' Couleur du texte, ici c'est rouge
    copy_memory adr(txt_ptr%),adr(txt$),4  
    res% = DLL_CALL5("TextOutA",h%,x%,y%,txt_ptr%,long%) : ' Affichage du texte sur fond trasparent
    res% = dll_call2("SetBkMode",h%,opaque%)  : ' Fond Opaque
    res% = DLL_CALL5("TextOutA",h%,x%,y%+100,txt_ptr%,long%) : ' Affichage du texte sur fond opaque
DLL_OFF
rem ============================================================================
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

API Windows Empty
MessageSujet: Re: API Windows   API Windows EmptyMer 6 Déc 2017 - 16:44

Merci pour la cerise ! je n'en ai pas l'usage pour le moment, mais qui sait...

Du coup la petite sub d'écriture d'un texte sur un picture, enrichie de tes lumières:
Code:
SUB TextToPict(p%,txt$,x%,y%,pol$,sz%,r%,g%,b%,enr%)
  ' Écriture du texte txt$ sur le picture p% en x%,y%, Police pol$, Taille sz%
  ' Couleur r%,g%,b%
  ' Enrichissements enr% (=1 gras, =2 italique, =4 souligné, combinables
  DIM_LOCAL h%,res%,pt%,lg%
  lg% =  LEN(txt$)
  PRINT_TARGET_IS p%: FONT_NAME p%,pol$: FONT_SIZE p%,sz%: FONT_COLOR p%,255,0,0
  FONT_BOLD_OFF p%: FONT_ITALIC_OFF p%: FONT_UNDERLINE_OFF p%
  IF BIN_AND(enr%,1) = 1 THEN FONT_BOLD p%
  IF BIN_AND(enr%,2) = 2 THEN FONT_ITALIC p%
  IF BIN_AND(enr%,4) = 4 THEN FONT_UNDERLINE p%
  LIBRARY 1,"kernel32"
  COMMAND "copy_memory","RtlMoveMemory",1,"III","stdcall"
  DLL_ON "gdi32.dll"
      h% = HANDLE_CANVAS(p%)
      res% = DLL_CALL2("SetBkMode",h%,1): ' 1 = Fond transparent
      copy_memory ADR(pt%),ADR(txt$),4
      res% = DLL_CALL5("TextOutA",h%,x%,y%,pt%,lg%): ' Texte fond transparent
  DLL_OFF
END_SUB
API Windows Img11
Revenir en haut Aller en bas
silverman

silverman


Nombre de messages : 970
Age : 52
Localisation : Picardie
Date d'inscription : 18/03/2015

API Windows Empty
MessageSujet: Re: API Windows   API Windows EmptyJeu 7 Déc 2017 - 10:38

@JL35
Tu pouvait le faire aussi en pur panoramic:
Code:
picture 10
2d_target_is 10
width 10,300 : height 10,200
 color 10, 50,100,150                           :' couleur du fond du PICTURE
' file_load 10,"C:\Program Files\Panoramic Editor V 0.9.25\rainbow.bmp"

print_target_is 10                             :' Diriger la sortie de PRINT vers le PICTURE
FONT_NAME 10,"Segoe UI"                        
font_size 10,29                                :' Taille des caractères
 
2d_fill_color 255,255,0                        :' couleur de fond du texte
font_color 10,255,0,0                          :' couleur du texte
print_locate 15,30 : print "HELLO WORLD!"


2d_fill_color 255,255,0                        :' couleur de fond du texte
2d_fill_off                                    :' désaciver le background du texte(le rendre transparent)
font_color 10,255,0,0                          :' couleur du texte
print_locate 15,100 : print "HELLO WORLD!"

Revenir en haut Aller en bas
Contenu sponsorisé





API Windows Empty
MessageSujet: Re: API Windows   API Windows Empty

Revenir en haut Aller en bas
 
API Windows
Revenir en haut 
Page 1 sur 2Aller à la page : 1, 2  Suivant
 Sujets similaires
-
» Windows 7/8 vers Windows 10
» Windows 10
» Windows 10
» Windows 7
» nombres a virgule...

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Présentation et bavardage-
Sauter vers: