Boletín Pascal #18
Los ejemplos completos de código fuente de este número están disponibles para descargar.
![]() |
![]() |
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 eds2004 @ 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-7 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.sandbrooksoftware.com/cgi-bin/TopSite2/rankem.cgi?id=latium http://news.optimax.com/topdelphi/links.exe/click?id=70C517ECAE6E http://www.programmingpages.com/?r=latiumsoftwarecomenpascal http://www.top219.org/cgi-bin/vote.cgi?delphi&83 http://top100borland.com/in.php?who=20 http://top200.jazarsoft.com/delphi/rank.php3?id=latium http://213.65.224.200/cgi-bin/toplist.cgi/hits?Id=80 http://www.programacion.net/votar-enlace.php?id=474 http://www.lawebdelprogramador.com/buscar/enlace.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/descarga/p0018.zip ________________________________________________________________________ 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: eds2004 @ 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 ________________________________________________________________________ |
Los ejemplos completos de código fuente de este número están disponibles para descargar.

border.gif
![]() |
¿Errores? ¿Omisiones? ¿Comentarios? Por favor contáctanos!






