Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Dibujar linea en panel (https://www.clubdelphi.com/foros/showthread.php?t=64360)

Iron 28-03-2009 12:31:54

Dibujar linea en panel
 
Buenos dias!!!

¿Se puede dibujar una linea en un Panel?, tengo el siguiente código:


Código Delphi [-]
if tipo_pantalla_=3 then begin;
        statictext2.Font.Color :=clWindowText;
        statictext2.Caption:='En Varios Puntos.';
        panel4.Visible:=true;
        statictext3.Font.Color :=clblue;
        statictext3.Caption:='DESABILITADO.';
        panel1.Enabled:=false;
           // Dibujamos lo que falta.
               with panel4 do
                   begin
                    canvas.Pen.Color:=clBlack;
                    canvas.Pen.Width:=1;
                    canvas.Pen.Style:=psSolid;
                    canvas.MoveTo(500,500);
                    canvas.LineTo(1000,1000);
                  end;
      end;

Pero la linea me sale por detrás del Panel :(, buscando en ayuda he leido que lo suyo sería usar un Paintbox.

Gracias

Este mensaje no debería estar aquí, sino en gráficos, pero no se borrarlo. Perdón

Neftali [Germán.Estévez] 30-03-2009 09:14:08

Cita:

Empezado por Iron (Mensaje 343055)
Este mensaje no debería estar aquí, sino en gráficos, pero no se borrarlo.
Perdón

No hay problema, ya te lo muevo yo.

Caro 30-03-2009 15:25:56

Hola, así directo no puedes acceder al Canvas del Panel, primero tienes que desprotegerlo defínete este tipo en tu unit.

Código Delphi [-]
 type
  TPanel = class(ExtCtrls.TPanel);

con eso ya deberías poder acceder al Canvas del Panel, sino, tienes que usar algún componentes que tenga el Canvas, como el TPaintBox, TImage......

Sobre como lo tienes no te esta dibujando detras, esta tomando el Canvas del formulario es por eso que te lo dibuja en el formulario.

Saluditos

Iron 31-03-2009 15:27:37

No me sale :(, al poner
Código Delphi [-]
TPanel = class(ExtCtrls.TPanel);

Me da error, el primero: (Expected ´:´ but ´=´found) lo cambié y ahora me da el siguiente error: (Expected an identifier but class found), espera un identificador pero encuentra una clase :confused:.

¿Alguna sugerencia, gracias?

Caro 31-03-2009 15:50:05

Cita:

Empezado por Iron (Mensaje 343304)
Me da error, el primero: (Expected ´:´ but ´=´found) lo cambié y ahora me da el siguiente error: (Expected an identifier but class found), espera un identificador pero encuentra una clase :confused:.

¿Alguna sugerencia, gracias?

Hola de nuevo, tienes que definirlo como un nuevo tipo.

Código Delphi [-]
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;

type
  TPanel = class(ExtCtrls.TPanel);
 
type
  TForm1 = class(TForm)
    Panel1: TPanel;
  private
    { Private declarations }
  ..................................

fijate donde lo he puesto, con eso no debería darte errores.

Saluditos

marcoszorrilla 31-03-2009 16:04:01

Doy fe de que lo propuesto por Caro, funciona correctamente.

Un Saludo.

Iron 01-04-2009 18:35:53

He puesto el nuevo Type y no da fallo ninguno, pero no se ve :(:

Código Delphi [-]
if tipo_pantalla_=3 then begin;
        statictext2.Font.Color :=clWindowText;
        statictext2.Caption:='En Varios Puntos.';
        panel4.Visible:=true;
        statictext3.Font.Color :=clblue;
        statictext3.Caption:='DESABILITADO.';
        panel1.Enabled:=false;
           // Dibujamos lo que falta.
               with Panel4 do
                   begin
                    canvas.Pen.Color:=clBlack;
                    canvas.Pen.Width:=1;
                    canvas.Pen.Style:=psSolid;
                    canvas.MoveTo(500,500);
                    canvas.LineTo(1000,1000);
                  end;
      end;
Si en lugar de poner Panel4, pongo el nombre del formulario, la linea se ve donde no hay Panel´s.Gracias por vuestras respuestas

marcoszorrilla 01-04-2009 21:26:43

Según te he comentado yo mismo he hecho la prueba y funciona correctamente, lo que puede ocurrir es que tus coordenadas están fuera virtualmente del Tpanel y por eso no se ve nada.

Prueba por ejemplo con:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  with panel1 do
   begin
   canvas.Pen.Color:=clBlack;
   canvas.Pen.Width:=1;
   canvas.Pen.Style:=psSolid;
   canvas.MoveTo(10,10);
   canvas.LineTo(500,500);
  end;
end;

Un Saludo.

Davidcfres 02-04-2009 17:09:52

Hola Iron,

Caro tiene razon, no puedes utilizar el canvas de un TPanel directamente.

la unica solucion es crear una nueva class :
Código Delphi [-]
 
type
  TMyPanel = class(TPANEL);
 
(....)
 
procedure TForm4.Button2Click(Sender: TObject);
begin
  TMyPanel(Panel1).canvas.Pen.Color:=clBlack;
  TMyPanel(Panel1).canvas.Pen.Width:=1;
  TMyPanel(Panel1).canvas.Pen.Style:=psSolid;
  TMyPanel(Panel1).canvas.MoveTo(10,10);
  TMyPanel(Panel1).canvas.LineTo(500,500);
end;


Nota :
cuando escribes :
Código Delphi [-]
 
            with Panel4 do
                   begin
                    canvas.Pen.Color:=clBlack;
                    canvas.Pen.Width:=1;
                    canvas.Pen.Style:=psSolid;
                    canvas.MoveTo(500,500);
                    canvas.LineTo(1000,1000);
                  end;

"with Panel4" no permite acceder al canvas del Panel pero al canvas de la form.

David

Caro 02-04-2009 17:21:08

Cita:

Empezado por Davidcfres (Mensaje 343649)
Código Delphi [-]

type
TMyPanel = class(TPANEL);

(....)

procedure TForm4.Button2Click(Sender: TObject);
begin
TMyPanel(Panel1).canvas.Pen.Color:=clBlack;
TMyPanel(Panel1).canvas.Pen.Width:=1;
TMyPanel(Panel1).canvas.Pen.Style:=psSolid;
TMyPanel(Panel1).canvas.MoveTo(10,10);
TMyPanel(Panel1).canvas.LineTo(500,500);
end;

Hola, si defines tu tipo de esta forma, con el mismo nombre, ya no necesitas hacer el Cast y ya no va a tomar el Canvas del formulario

Código Delphi [-]
type  TPanel = class(ExtCtrls.TPanel);

Saluditos

Davidcfres 02-04-2009 17:44:21

Cita:

Empezado por Caro (Mensaje 343652)
Hola, si defines tu tipo de esta forma, con el mismo nombre, ya no necesitas hacer el Cast y ya no va a tomar el Canvas del formulario

Claro... estoy completamente de acuerdo.
pero creo que con esta modificacion el typo es diferente (todos los protected son accesibles) , y por eso prefiero utilisar otro nombre...

Iron 03-04-2009 17:48:07

Ya consigo ver la linea en el Panel, he probado las dos versiones que poneis y funcionan bien :), Gracias a todos.
Una última cosita, cuando creo la linea en el formulario, esta no se ve por el Panel y si la creo en el Panel, del mismo no sale. ¿Se puede crear una linea que se vea en los dos sitios?.

Gracias y un saludo

Sedanbur 04-10-2013 21:11:34

Alguien me puede decir de donde puedo obtener la libreria Timage??? muchas gracias!!

ecfisa 04-10-2013 21:38:40

Hola Sedanbur, bienvenido a Club Delphi :).

Te invitamos a que leas nuestra guía de estilo.

El componente TImage, lo podes encontrar en la pestaña "Additional".

Saludos. :)

Sedanbur 06-10-2013 00:02:23

Gracias por la respuesta y bienvenida, ya lei el enlace,. y encontre el componente TImage... hace mucho que no programo en Delphi..(desde el 2000) y estoy un poco oxidado.. jejjee.. tengo un par de proyectos para hacer, asi que seguro que estare por estos lados bastante seguido... saludos


La franja horaria es GMT +2. Ahora son las 11:33:48.

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