Boletín Pascal #18 - 05-MAR-2001
INDICE
1. UNAS PALABRAS DEL EDITOR
2. TEXTO INCLINADO
3. BORDERWIDTH - ERROR EN PROPIEDAD DE COMPONENTES
4. TALLER
________________________________________________________________________
1. UNAS PALABRAS DEL EDITOR
En esta edición tengo una buena noticia para compartir con ustedes y es
que a Latium Software le ha sido otorgado el Certificado DobleU "por
cumplir con excelentes estándares de calidad en su contenido, diseño,
originalidad y claridad en la presentación de su página web."
http://www.dobleu.com/bin/certificado.du?ID=78412
Pasando a otra cosa, si todavía no ha visto la demo, no entenderá de lo
que se está perdiendo... Con la Librería JfControls puede fácilmente
darle a sus aplicaciones una cualidad visual que las hará destacarse del
resto y con la que impresionará a sus potenciales clientes por el look
profesional que las aplicaciones pueden adquirir con estos controles, lo
que casi seguramente lo ayudará a vender, pero no es todo una cuestión
de apariencias: la Librería soluciona muchos problemas comunes de
programación y simplifica muchas tareas comunes de programación, de modo
que pueda así pueda enfocar su tiempo en lo que verdaderamente tiene que
hacer, no desperdiciándolo en asuntos triviales, acortando de esta
manera el ciclo de desarrollo de las aplicaciones y ayudándolo a
producir aplicaciones de mejor calidad.
Descargue el programa JfSetup y la Demo, e instálelos para así obtener
el Key Number (un número único que identifica cada instalación de la
librería) con el que podrá llenar el formulario de inscripción en el
sorteo. Participar es gratis. La fecha de cierre para participar en el
Sorteo de la Librería JfControls es el Jueves 15 de Marzo a las 20:00
GMT. El ganador de la licencia será determinado por los últimos tres
dígitos de la Lotería Nacional de España correspondiente al sorteo del
17 de Marzo, y publicaremos el número ganador en la próxima edición de
este boletín. Para más información acerca del sorteo:
http://www.latiumsoftware.com/jfcontrols/index.php?lang=es
Saludos,
Ernesto De Spirito
eds2008 @ latiumsoftware.com
________________________________________________________________________
JfControls Lib. Multilenguaje. Multiapariencia. Skins. Privilegios. Más
de 40 componentes integrados y personalizables. Múltiples problemas de
programación resueltos. Administración centralizada de recursos. Para
Delphi 3-2006 y C++ Builder 3-6. http://www.jfactivesoft.com/spindex.htm
________________________________________________________________________
2. TEXTO INCLINADO
Seguramente habrá visto que algunas etiquetas y otros componentes le
permiten rotar el texto. Por ejemplo la Librería JfControls le permite
rotar los títulos (captions) de etiquetas, botones, casillas de
verificación, botones de radio, elementos de lista, elementos de menú,
etc. Puede lograr el mismo efecto usando los campos lfEscapement y
lfOrientation de la estructura del objeto font (fuente), que guardan
el ángulo del texto medido en décimas de grado (por ejemplo un valor
de 150 significa 15 grados).
La siguiente función devuelve el manejador de una fuente con las mismas
características de la fuente cuyo manejador se pasa como parámetro, pero
permite establecer su ángulo y calidad.
interface
uses Windows;
function CreateAngledFont(Fuente: HFont; Angulo: Longint;
Calidad: byte = PROOF_QUALITY): HFont;
implementation
function CreateAngledFont(Fuente: HFont; Angulo: Longint;
Calidad: byte): HFont;
var
FontInfo: TLogFontA; // Estructura de información de la fuente
begin
// Obtener la información de la fuente pasada como parámetro
if GetObject(Fuente, SizeOf(FontInfo), @FontInfo) = 0 then begin
Result := 0;
exit;
end;
// Establecer el ángulo
FontInfo.lfEscapement := Angulo;
FontInfo.lfOrientation := Angulo;
// Establecer la calidad
FontInfo.lfQuality := Calidad;
// Crear una nueva fuente con la información modificada
// La nueva fuente deberá ser liberada llamando a DeleteObject
Result := CreateFontIndirect(FontInfo);
end;
Podemos usar esta función en un procedimiento que muestre texto rotado
en cualquier lienzo (canvas), incluyendo por ejemplo el de una
impresora:
uses Graphics, Windows;
procedure TextOutA(Lienzo: TCanvas; X, Y, Angulo: Integer;
Texto: string);
var
FuenteOriginal, FuenteInclinada: HFont;
begin
// Crea una fuente inclinada a partir de la fuente actual
FuenteInclinada := CreateAngledFont(Lienzo.Font.Handle, Angulo);
if FuenteInclinada <> 0 then begin
// La establemos temporalmente como la fuente actual
FuenteOriginal := SelectObject(Lienzo.Handle, FuenteInclinada);
if FuenteOriginal <> 0 then begin
// Escribimos el texto
Lienzo.TextOut(X, Y, Texto);
// Restaura la fuente original
if SelectObject(Lienzo.Handle, FuenteOriginal) = 0 then begin
Lienzo.Font.Handle := FuenteInclinada;
// raise Exception.Create('No se pudo restaurar la fuente');
exit;
end;
end;
// Libera la fuente inclinada
DeleteObject(FuenteInclinada)
end;
end;
He aquí un ejemplo de uso:
procedure TForm1.FormPaint(Sender: TObject);
begin
Font.Name := 'Arial'; // IMPORTANTE: fuente True Type
Font.Size := 14;
Canvas.Brush.Color := Color;
TextOutA(Canvas, 10, 40, 150, '¡Hola mundo!');
end;
Si queremos podemos asignar el manejador de una fuente inclinada a la
propiedad Handle de un objeto TFont. El manejador será eliminado automá-
ticamente cuando dicho objeto sea destruido.
El siguiente ejemplo usa esta técnica para dibujar los elementos de un
cuadro de lista:
procedure TForm1.FormCreate(Sender: TObject);
begin
// Establece la fuente del cuadro de lista para que tenga una
// inclinación de 10 grados
with ListBox1.Font do Handle := CreateAngledFont(Handle, 100);
end;
procedure TForm1.ListBox1DrawItem(Control: TWinControl;
Index: Integer; Rect: TRect; State: TOwnerDrawState);
const
TopOffset = 16;
begin
with (Control as TListBox).Canvas do begin
FillRect(Rect);
TextOut(Rect.Left + 2, Rect.Top + TopOffset,
TListBox(Control).Items[Index]);
end;
end;
________________________________________________________________________
3. BORDERWIDTH - ERROR EN PROPIEDAD DE COMPONENTES
Por Vladimir S. <shvetadvipa@mtu-net.ru>
Si desea usar la propiedad BorderWidth, tenga cuidado. Es muy extraño,
pero Borland cometió en error en casi todos los componentes que tienen
esta propiedad. Por ejemplo observe la figura (border.gif) y podrá ver
barras de progreso (ProgressBars) con varios valores de BorderWidth. La
altura de las barras en todos los casos es 16.
Si desea corregir este error vea este ejemplo para la ProgressBar. Tiene
que hacer cambios en COMCTRLS.PAS como este:
interface
...
TProgressBar = class(TWinControl)
private
...
FBorderWidth: TBorderWidth;
...
procedure SetBorderWidth(Value: TBorderWidth);
...
published
...
property BorderWidth: TBorderWidth read FBorderWidth
write SetBorderWidth;
...
...
implementation
...
constructor TProgressBar.Create(AOwner: TComponent);
begin
...
FBorderWidth := inherited BorderWidth;
...
end;
procedure TProgressBar.SetBorderWidth(Value: TBorderWidth);
begin
if Value > (Height div 2)-3 then
raise Exception.CreateFmt('Error: BorderWidth debe ser menor que'
+ ' %d', [(Height div 2)-3]);
if Value <> inherited BorderWidth then begin
inherited BorderWidth := Value;
FBorderWidth := inherited BorderWidth;
end;
end;
...
Puede usar este parche en todos los componentes que tengan una propiedad
BorderWidth.
________________________________________________________________________
4. TALLER
En la edición número 16 de este boletín propuse la creación de un
descendiente de TDBGrid capaz de mostrar casillas de verificación para
los campos lógicos, y prometí publicar las soluciones que recibiera en
la primera edición de Marzo, es decir en esta edición. Armando Arias
hizo un muy buen trabajo derivando no sólo un DBGrid, sino que fue más
allá y derivó también otros componentes. Podrá encontrar el código
fuente, el archivo de paquete, una demo y una breve reseña en el archivo
que acompaña este boletín.
________________________________________________________________________
¡TÚ PUEDES AYUDARNOS!
Necesitamos tu ayuda para que este boletín pueda continuar y crecer. Una
forma en que puedes ayudarnos es enviando este enlace a tus amigos:
http://www.latiumsoftware.com/es/pascal/index.php
Otra forma es votándonos en alguno de estos rankings para darle más
visibilidad a nuestro sitio web y aumentar así el número de suscrip-
ciones al boletín, que esperamos en el futuro se traduzca también en un
mayor número de colaboraciones de artículos, trucos, etc.:
http://www.programmingpages.com/?r=latiumsoftwarecomenpascal
http://top100borland.com/in.php?who=20
http://www.lawebdelprogramador.com/buscar/votar.php?id=615
Por favor vota. Son sólo unos segundos para ti que REALMENTE pueden
hacer la diferencia. Necesitamos tu ayuda para poder continuar.
________________________________________________________________________
Si no has recibido el archivo con el código fuente completo de los
ejemplos que se presentan en este boletín, puedes descargarlo de la
siguiente dirección: http://www.latiumsoftware.com/es/file.php?id=p18
________________________________________________________________________
Página principal: http://www.latiumsoftware.com/es/pascal/index.php
Página del grupo: http://espanol.groups.yahoo.com/group/boletin-pascal/
Para suscribirse / apuntarse: boletin-pascal-subscribe@gruposyahoo.com
Para cancelar / removerse: boletin-pascal-unsubscribe@gruposyahoo.com
Para reportar problemas con la suscripción: eds2008 @ latiumsoftware.com
________________________________________________________________________
Este boletín se provee "TAL Y COMO ESTA", sin garantía de ninguna clase.
Su uso implica la aceptación de nuestros términos de licencia y de la
ausencia de garantía que puedes leer en nuestro sitio web. Allí también
encontrarás una nota sobre marcas registradas. Te animamos a que redis-
tribuyas este boletín, siempre y cuando lo hagas en forma completa
(incluyendo la información de copyright), sin modificaciones y de manera
gratuita. Los artículos son copyright de sus respectivos autores y se
reproducen aquí con el permiso de los mismos.
________________________________________________________________________
Latium Software http://www.latiumsoftware.com/es/index.php
Copyright (c) 2001 por Ernesto De Spirito. Todos los derechos reservados
________________________________________________________________________
|