Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Noticias (https://www.clubdelphi.com/foros/forumdisplay.php?f=34)
-   -   Hasta el más tonto hace relojes: XEditor (https://www.clubdelphi.com/foros/showthread.php?t=22545)

roman 22-10-2012 18:34:41

A mi me pasa exactamente los mismo que describe Germán. ¿No será una limitante de la versión no registrada? :p

// Saludos

dec 22-10-2012 19:04:50

Hola,

Gracias Román y Neftalí. Pero, un momento... ¿es que no describís lo que se espera "por defecto"? Es decir, si no he entendido mal, Neftalí, dices que si seleccionas "unas letras" (un texto) y pulsas la tecla "Suprimir" sí que te funciona, y, si no seleccionas nada, no te funciona... ¿pero es que no se trata de que funcione, precisamente, cuando tienes texto seleccionado? Claro que ahora no comprendo cómo es que vosotros "esperáis" otra cosa...

roman 22-10-2012 19:06:23

Si no hay texto seleccionado, el comportamiento esperado es que se borre el caracter a la derecha del cursor.

// Saludos

Neftali [Germán.Estévez] 22-10-2012 19:09:51

Cita:

Empezado por roman (Mensaje 447640)
Si no hay texto seleccionado, el comportamiento esperado es que se borre el caracter a la derecha del cursor.

Correcto. Pero no borra nada, se queda en el sitio como si no hubieras pulsado nada.

El hecho de que, si tan sólo hay una tecla seleccionada ya funcione, me hace dudar de que sea problema de la tecla, sino de alguna comprobación relacionada con Seltext o LenghtText...

Es más la tecla la reconoce, pues si hay algo seleccionado se comporta bien.

dec 22-10-2012 19:09:56

Hola,

Cita:

Empezado por roman (Mensaje 447640)
Si no hay texto seleccionado, el comportamiento esperado es que se borre el caracter a la derecha del cursor.

// Saludos

Comprendo. Voy a echar un vistazo, puesto que, hay algo que tengo un poco olvidado: los "comandos" del editor, y, recuerdo que existe algo para esto. No obstante, me surge una duda... y es que si ya está asignada la tecla suprimir (para borrar el texto seleccionado) no sé bien cómo podrá dicha tecla hacer "las dos cosas"... pero voy a echar un vistazo a ver. Gracias Román.

dec 22-10-2012 19:12:04

Cita:

Empezado por Neftali (Mensaje 447642)
Correcto. Pero no borra nada, se queda en el sitio como si no hubieras pulsado nada.

El hecho de que, si tan sólo hay una tecla seleccionada ya funcione, me hace dudar de que sea problema de la tecla, sino de alguna comprobación relacionada con Seltext o LenghtText...

Es más la tecla la reconoce, pues si hay algo seleccionado se comporta bien.

Tengo que revisar esto. Lo cierto es que a los "comandos" del editor se pueden asignar dos teclas... y modificadores... pero no creo que sean dos teclas para lo mismo: me parece que es para hacer una especie de "shorcut" con ambas teclas. La cosa es que, como te comenté por correo, Neftalí, la tecla suprimir no está asignada en el editor... es decir, pareciera que lo de borrar lo seleccionado es lo predeterminado en Windows... pero voy a echar un vistazo y os comento, porque, en efecto, al menos ahora yo tampoco puedo hacer lo que vosotros decís, esto es, ahora ya sé que no pasa sólo en tu sistema, sino que es "cosa" del programa.

Casimiro Noteví 22-10-2012 19:14:49

Hola, lo he instalado en una máquina virtual (virtualbox) winxp y el comportamiento es exactamente el mismo que obtiene Neftali.

dec 22-10-2012 19:18:31

Cita:

Empezado por Casimiro Notevi (Mensaje 447645)
Hola, lo he instalado en una máquina virtual (virtualbox) winxp y el comportamiento es exactamente el mismo que obtiene Neftali.

Gracias Casimiro. Ya estoy echando un vistazo...

dec 22-10-2012 19:24:14

Hola de nuevo,

Si no me equivoco, la tecla que nos interesa es "VK_DELETE"... ¿verdad? Estoy probando... pero con esta tecla. Yo creo que es esta tecla... ¿no? :rolleyes:

Neftali [Germán.Estévez] 22-10-2012 19:25:41

¿No será un bug del componente? Me suena que ese comportamiento no debe ser algo que tengas que configurar tú. Ese debería ser el comportamiento estandard, como si pones un TEdit.

roman 22-10-2012 19:29:30

Al parecer, alguien, alguna vez, reportó este problema, pero no pareció importarles mucho o no le dieron seguimiento porque quien lo reportó tampoco lo hizo. Quizá si lo reportas tú te hagan caso. No debe ser un problema difícil de solucionar.

// Saludos

Neftali [Germán.Estévez] 22-10-2012 19:33:04

:eek::eek::eek::eek:

¿Y ya está?
No me parece un error tonto...

Un editor al que lo le funciona la tecla,... no se...

roman 22-10-2012 19:34:39

Bueno, bueno. Ésa es la interpretación que yo dí :p Igual ellos estuvieron muy consternados en su momento :D

// Saludos

dec 22-10-2012 19:35:15

Hola,

Lo que pasa es que acaso no es un bug... me explico. En realidad, por ejemplo, si se pulsa las teclas "CTRL + ←" se borra la palabra "cerca del cursor". Lo cierto es que existen otros comandos, ahora mismo "ocultos", puesto que no se conocen, pero, que, funcionan. He aquí el método que los añade:

Código Delphi [-]
procedure TSynEditKeyStrokes.ResetDefaults;
begin
  Clear;

  AddKey(ecUp, SYNEDIT_UP, []);
  AddKey(ecSelUp, SYNEDIT_UP, [ssShift]);
  AddKey(ecScrollUp, SYNEDIT_UP, [ssCtrl]);
  AddKey(ecDown, SYNEDIT_DOWN, []);
  AddKey(ecSelDown, SYNEDIT_DOWN, [ssShift]);
  AddKey(ecScrollDown, SYNEDIT_DOWN, [ssCtrl]);
  AddKey(ecLeft, SYNEDIT_LEFT, []);
  AddKey(ecSelLeft, SYNEDIT_LEFT, [ssShift]);
  AddKey(ecWordLeft, SYNEDIT_LEFT, [ssCtrl]);
  AddKey(ecSelWordLeft, SYNEDIT_LEFT, [ssShift,ssCtrl]);
  AddKey(ecRight, SYNEDIT_RIGHT, []);
  AddKey(ecSelRight, SYNEDIT_RIGHT, [ssShift]);
  AddKey(ecWordRight, SYNEDIT_RIGHT, [ssCtrl]);
  AddKey(ecSelWordRight, SYNEDIT_RIGHT, [ssShift,ssCtrl]);
  AddKey(ecPageDown, SYNEDIT_NEXT, []);
  AddKey(ecSelPageDown, SYNEDIT_NEXT, [ssShift]);
  AddKey(ecPageBottom, SYNEDIT_NEXT, [ssCtrl]);
  AddKey(ecSelPageBottom, SYNEDIT_NEXT, [ssShift,ssCtrl]);
  AddKey(ecPageUp, SYNEDIT_PRIOR, []);
  AddKey(ecSelPageUp, SYNEDIT_PRIOR, [ssShift]);
  AddKey(ecPageTop, SYNEDIT_PRIOR, [ssCtrl]);
  AddKey(ecSelPageTop, SYNEDIT_PRIOR, [ssShift,ssCtrl]);
  AddKey(ecLineStart, SYNEDIT_HOME, []);
  AddKey(ecSelLineStart, SYNEDIT_HOME, [ssShift]);
  AddKey(ecEditorTop, SYNEDIT_HOME, [ssCtrl]);
  AddKey(ecSelEditorTop, SYNEDIT_HOME, [ssShift,ssCtrl]);
  AddKey(ecLineEnd, SYNEDIT_END, []);
  AddKey(ecSelLineEnd, SYNEDIT_END, [ssShift]);
  AddKey(ecEditorBottom, SYNEDIT_END, [ssCtrl]);
  AddKey(ecSelEditorBottom, SYNEDIT_END, [ssShift,ssCtrl]);
  AddKey(ecToggleMode, SYNEDIT_INSERT, []);
  AddKey(ecCopy, SYNEDIT_INSERT, [ssCtrl]);
  AddKey(ecCut, SYNEDIT_DELETE, [ssShift]);
  AddKey(ecPaste, SYNEDIT_INSERT, [ssShift]);
  AddKey(ecDeleteChar, SYNEDIT_DELETE, []);
  AddKey(ecDeleteLastChar, SYNEDIT_BACK, []);
  AddKey(ecDeleteLastChar, SYNEDIT_BACK, [ssShift]);
  AddKey(ecDeleteLastWord, SYNEDIT_BACK, [ssCtrl]);
  AddKey(ecUndo, SYNEDIT_BACK, [ssAlt]);
  AddKey(ecRedo, SYNEDIT_BACK, [ssAlt,ssShift]);
  AddKey(ecLineBreak, SYNEDIT_RETURN, []);
  AddKey(ecLineBreak, SYNEDIT_RETURN, [ssShift]);
  AddKey(ecTab, SYNEDIT_TAB, []);
  AddKey(ecShiftTab, SYNEDIT_TAB, [ssShift]);
  AddKey(ecContextHelp, SYNEDIT_F1, []);

  AddKey(ecSelectAll, ord('A'), [ssCtrl]);
  AddKey(ecCopy, ord('C'), [ssCtrl]);
  AddKey(ecPaste, ord('V'), [ssCtrl]);
  AddKey(ecCut, ord('X'), [ssCtrl]);
  AddKey(ecBlockIndent, ord('I'), [ssCtrl,ssShift]);
  AddKey(ecBlockUnindent, ord('U'), [ssCtrl,ssShift]);
  AddKey(ecLineBreak, ord('M'), [ssCtrl]);
  AddKey(ecInsertLine, ord('N'), [ssCtrl]);
  AddKey(ecDeleteWord, ord('T'), [ssCtrl]);
  AddKey(ecDeleteLine, ord('Y'), [ssCtrl]);
  AddKey(ecDeleteEOL, ord('Y'), [ssCtrl,ssShift]);
  AddKey(ecUndo, ord('Z'), [ssCtrl]);
  AddKey(ecRedo, ord('Z'), [ssCtrl,ssShift]);
  AddKey(ecGotoMarker0, ord('0'), [ssCtrl]);
  AddKey(ecGotoMarker1, ord('1'), [ssCtrl]);
  AddKey(ecGotoMarker2, ord('2'), [ssCtrl]);
  AddKey(ecGotoMarker3, ord('3'), [ssCtrl]);
  AddKey(ecGotoMarker4, ord('4'), [ssCtrl]);
  AddKey(ecGotoMarker5, ord('5'), [ssCtrl]);
  AddKey(ecGotoMarker6, ord('6'), [ssCtrl]);
  AddKey(ecGotoMarker7, ord('7'), [ssCtrl]);
  AddKey(ecGotoMarker8, ord('8'), [ssCtrl]);
  AddKey(ecGotoMarker9, ord('9'), [ssCtrl]);
  AddKey(ecSetMarker0, ord('0'), [ssCtrl,ssShift]);
  AddKey(ecSetMarker1, ord('1'), [ssCtrl,ssShift]);
  AddKey(ecSetMarker2, ord('2'), [ssCtrl,ssShift]);
  AddKey(ecSetMarker3, ord('3'), [ssCtrl,ssShift]);
  AddKey(ecSetMarker4, ord('4'), [ssCtrl,ssShift]);
  AddKey(ecSetMarker5, ord('5'), [ssCtrl,ssShift]);
  AddKey(ecSetMarker6, ord('6'), [ssCtrl,ssShift]);
  AddKey(ecSetMarker7, ord('7'), [ssCtrl,ssShift]);
  AddKey(ecSetMarker8, ord('8'), [ssCtrl,ssShift]);
  AddKey(ecSetMarker9, ord('9'), [ssCtrl,ssShift]);
  AddKey(ecNormalSelect, ord('N'), [ssCtrl,ssShift]);
  AddKey(ecColumnSelect, ord('C'), [ssCtrl,ssShift]);
  AddKey(ecLineSelect, ord('L'), [ssCtrl,ssShift]);
  AddKey(ecMatchBracket, ord('B'), [ssCtrl,ssShift]);

He tratado de asignar a la tecla suprimir alguno de los comandos "ecDelete*", pero, sin éxito. No sé si es que lo estoy haciendo mal, o que, dicha tecla no puede usarse, o que está ocupada con otra cosa... lo cierto es que el reporte que enlaza Román es raro, pues alguien puso "Work for me" y cerró el caso. Voy a seguir dándole alguna vuelta, aunque, como digo.

dec 22-10-2012 19:36:13

Hola,

Llevas razón Neftalí, sin embargo, se conoce que ya puede hacerse lo que se pretende (borrar el caracter, la palabra, etc., cerca del cursor) con otra combinación de teclas... si no me equivoco. De todas formas sigo dándole vueltas a ver qué pasa, porque, lo cierto es que la tecla funciona como decís hasta en el bloc de notas...

dec 22-10-2012 19:42:07

Hola,

Estoy es muy raro... a ver. Al parecer, el comando que nos interesa es "ecDeleteChar". Ahora bien, dicho comando se añade al editor, junto con otros de esta forma:

Código Delphi [-]
AddKey(ecDeleteChar, SYNEDIT_DELETE, []);

Valiendo la constante "SYNEDIT_DELETE" "VK_DELETE", es decir,... en principio el asunto debería funcionar... pero no lo hace. La cosa es que yo no estoy capturando la tecla "VK_DELETE" en ningún lado... así que se supone que debería funcionar, pero, no lo hace... y tampoco lo hace si yo mismo añado la tecla "VK_DELETE" asociada al comando "ecDeleteChar"... esto es muy raro, porque, las otras teclas funcionan...

Edito: vamos a ver si al final damos con ello...

roman 22-10-2012 19:42:37

Pero, tal como comentó Neftali, la tecla sí que está asignada. Más bien parece ser un problema con la longitud del texto seleccionado. En algún lugar del código debe tener un condicional:

Código Delphi [-]
if SelLength > 0 then
  DeleteSelection(...);

Haz una traza a ver qué sale.

// Saludos

dec 22-10-2012 19:45:52

Hola,

A ver. Novedades. No es problema del componente, porque, si pruebo en un programa "nuevo", la tecla se comporta como se espera. Me temo que alguna acción en mi programa está "comiéndose" dicha tecla... así que voy a echar un vistazo porque esto tiene que poder solucionarse. ;)

dec 22-10-2012 19:47:09

Cita:

Empezado por roman (Mensaje 447665)
Pero, tal como comentó Neftali, la tecla sí que está asignada. Más bien parece ser un problema con la longitud del texto seleccionado. En algún lugar del código debe tener un condicional:

Código Delphi [-]
if SelLength > 0 then
  DeleteSelection(...);

Haz una traza a ver qué sale.

// Saludos

No me suena nada así Román, pero, sí que he usado acciones "estándar"... y creo que estas están metiendo baza. Lo cierto es que si pongo un "SynEdit" en un formulario nuevo (en un proyecto nuevo) funciona como se espera, es decir, como he dicho arriba, el problema reside en algún lugar de Small Editor y es cuestión de tiempo dar con ello. :)

dec 22-10-2012 19:53:42

Hola,

Ea, pues ya está. Se trataba de que he usado la acción de edición estándar "Delete", y, de alguna manera, dicha acción estaba interfiriendo con el comando "ecDeleteChar" del editor. De momento he optado, sencillamente, por quitar dicha acción, pues, se trataba de un elemento en el menú contextual del editor que acaso hasta estuviera demás, teniendo en cuenta que uno pulsa la tecla "Suprimir" y no usa dicho elemento del menú.

No obstante, acaso añada el elemento cuando aprenda a enviar comandos al editor como ha de hacerse. Sea como sea, podéis descargar el programa de nuevo y comprobar que ahora la tecla "Suprimir" se comporta como vosotros esperábais, por un lado, y, también como yo esperaba... si hay texto seleccionado. Obviamente, esto de los comandos y "accesos directos" en el programa es algo a lo que tendré que prestar atención en el futuro.

http://goo.gl/ATCSn

¡Muchas gracias a todos!


La franja horaria es GMT +2. Ahora son las 16:14:23.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi