Au sujet de l'API #EM_FMLINES (rubrique Editor Input)

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
pat
Messages : 411
Inscription : mar. 24/nov./2009 15:13

Au sujet de l'API #EM_FMLINES (rubrique Editor Input)

Message par pat »

Bonjour,
Ne connaissant pas très bien l'Anglais, j'ai quand même essayé de comprendre l'API ci-dessus.
Si j'ai bien compris, cette fonction envoi un flag pour que le système envoi 2 caractères de fin de ligne (option #TRUE et donc #FALSE pas de caractères de fin de ligne, ce que je cherche).
J'ai essayé cette fonction dans un Editor Gadget et il se passe strictement rien.
La fonction ne semble pas fonctionner.
En effet, mon objectif était de savoir combien de caractère était dans mon Editor Gadget.
Bien évidemment une fonction comme debug SEND_MESSAGE(gadget(n° du gadget),#WM_GETTEXT,0,0) et le système vous renvoi le nombre de caractères. Mais il faut bien comprendre qu'il compte les retours de lignes. Soit le chr$(13)+chr$(10) pour chaque retour à la ligne alors que si l'on tient compte de compter où se situe le curseur le nombre n'est pas le même (comptage avec SEND_MESSAGE(gadget(n° du gadget),#WM_GETSEL,@début,@fin) et la variable fin ne donne pas le même nombre car il ne compte pas les retours de ligne. Comment faire coïncider les 2 compteurs ?
Merci pour celui (ou celle) qui accepterait de m'éclairer.
:lol:
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Re: Au sujet de l'API #EM_FMLINES (rubrique Editor Input)

Message par Le Soldat Inconnu »

En faisant un removestring(Texte, chr(13)) et removestring(Texte, chr(10)), non ? comme ça tu comptes toujours sans les retours à la ligne
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Au sujet de l'API #EM_FMLINES (rubrique Editor Input)

Message par Backup »

ou alors nombre de caractere-(nombre de ligne*2)
puisque tu a 2 caracteres en trop par ligne .... ;)
pat
Messages : 411
Inscription : mar. 24/nov./2009 15:13

Re: Au sujet de l'API #EM_FMLINES (rubrique Editor Input)

Message par pat »

Merci Le Soldat Inconnu et Dobro pour votre réponse.
Effectivement le Removstring marche et je peux donc supprimer les chr(13) et chr(10) mais comme je dois me situer dans un Editor Gadget, à chaque intervention dans ce gadget il faudrait à chaque fois faire ce processus.
Pour un fichier court, pas de problème, mais quand il y a beaucoup de texte le système s'alourdit franchement et risque de perturber le programme. Il faudrait quelque chose de plus naturel comme l'API ci-dessus.
En ce qui concerne compter le nombre de ligne et soustraire le nombre de ligne*2, c'est comme ci-dessus mais en plus cela ne marche pas car après mon Editor Gadget j'ai envoyé un SEND_MESSAGE avec la fonction #SETTARGETDEVICE (que vous m'avez aimablement donné et qui est pour moi indispensable pour ce genre de gadget). Il faut savoir qu'il y a effectivement un API qui compte les lignes du gadget mais quand on inclus la fonction #SETTARGETDEVICE les lignes ne correspondent pas au nombre de chr(13)+chr(10) car chaque retour de ligne physique (c'est-à-dire qui va à la ligne après la limitation du gadget) est compté.
Merci quand même d'avoir essayé de m'aider.
En ce qui concerne les API j'ai l'impression que certains ne fonctionnent pas dans PureBasic, peut-être à cause du fait que ce basic est de haut niveau et il faudrait peut-être du plus bas niveau comme l'Assembleur ou le C.
Un autre objectif pour moi est de pouvoir éteindre l'ordinateur par programme et j'ai trouvé l'API suivant :
#INITIATESYSTEMESHUTDOWN (rubrique système ShutDown) et celui-ci ne fonctionne pas non plus.
Comment faites-vous pour éteindre l'ordinateur par programme (l'API ci-dessus semble très bien mais faut-il qu'il fonctionne dans PureBasic même si le mot-clé est supporté par PureBasic).
Merci à vous pour vos recherches.
:roll:
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Au sujet de l'API #EM_FMLINES (rubrique Editor Input)

Message par Ar-S »

Pour des retours automatique dans un éditor
SendMessage_(GadgetID(gadget), #EM_SETTARGETDEVICE, #Null, 0)

C'est un peu logique ton problème. Soit tu colles un texte qui n'a pas de retour à la ligne et là sa marche, soit ton texte contient des retours à la ligne (ils sont donc présent physiquement) et donc, le removestring devient indispensable.
la formule de Dobro est pas mal aussi mais peut à mon avis entrainer une erreur pour la dernière ligne.. car il peut y avoir un retour à la ligne.. ou pas ! :P

Code : Tout sélectionner

Enumeration
  #WIN
  #Text_0
  #AFF
  #BT
  #BT_EFF
EndEnumeration

; ;Procedure pour retour automatique dans un editorGadget
; Procedure RetourAuto(gadget)
  ; SendMessage_(GadgetID(gadget), #EM_SETTARGETDEVICE, #Null, 0)
; EndProcedure

Procedure OpenWindow_WIN()
  If OpenWindow(#WIN, 450, 200, 369, 240, "Window_0", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
    TextGadget(#Text_0, 0, 5, 345, 20, "Tape ton texte (ou copie colle) puis clic sur le bouton")
    EditorGadget(#AFF, 1, 25, 80, 170)
    SetGadgetText(#AFF,"ce texte contient 31 caractères")
    RetourAuto(#AFF)
    ButtonGadget(#BT, 5, 205, 235, 30, "Compte")
    ButtonGadget(#BT_EFF, 244, 205, 120, 30, "Efface")
  EndIf
EndProcedure

OpenWindow_WIN()

;{- Event loop
Repeat
  Select WaitWindowEvent()
      ; ///////////////////
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #Text_0
        Case #AFF
          text$=GetGadgetText(#AFF)
          compte=Len(text$)
        Case #BT
          text$=GetGadgetText(#AFF)
          compte=Len(text$)
          MessageRequester("Combien ?","Le texte contient "+Str(compte)+" caractères")
        Case #BT_EFF
          text$="" : SetGadgetText(#AFF,"")
      EndSelect
      ; ////////////////////////
    Case #PB_Event_CloseWindow
      Select EventWindow()
        Case #WIN
          CloseWindow(#WIN)
          Break
      EndSelect
  EndSelect
ForEver
;
;}
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
pat
Messages : 411
Inscription : mar. 24/nov./2009 15:13

Re: Au sujet de l'API #EM_FMLINES (rubrique Editor Input)

Message par pat »

Merci Ar-S pour ta réponse.
Je peux dire que le #SETTARGETDEVICE est devenu plus que primordial dans un Editor Gadget.
Je l'ai utilisé pour le programme que je viens de terminer en PureBasic.
Mais peut-on m'aider pour savoir comment éteindre l'ordinateur par programme ?
Merci à ceux qui me répondront.
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Au sujet de l'API #EM_FMLINES (rubrique Editor Input)

Message par Ar-S »

Tiré de la droopy lib mais non testé :

Code : Tout sélectionner

ProcedureDLL Logoff() 
 
  ;/ Need ExitWindowsEx Constants

  ;/ Need Structure MyLUID & MyTOKEN  
  
 
  hdlProcessHandle = GetCurrentProcess_() 
  OpenProcessToken_(hdlProcessHandle, #TOKEN_ADJUST_PRIVILEGES | #TOKEN_QUERY, @hdlTokenHandle) 
  SysName.s=""+Chr(0) 
  Name.s="SeShutdownPrivilege"+Chr(0) 
  Erg.l=LookupPrivilegeValue_(SysName, Name, @tmpLuid) 
  tmpLuid\Attributes = #SE_PRIVILEGE_ENABLED 
  tkp\PrivilegeCount = 1  
  tkp\LowPart = tmpLuid\LowPart 
  tkp\HighPart = tmpLuid\HighPart 
  tkp\Attributes = tmpLuid\Attributes 
  Erg.l = AdjustTokenPrivileges_(hdlTokenHandle,0,@tkp,SizeOf(MyTOKEN),@tkpNewButIgnored,@lBufferNeeded) 
  Erg.l = ExitWindowsEx_((#EWX_LOGOFF | #EWX_FORCE), 0) 
EndProcedure 

;} Logoff (End)
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
pat
Messages : 411
Inscription : mar. 24/nov./2009 15:13

Re: Au sujet de l'API #EM_FMLINES (rubrique Editor Input)

Message par pat »

Merci Ar-S.
Ces codes sont bien compliqués et il semble que cela soit tiré directement de la dll.
Je vais voir ce que je peux faire avec.
Merci aussi à ton intervention de ma réponse au sujet de l'Editeur Visuel.
Répondre