Mejoras para scintilla

User avatar
mastintin
Posts: 1502
Joined: Thu May 27, 2010 2:06 pm

Re: Mejoras para scintilla

Post by mastintin »

cnavarro wrote:Manuel
Puedes compartir el metodo oSlide:GetValue()?
Aunque entiendo lo que deberia devolver, no puedo desarrollarlo ahora
LO siento , es un methodo del slider de fivemac . ¿ no tiene equivalente en windows ? algo como oSlide:nValue ?

.......... edito ..................

He mirado el código del slider y seria algo asi :

oSlider:nGetVal( oslider:nPos )

puede que con oSlider:nPos sea suficiente
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Mejoras para scintilla

Post by cnavarro »

Ya me he dado cuenta
Y he mirado el codigo fuente de FiveMac y ya se mas o menos por donde pueden ir los tiros, aunque ahora no tengo tiempo para pruebas

Nada, no hay manera, lo dejo por imposible, no me reconoce ni las datas ni los metodos cuando lo llamo, ya mirare por que: las variables bien definidas, son static, etc
"Message not found: nPos"
"Message not found: nGetVal"
etc.

Code: Select all

if !Empty( oBar )
   @ 3, nRightPos BUTTON oSayZoom PROMPT "Zoom : 100%" OF oBar ;
          SIZE 110, 16 PIXEL ;
          ACTION oSayZoom:SetText("Zoom : "+ ;
                AllTrim(str( ( ( oEditor:SetZoomBar( 0 )+10)*10 ) ) )+ "%" )
    //oSayZoom:SetBezelStyle( 13 )
   @ 3, nRightPos + 120 SLIDER oSlide SIZE 100,18 OF oBar PIXEL RANGE -9, 20 ;
     MARKS 6 ON CHANGE ( oSayZoom:SetText("Zoom : "+ ;
     RTrim(Str( ((oEditor:SetZoomBar( nValSlider() )+10)*10) ) )+ "%" ))      
      //RTrim(Str( ((oEditor:SetZoomBar( oSlide:nGetVal( oSlide:nPos ) )+10)*10) ) )+ "%" ))
   //oSlide:SetMinMaxValue( -9, 20 )
   //oSlide:bChange := {|| oSayZoom:SetText("Zoom : "+ ;
   // AllTrim(Str( ((oEditor:SetZoomBar( oSlide:GetValue() )+10)*10) ) )+ "%" )}   

..../....

Function nValSlider()
Local nPos
nPos := oSlide:nPos
nPos := oSlide:nGetVal( nPos )
Return nPos
endif 
 
Qué opinas de la imagen del post anterior?
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
User avatar
mastintin
Posts: 1502
Joined: Thu May 27, 2010 2:06 pm

Re: Mejoras para scintilla

Post by mastintin »

cnavarro wrote:Ya me he dado cuenta
Y he mirado el codigo fuente de FiveMac y ya se mas o menos por donde pueden ir los tiros, aunque ahora no tengo tiempo para pruebas

Nada, no hay manera, lo dejo por imposible, no me reconoce ni las datas ni los metodos cuando lo llamo, ya mirare por que: las variables bien definidas, son static, etc
"Message not found: nPos"
"Message not found: nGetVal"
etc.

Code: Select all

if !Empty( oBar )
   @ 3, nRightPos BUTTON oSayZoom PROMPT "Zoom : 100%" OF oBar ;
          SIZE 110, 16 PIXEL ;
          ACTION oSayZoom:SetText("Zoom : "+ ;
                AllTrim(str( ( ( oEditor:SetZoomBar( 0 )+10)*10 ) ) )+ "%" )
    //oSayZoom:SetBezelStyle( 13 )
   @ 3, nRightPos + 120 SLIDER oSlide SIZE 100,18 OF oBar PIXEL RANGE -9, 20 ;
     MARKS 6 ON CHANGE ( oSayZoom:SetText("Zoom : "+ ;
     RTrim(Str( ((oEditor:SetZoomBar( nValSlider() )+10)*10) ) )+ "%" ))      
      //RTrim(Str( ((oEditor:SetZoomBar( oSlide:nGetVal( oSlide:nPos ) )+10)*10) ) )+ "%" ))
   //oSlide:SetMinMaxValue( -9, 20 )
   //oSlide:bChange := {|| oSayZoom:SetText("Zoom : "+ ;
   // AllTrim(Str( ((oEditor:SetZoomBar( oSlide:GetValue() )+10)*10) ) )+ "%" )}   

..../....

Function nValSlider()
Local nPos
nPos := oSlide:nPos
nPos := oSlide:nGetVal( nPos )
Return nPos
endif 
 
Qué opinas de la imagen del post anterior?
Con el código que pones tendría que funcionar sin problema pues supongo que oslide es estática para que la vea la función en onchange :( .
has probado pasando a la función nValSlider un oThis ? .LO miro en un ejemplo autocontenido y te digo algo .
Menudo arreón le has dado al scintilla :D . Se ve superbien .
Como comentario , he investigado que eventos maneja scintilla y el botón derecho del raton parece que no lo notifica así que lo de poder tener menu contextual cuando estamos sobre el texto al menos en Mac no va a ser sencillo .
User avatar
mastintin
Posts: 1502
Joined: Thu May 27, 2010 2:06 pm

Re: Mejoras para scintilla

Post by mastintin »

cristobal lo tengo , este código funciona perfecto . Es auto contenido ...

Code: Select all


Function main()

  local oDlg, oFont
  local oSlide, oSayZoom
  local n, nVar := 0

  DEFINE FONT oFont NAME "Arial" SIZE 0, -30 BOLD

  DEFINE DIALOG oDlg TITLE "Sliders dialog" ;
    FROM 50, 50 TO 400, 500 PIXEL

   @ 80, 20 BUTTON oSayZoom PROMPT "Zoom 100%" SIZE 150, 50  ;
             FONT oFont PIXEL OF oDlg ;
             ACTION ( oSlide:Set(0), ActualizaZoom( nVar, oSayZoom) )
             

   @ 10, 20 SLIDER oSlide VAR nVar OF oDlg ;
               RIGHT DIRECTION ;
               RANGE -10, 20 ;
               MARKS 10 ;
               ON CHANGE ActualizaZoom( nVar, oSayZoom  )  ;
               SIZE 142, 20 PIXEL

  ACTIVATE DIALOG oDlg

  RELEASE FONT oFont

return nil

Function ActualizaZoom( nVar, oSay )
local nPorcent:= (nVar+10) *10
if( nPorcent  == 0 , nPorcent:= 10 , )
oSay:setText("Zoom "+ alltrim(str( nPorcent))+"%" )
//oEditor:SetZoomBar( nVar )   // actualiza el zoom de scintilla

Return nil
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Mejoras para scintilla

Post by Antonio Linares »

Cristobal,
cnavarro wrote:Por cierto, para el tema de la lista de Funciones, etc. se me ha ocurrido esto (fijate en el oTree de la izquierda) a ver que os parece
Ya esta implementado con una DATA que permite activarlo/desactivarlo
Image
Esta chulísimo :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Mejoras para scintilla

Post by cnavarro »

mastintin wrote:Menudo arreón le has dado al scintilla :D . Se ve superbien .
Como comentario , he investigado que eventos maneja scintilla y el botón derecho del raton parece que no lo notifica así que lo de poder tener menu contextual cuando estamos sobre el texto al menos en Mac no va a ser sencillo .
En mi version de Windows no tengo problemas con el boton derecho del raton (he definido mi propio metodo RButton...) en mi clase e incluso como ya he comentado, he definido menus contextuales con opciones distintas dependiendo del margen en el que nos encontremos ( en el que estemos situados con el boton derecho ), y el que aparece dentro del texto es el normal (quiero modificarlo mas adelante)
Gracias por el ejemplo
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Mejoras para scintilla

Post by cnavarro »

mastintin wrote:cristobal lo tengo , este código funciona perfecto . Es auto contenido ...

Code: Select all


Function main()

  local oDlg, oFont
  local oSlide, oSayZoom
  local n, nVar := 0

  DEFINE FONT oFont NAME "Arial" SIZE 0, -30 BOLD

  DEFINE DIALOG oDlg TITLE "Sliders dialog" ;
    FROM 50, 50 TO 400, 500 PIXEL

   @ 80, 20 BUTTON oSayZoom PROMPT "Zoom 100%" SIZE 150, 50  ;
             FONT oFont PIXEL OF oDlg ;
             ACTION ( oSlide:Set(0), ActualizaZoom( nVar, oSayZoom) )
             

   @ 10, 20 SLIDER oSlide VAR nVar OF oDlg ;
               RIGHT DIRECTION ;
               RANGE -10, 20 ;
               MARKS 10 ;
               ON CHANGE ActualizaZoom( nVar, oSayZoom  )  ;
               SIZE 142, 20 PIXEL

  ACTIVATE DIALOG oDlg

  RELEASE FONT oFont

return nil

Function ActualizaZoom( nVar, oSay )
local nPorcent:= (nVar+10) *10
if( nPorcent  == 0 , nPorcent:= 10 , )
oSay:setText("Zoom "+ alltrim(str( nPorcent))+"%" )
//oEditor:SetZoomBar( nVar )   // actualiza el zoom de scintilla

Return nil
Perfecto, el problema era la clausula ... VAR nVar ...
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Mejoras para scintilla

Post by cnavarro »

mastintin wrote:Cristobal , he implementado lo del zoom en sciedit de fivemac, pero tu codigo de zoom no me funcionaba adecuadamente y lo he repensado ....
el codigo en la clase :

Code: Select all

METHOD SetZoom( nZ ) CLASS TScintilla

    Local  nZoomFactor := ::SendEdit( SCI_GETZOOM, 0, 0 )
    DEFAULT nZ  := 0
    if nZ > -11 .and. nZ < 21
       ::SendEdit( SCI_SETZOOM, nZ, 0 )
    endif
    nZoomFactor := ::SendEdit( SCI_GETZOOM, 0, 0 )

Return nZoomFactor
 
Manuel, quizas habría que añadir:

Code: Select all

METHOD SetZoom( nZ ) CLASS TScintilla
Local  nZoomFactor := ::SendEdit( SCI_GETZOOM, 0, 0 )
DEFAULT nZ  := 0

if !empty( ::GetText() )
    if nZ > -11 .and. nZ < 21
       ::SendEdit( SCI_SETZOOM, nZ, 0 )
    endif
    nZoomFactor := ::SendEdit( SCI_GETZOOM, 0, 0 )
endif
Return nZoomFactor
 
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
User avatar
mastintin
Posts: 1502
Joined: Thu May 27, 2010 2:06 pm

Re: Mejoras para scintilla

Post by mastintin »

Para poder gestionar las "palabras claves" he creado estas dos funciones , a ver que os parecen .

Code: Select all


Function loadKeyworks2()
local cCad
local cJson
local hVar:= {=>}
local aVar
local cFile := path()+"/cadfunction.json"

if !File( cFile)
    cCad:= cadComand()
    aVar := hb_atokens(cCad," ")
    hVar["cFun"]:= aVar
    cJson = hb_JsonEncode(hVar)
    hb_memowrit( cFile, cjson )
else
    hb_jsondecode( memoread( cfile ), @hvar )
    aVar:=hVar["cFun"]
    cCad:= ""
    for i =1 to len(aVar)
        cCad +=  aVar[i]+" "
    next
endif

Return cCad

//----------------------------------------------------------------------------//

Function loadKeyworks1()

local cCad
local cJson
local hVar:= {=>}
local aVar
local cFile := path()+"/cadcommad.json"

if !File( cFile)
   cCad:= CadFunction()
   aVar := hb_atokens(cCad," ")
   hVar["cCad"]:= aVar
   cJson = hb_JsonEncode(hVar)
   hb_memowrit( cFile, cjson )
else
   hb_jsondecode( memoread( cfile ), @hvar )
   aVar:=hVar["cCad"]
   cCad:= ""
   for i =1 to len(aVar)
       cCad +=  aVar[i]+" "
   next
  endif

Return cCad

 
Las he realizado como son por dos motivos . 1.- son soportados por harbour y son multi plataforma . 2.- las puedo recuperar muy fácilmente en un array y así usar xbrowse para su edición ( por ejemplo).
Ahora las pregunta . ¿ Lo meteremos en un solo archivo todo o lo hacemos en varios ( 1 por tipo ) ? ¿ como lo veis ? ¿ que nombre-nombres queréis para el archivo en caso de hacerlo así ?
User avatar
mastintin
Posts: 1502
Joined: Thu May 27, 2010 2:06 pm

Re: Mejoras para scintilla

Post by mastintin »

Cristobal , he bajado el sciedit.exe del repositorio y al salir casca el programa .
El proceso es ... programa colocado en una carpeta en el escritorio con las dlls etc. lanzo programa y abro uno de los ejemplos de fw . salgo del programa con el boton de salir . Rompe . me genera un hb_out.log con esto :

Application Internal Error - C:\Users\marcos\Desktop\editor\SCIEDIT.exe
Terminated at: 2014-12-29 08:47:57
Unrecoverable error 6005: Exception error:

Exception Code:C0000005
Exception Address:61ABB280
EAX:61ABB280 EBX:00000000 ECX:00980D68 EDX:00000000
ESI:61ABB280 EDI:00000000 EBP:0018F77C
CS:EIP:0023:61ABB280 SS:ESP:002B:0018F754
DS:002B ES:002B FS:0053 GS:002B
Flags:00210206
CS:EIP:
SS:ESP: 773862FA 00060720 00000087 00000000 00000000 61ABB280 DCBAABCD 00000000 00000000 61ABB280 0018F7F4 77386D3A 61ABB280 00060720 00000087 00000000

C stack:
EIP: EBP: Frame: OldEBP, RetAddr, Params...
61ABB280 0018F77C 0018F7F4 77386D3A 61ABB280 00060720 00000087 00000000 00000000 91C7A754 00000087 61ABB280
77386D3A 0018F7F4 0018F82C 77390D27 00000000 61ABB280 00060720 00000087 00000000 00000000 00000000 00000000
77390D27 0018F82C 0018F84C 7739794A FFFF0849 00060720 00000087 00000000 00000000 00000001
7739794A 0018F84C 0018F874 005447A6 FFFF0849 00060720 00000087 00000000 00000000 00000000 00545774 00060720
005447A6 0018F874 0018F894 00545793 00060720 00000087 00000000 00000000 0000005A 00000000
00545793 0018F894 0018F8C0 773862FA 00060720 00000087 00000000 00000000 00545774 DCBAABCD 00000000 00000000
773862FA 0018F8C0 0018F938 77386D3A 00545774 00060720 00000087 00000000 00000000 91C7A998 00000087 00BF6890
77386D3A 0018F938 0018F97C 7738965E 00000000 00545774 00060720 00000087 00000000 00000000 00BF68B8 00000001
7738965E 0018F97C 0018F9A0 773896C5 00BF6890 00000000 00545774 00000000 00000000 00000000 00BF6890
773896C5 0018F9A0 0018F9B8 773B16AC 00060720 00000087 00000000 00000000
773B16AC 0018F9B8 0018F9EC 773ABE6A 00060720 00000000 7792E695 00000000 006F3714 0018FAE8 0069C3A3 00000000
773ABE6A 0018F9EC 0018FA0C 7739AFAC 00BF74B0 00000000 00000028 00060720 00000001 00000001
7739AFAC 0018FA0C 0018FA38 773862FA 00040792 00000028 00060720 00000001 7792E695 DCBAABCD 00000000 00000000
773862FA 0018FA38 0018FAB0 77386D3A 7792E695 00040792 00000028 00060720 00000001 91C7AA10 00000028 7792E695
77386D3A 0018FAB0 0018FAE8 77390D27 00000000 7792E695 00040792 00000028 00060720 00000001 00000000 00000000
77390D27 0018FAE8 0018FB08 7739794A 7792E695 00040792 00000028 00060720 00000001 00000001
7739794A 0018FB08 0018FB30 005447A6 7792E695 00040792 00000028 00060720 00000001 00000000 00545774 00040792
005447A6 0018FB30 0018FB50 00545793 00040792 00000028 00060720 00000001 00000027 00000000
00545793 0018FB50 0018FB7C 773862FA 00040792 00000028 00060720 00000001 00545774 DCBAABCD 00000000 00000000
773862FA 0018FB7C 0018FBF4 77386D3A 00545774 00040792 00000028 00060720 00000001 91C7AB54 0018FC80 0018FC78


Modules:
0x00400000 0x00328000 C:\Users\marcos\Desktop\editor\SCIEDIT.exe
0x778C0000 0x00180000 C:\Windows\SysWOW64\ntdll.dll
0x76C50000 0x00110000 C:\Windows\syswow64\kernel32.dll
0x77470000 0x00047000 C:\Windows\syswow64\KERNELBASE.dll
0x772D0000 0x000A0000 C:\Windows\syswow64\ADVAPI32.DLL
....
0x607A0000 0x0005C000 C:\Windows\System32\StructuredQuery.dll
0x60F60000 0x0004E000 C:\Windows\SysWOW64\actxprxy.dll
0x61F50000 0x00049000 C:\Program Files (x86)\Internet Explorer\ieproxy.
Called from WINRUN(0)
Called from TWINDOW:ACTIVATE(1050) in .\source\classes\WINDOW.PRG
Called from MAIN(165) in C:\Verce43\FiveUI\Source\sciedit.prg
------------------------------------------------------------------------
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Mejoras para scintilla

Post by cnavarro »

Manuel, bajatelo de nuevo
Usa solo las acciones de los botones, las del menu aun no las tengo actualizadas
Last edited by cnavarro on Mon Dec 29, 2014 9:04 am, edited 1 time in total.
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Mejoras para scintilla

Post by cnavarro »

mastintin wrote:Para poder gestionar las "palabras claves" he creado estas dos funciones , a ver que os parecen .

Code: Select all


Function loadKeyworks2()
local cCad
local cJson
local hVar:= {=>}
local aVar
local cFile := path()+"/cadfunction.json"

if !File( cFile)
    cCad:= cadComand()
    aVar := hb_atokens(cCad," ")
    hVar["cFun"]:= aVar
    cJson = hb_JsonEncode(hVar)
    hb_memowrit( cFile, cjson )
else
    hb_jsondecode( memoread( cfile ), @hvar )
    aVar:=hVar["cFun"]
    cCad:= ""
    for i =1 to len(aVar)
        cCad +=  aVar[i]+" "
    next
endif

Return cCad

//----------------------------------------------------------------------------//

Function loadKeyworks1()

local cCad
local cJson
local hVar:= {=>}
local aVar
local cFile := path()+"/cadcommad.json"

if !File( cFile)
   cCad:= CadFunction()
   aVar := hb_atokens(cCad," ")
   hVar["cCad"]:= aVar
   cJson = hb_JsonEncode(hVar)
   hb_memowrit( cFile, cjson )
else
   hb_jsondecode( memoread( cfile ), @hvar )
   aVar:=hVar["cCad"]
   cCad:= ""
   for i =1 to len(aVar)
       cCad +=  aVar[i]+" "
   next
  endif

Return cCad

 
Las he realizado como son por dos motivos . 1.- son soportados por harbour y son multi plataforma . 2.- las puedo recuperar muy fácilmente en un array y así usar xbrowse para su edición ( por ejemplo).
Ahora las pregunta . ¿ Lo meteremos en un solo archivo todo o lo hacemos en varios ( 1 por tipo ) ? ¿ como lo veis ? ¿ que nombre-nombres queréis para el archivo en caso de hacerlo así ?
Hay que distinguir entre ficheros para coloreado y de definicion de sintaxis para la tooltip
Para el coloreado, puedes implementarlo como veas, aunque yo soy partidario de tenerlo todo en un solo fichero
Para las definiciones de funciones yo habia pensado en tres ficheros: Fw, harbour y xharbour (acualmente solo tengo hecho el de harbour -> FuncsHb1.ini ) ya que no encuentro todas las definiciones de Fw, y de xharbour no me he metido aun
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
jmartial
Posts: 457
Joined: Tue Mar 14, 2006 7:26 pm

Re: Mejoras para scintilla

Post by jmartial »

Hola Cristobal,

¿Puedo bajarlo para probarlo y chequearlo?

Es que no he visto un enlace para descargarlo, sino uno que piden login.

Si no quieres, no pasa nada. Creo que estás haciendo un gran trabajo.
Un Saludo,
Joaquín Martínez
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Mejoras para scintilla

Post by cnavarro »

Joaquin, gracias por tu interes
El repositorio volvera a ser publico
De todas formas puedes descargarlo de momento desde este enlace
https://www.dropbox.com/s/fpvjiim0uiq9z ... 1.zip?dl=0

Espero comentarios, criticas, peticiones, etc
Hasta ahora no he tenido muchas

---------------------------------------------------------------------------------
Actualizado el enlace
Confirmadme por favor los que os descargueis la aplicacion que falla la primera vez y despues ya funciona correctamente
Last edited by cnavarro on Mon Dec 29, 2014 10:21 am, edited 3 times in total.
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
User avatar
mastintin
Posts: 1502
Joined: Thu May 27, 2010 2:06 pm

Re: Mejoras para scintilla

Post by mastintin »

Cristobal, sigue fallando ... he descargado de nuevo las dll por si a caso y nada.
Post Reply