Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-09-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Usando SetWindowLong / GetWindowLong

Hola amigos

Para quienes pueda servirle o desconozcan su uso, aquí les dejo algunas de las muchas utilidades que podemos darle a la función SetWindowLong.

Código Delphi [-]
(* Admitir sólo números *)
procedure OnlyNumber(Sender: TWinControl);
begin
  SetWindowLong(Sender.Handle, GWL_STYLE,
    GetWindowLong(Sender.Handle, GWL_STYLE) + ES_NUMBER);
end;

(* Centrar texto *)
procedure CenterJustifyText(Sender: TWinControl);
begin
  SetWindowlong(Sender.Handle, GWL_STYLE,
    GetWindowlong(Sender.Handle, GWL_STYLE) + ES_CENTER);
end;

(* Alinear a la derecha *)
procedure RightJustifyText(Sender: TWinControl);
begin
  SetWindowLong(Sender.Handle, GWL_STYLE,
    GetWindowLong(Sender.Handle, GWL_STYLE) + ES_RIGHT);
end;

Ejemplos de uso:
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
  ...
  OnlyNumber(Edit1);
  CenterJustifyText(Memo1);
  RightJustifyText(DBEdit1);
  ...
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #2  
Antiguo 10-09-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Muuuy interesante, gracias
Espero no olvidarme cuando me haga falta
Responder Con Cita
  #3  
Antiguo 10-09-2011
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Pues lo acabo de probar y solamente me funciona OnlyNumber.
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure OnlyNumber(Sender: TWinControl);
begin
  SetWindowLong(Sender.Handle, GWL_STYLE,
    GetWindowLong(Sender.Handle, GWL_STYLE) + ES_NUMBER);
end;

(* Centrar texto *)
procedure CenterJustifyText(Sender: TWinControl);
begin
  SetWindowlong(Sender.Handle, GWL_STYLE,
    GetWindowlong(Sender.Handle, GWL_STYLE) + ES_CENTER);
end;

(* Alinear a la derecha *)
procedure RightJustifyText(Sender: TWinControl);
begin
  SetWindowLong(Sender.Handle, GWL_STYLE,
    GetWindowLong(Sender.Handle, GWL_STYLE) + ES_RIGHT);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
  OnlyNumber(Edit1);
  CenterJustifyText(Edit2);
  RightJustifyText(Edit3);
end;

end.
Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #4  
Antiguo 10-09-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Marcos.

Que extraño, tal vez sea la versión de Delphi aunque sería raro... , las pruebas las hice sobre Delphi 7.

Pero por si acaso aca te pongo un demo con un Edit, un Memo y un LabeledEdit que aquí esta funcionando, a ver si sucede lo mismo.

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 19-09-2011 a las 19:49:23.
Responder Con Cita
  #5  
Antiguo 10-09-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Para descartar toda posibilidad de que pudiera haber cometido un error, reproduje tu prueba usando tres Edits y sigue funcionando correctamente:



A menos que esto tuviera que ver en tu caso:
Cita:
"To write code that is compatible with both 32-bit and 64-bit versions of Windows, use the SetWindowLongPtr function"
Pero al menos con Delphi 7/Vista 32 no me reconoce esa función

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 10-09-2011 a las 19:03:31.
Responder Con Cita
  #6  
Antiguo 10-09-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
A mí me funciona sólo onlynumber
D2007
Responder Con Cita
  #7  
Antiguo 10-09-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Casimiro.

No pude encontrar una referencia exacta a los usos de SetWindowLong con conflictos, pero encontré varias con casos similares.
Aparentemente algunos usos sólo corren compiladas con versiones Delphi 2006 y anteriores.
Pareciera que el problema se produce por que a partir de la versión 2007, algunos controles son manejados por la VCL.

De las referencias de donde infiero esto destaco estas dos:
Cita:
To remove the flicker when calling the SetWindowLong, you first hide the window then show it again using ShowWindow with parameters SW_HIDE and SW_SHOW.
Not working with Delphi 2007
For applications created with Delphi 2007 the above code will not work - taskbar button will not be hidden.
( about )



Cita:
With Delphi 2007, a new property of the Application object, the MainFormOnTaskbar property controls how Windows taskbar buttons are handled by VCL
( about )




Así que las funciones que puse arriba (exeptuando OnlyNumbers) aparentemente sólo funcionarían hasta la versión de Delphi 2006 (quedaría probarlas con esa versión para confirmarlo).


Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 10-09-2011 a las 21:49:52.
Responder Con Cita
  #8  
Antiguo 10-09-2011
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
La prueba la hice con D7, ahora me he descargado tu ejemplo y me ocurre lo mismo solamente funciona OnlyNumber.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #9  
Antiguo 10-09-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por marcoszorrilla Ver Mensaje
La prueba la hice con D7, ahora me he descargado tu ejemplo y me ocurre lo mismo solamente funciona OnlyNumber.

Un Saludo.
Hola Marcos.

Si no es mucho abusar de tu tiempo ¿ Podrías probar este ejecutable compilado en mi máquina ? (el archivo está limpio)

Despues de enterarme que usas Delphi 7 estoy totalmente desconcertado... ya que me a mí todas la funciones me las ejecuta correctamente.

Un saludo y gracias.

Edito: Y ya a esta altura estoy intrigadísimo por encontrar el motivo ...
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 26-09-2011 a las 01:35:30.
Responder Con Cita
  #10  
Antiguo 10-09-2011
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Acabo de ejecutarlo y ocurre lo mismo, quizás obedezca a alguna configuración relacionada con el país.....

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #11  
Antiguo 10-09-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Marcos.

Muchisimas gracias por tu atención.

Voy a investigar el por qué de tán extraño comportamiento... , y les comunico cualquier novedad.

Un saludo y gracias nuevamente.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #12  
Antiguo 10-09-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Yo lo he ejecutado también con wine en ubuntu y funciona sólo onlynumber.
Y ahí no tiene nada que ver windows, delphi, ni nada de eso.
Qué cosas más extrañas
Responder Con Cita
  #13  
Antiguo 11-09-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola amigos.

Acabo de pasar el código fuente a un colega que tiene Delphi XE y a él también le funciona correctamente.
Cambié la configuración regional a España y de idioma a español tomando en cuenta la observación de Marcos y nada... sigue funcionando bién.
Aunque estoy convencido que Marcos le está arrimando bastante al orígen del problema ya que el ejecutable en mi máquina funciona y en la de ustedes no.

Ante la imposibilidad reproducir que no funcione, ando dando palos a ciegas...

Leí por ahí que usar InvalidateRect podría ser necesario en algunos casos
Código Delphi [-]
procedure CenterJustifyText(Sender: TWinControl);
begin
  SetWindowlong(Sender.Handle, GWL_STYLE,
    GetWindowlong(Sender.Handle, GWL_STYLE) + ES_CENTER);
  InvalidateRect(Sender.Handle, nil, True);
end;
Pero realmente no sé si solucionará algo por que en mi caso funciona del mismo modo.


Ojalá algún compañero pueda justificar esta diferencia de comportamiento. La verdad es que no encuentro el por qué.

Un desconcertado saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 11-09-2011 a las 00:21:04.
Responder Con Cita
  #14  
Antiguo 11-09-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Pasa el código fuente del proyecto para compilarlo, a ver si es algo del compilador.
Responder Con Cita
  #15  
Antiguo 11-09-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Casimiro.

Está en el mensaje #4, si tenés algún inconveniente para verlo lo subo nuevamente.

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #16  
Antiguo 11-09-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Perdón, no me había dado cuenta, sólo había visto el ejecutable.

Lo he compilado y ejecutado, el resultado es el mismo, sólo funciona onlynumber.

He desempolvado un viejo equipo que tiene winxp y delphi 5, lo he ejecutado y sólo funciona onlynumber.
Responder Con Cita
  #17  
Antiguo 15-09-2011
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
Hola ecfisa:

Usando Delphi 7 Enterprise en un PC con Windows XP SP3 en ingles, solo funciona ES_NUMBER.

Usando Delphi 7 Enterprise en un PC con Windows 7 Professional en ingles, todo funciona.

Usando Delphi 7 Enterprise en un PC con Windows Vista Home Premium SP2 en Español, todo funciona.

Por ser un API el funcionamiento depende del OS : http://www.delphi3000.com/articles/a...=SetWindowLong

¿Que OS tienen los PC donde funciono?

Como nota adicional pruebas con los Edit styles : ES_PASSWORD, ES_READONLY y ES_UPPERCASE no funcionaron en ninguno de los anteriores OS.

Ver estos links:

http://www.delphigroups.info/3/3/144938.html
http://www.autohotkey.com/docs/misc/Styles.htm#Edit

Saludos,

Nelson.

Última edición por nlsgarcia fecha: 15-09-2011 a las 16:19:23.
Responder Con Cita
  #18  
Antiguo 15-09-2011
Avatar de Enan0
Enan0 Enan0 is offline
Miembro
 
Registrado: may 2004
Ubicación: Argentina
Posts: 565
Poder: 21
Enan0 Va por buen camino
acabo de testear el archivo compilado, Sobre un windows XP Profesional (Version 2002) SP3 y funciona correctamente.

saludos.

PD:
Configuracion Regional: Español Argentina.
Numeros: Separador de miles "." de Decimales ","

saludos.

Última edición por Enan0 fecha: 15-09-2011 a las 16:27:58.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Usando isql santiago14 Firebird e Interbase 4 02-02-2013 23:02:43
Usando GLibWMI Suriu Windows 2 17-06-2010 12:13:25
Usando INNER JOIN alcides SQL 9 07-03-2005 10:29:49
consulta usando IF .. ELSE.. en un FROM raffagia SQL 1 19-10-2004 11:00:50
usando el registro redlyon13 API de Windows 2 01-12-2003 10:47:07


La franja horaria es GMT +2. Ahora son las 15:35:00.


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