Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Shape con style psDo pierde el estilo (https://www.clubdelphi.com/foros/showthread.php?t=96175)

tiqui_loquito 29-03-2023 18:10:43

Shape con style psDo pierde el estilo
 
Buenas días a todos

Tengo la siguiente inquietud y no se como resolverla

Tengo un Shape con Height de 1, el style del Pen es psDot con width en 1. Al aumentar el width del pen a 2,3,etc se pierde el estilo y queda como si fuera pdSolid

Como pudo solucionar esto, he probado algunas cosas pero no me han funcionado

Gracias de antemano por la orientación que me puedan dar

Neftali [Germán.Estévez] 30-03-2023 12:17:05

No es un problema de Delphi, siempre ha pasado esto y es directamente por Windows:
https://docwiki.embarcadero.com/RADS..._the_Pen_Width

Por lo tanto afecta a los programas VCL que basan el "pintado" en la API de Windows.
Si por el contrario lo pruebas en una aplicación Firemonkey verás que el resultado es el esperado, ya que FMX realiza el pintado por su cuenta...

Si deseas conseguir lo que necesitas en VCL, no te queda otra opción que realizar directamente tú el pintado sobre el Canvas, implementando los diferentes estilos de TPen. Si buscas por los foros encontrarás algunas implementaciones que te pueden ayudar:
http://www.delphigroups.info/2/06/196787.html
http://www.delphigroups.info/2/06/200050.html
http://www.delphigroups.info/2/73/85102.html

tiqui_loquito 31-03-2023 22:41:48

Gracias Netftali

Este código me ha servido

Código Delphi [-]
procedure WideDotDashLine (canvas : tCanvas; pStyle : tPenStyle; pColor :
tColor; x1, y1, x2, y2, w : integer);
var  i,
     xd,
     yd        : integer;
begin
with canvas do
     begin
     if y2 = y1
     then begin
          xd := 0;
          yd := 1;
          end
     else begin
          xd := 1;
          yd := 0;
          end;
     Brush.Style := bsClear;
     Pen.Style := pStyle;
     Pen.Color := pColor;
     Pen.Width := 1;
     i := 0;
     while w > 0 do
          begin
          MoveTo (x1 + (xd * i), y1 + (yd * i));
          LineTo (x2 + (xd * i), y2 + (yd * i));
          dec (w);
          if i >= 0
          then i := -Succ (i)
          else i := -i;
          end;
     end;
end;

Estoy es mirando en que parte lo lo inserto en el programa SimpleGraph, ya que me hace el ajuste sobre el formulario de las opciones donde cambio los datos del shape mas no se ven reflejados sobre el formulario donde se crea la línea (Simplegraph)

Seguiré validando y si algo escribo nuevamente para una nueva orientación.

Muchas Gracias


La franja horaria es GMT +2. Ahora son las 17:37:57.

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