Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Gráficos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 31-08-2017
Karlo Magno Karlo Magno is offline
Registrado
NULL
 
Registrado: ago 2017
Posts: 5
Poder: 0
Karlo Magno Va por buen camino
Acceso a procedures protected en canvas.

Hola a todos. Soy nuevo en este foro y también en Delphi. Hace años usé mucho el Turbo Pascal 7, lo dejé. Cuando lo he querido retomar me he encontrado que está totalmente fuera de sitio, si quería aprovechar mi experiencia Pascal tenía que ser en Delphi, concretamente uso Lazarus.
Me he encontrado con que para funciones gráficas se usa canvas pero no he sido capaz de dibujar ni un solo punto, solamente he podido acceder a procedimientos no protegidos (rectangle, ellipse....), el problema es que setpixel es protegido y no veo como acceder a él.

Os pongo un ejemplo de lo que intento. ¿hay un alma caritativa por ahí que me quiera echar una mano?.

Gracias.


Código Delphi [-]
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
  StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure dibuja;
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }
  procedure Tform1.dibuja;
  var contador : integer = 0;
    posicionx,posiciony : integer;
    begin
    randomize;
       while contador<5000 do
        begin
         canvas.brush.color:=Random($1000000);
         posicionx:=random(form1.width);
         posiciony:=random(form1.height);
         canvas.setpixel(posicionx,posiciony,canvas.brush.color);
         inc(contador);
         end;
        end;



procedure TForm1.Button1Click(Sender: TObject);
 begin
  dibuja;
 end;

Última edición por Casimiro Notevi fecha: 31-08-2017 a las 18:28:57.
Responder Con Cita
  #2  
Antiguo 31-08-2017
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is online now
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Bienvenido a clubdelphi, como siempre aconsejamos a los nuevos, no olvides leer nuestra guía de estilo, gracias por tu colaboración


Recuerda poner los tags al código fuente, ejemplo:



Gracias
Responder Con Cita
  #3  
Antiguo 31-08-2017
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.

Lo primero que te conviene es convertir al procedimiento "Dibuja" como método de Form1, declarándolo dentro de la clase TForm1:
Código Delphi [-]
...
type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
      procedure Dibuja;   // <-- (1)
  public
    { public declarations }
  end;    
...
Posicionado en (1) presionas Ctrl+Shift+C y Lazarus generará la cabecera del método (esqueleto) de forma automática, luego escribes en él tu código:
Código Delphi [-]
...
implementation

procedure TForm1.Dibuja;
var
  i, PixCol: integer;
  Pto: TPoint;
begin
  Randomize;
  for i := 1 to 2000 do
  begin
    PixCol:= Random($FFFFFF);
    Pto.x := random(Width);
    Pto.y := random(Height);
    Canvas.Pixels[Pto.x, Pto.y] := PixCol;
  end;
end;
...
Fijate que accedes al color de cada píxel del form como un arreglo bidimensional mediante la propiedad Pixels.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 01-09-2017
Karlo Magno Karlo Magno is offline
Registrado
NULL
 
Registrado: ago 2017
Posts: 5
Poder: 0
Karlo Magno Va por buen camino
Smile Funciona¡¡¡¡¡

A la primera.

Veo que Canvas ofrece "propiedades" que permiten acceder a los procedimientos protegidos de forma fácil, ésto facilita mucho las cosas.

Las demás cosas que introduces son claras e intuitivas pero no acabo de ver claro porque recomiendas que declare el procedimiento "dibuja" dentro de los privados de Form1, de hecho también funciona poniéndolo arriba, en la declaración de procedimientos junto a Button1.

De todas formas el problema de fondo es mi poco manejo de la programación orientada a objetos, aprendí a programar hace mucho tiempo con Pascal 7 de Borland, en este compilador se podía programar también en POO pero no era imprescindible, todo era fácil, ordenado e intuitivo, no veía necesidad de manejar Objetos pero ahora me he encontrado con que en Delphi es prácticamente imprescindible, si no los controlas estás XXXXXXXX.

En fín, habrá que ponerse a ello. ¿Conoces algún buen tutorial, manual o cursillo on line?

Salud y muchas gracias.
Responder Con Cita
  #5  
Antiguo 01-09-2017
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.

Te aconsejé usarlo como método de Form1 por que sólo lo aplicas a él y es buena práctica en OOP. Pero tranquilamente lo podrías declarar como un procedimiento normal, al que le pasas el formulario como parámetro, vgr.:
Código Delphi [-]
procedure DibujaForm(aForm: TForm; const NumPix: Integer);
var
  i, PixCol: integer;
  Pto: TPoint;
begin
  Randomize;
  for i := 1 to NumPix do
  begin
    PixCol := Random($FFFFFF);
    Pto.x  := Random(aForm.Width);
    Pto.y  := Random(aForm.Height);
    aForm.Canvas.Pixels[Pto.x, Pto.y] := PixCol;
  end;
end;     

// Ejemplo de uso:
procedure TForm2.Button1Click(Sender: TObject);
begin
  DibujaForm(Self, 2000);
end;

Un buen libro sobre Delphi y OOP es: La cara oculta de Delphi 4, Aquí, en el FTP de Club Delphi, encontrarás mas material interesante de lectura sobre el tema.

Una pagina de consulta muy útil es: Delphi Basics.

Algunos tutoriales:y encontrarás mas información en los buscadores.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo 12-09-2017
Karlo Magno Karlo Magno is offline
Registrado
NULL
 
Registrado: ago 2017
Posts: 5
Poder: 0
Karlo Magno Va por buen camino
Muchas gracias. Da gusto preguntar por aquí.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Firebird Procedures VS Delphi Procedures ASAPLTDA Debates 17 29-05-2014 00:09:34
Copiar TLabel.Canvas sobre TBitmap.Canvas @CSE1970 Gráficos 2 23-10-2013 13:46:53
Error C2248en C++: cannot access protected member rcarrillom .NET 3 12-03-2010 03:10:04
Terminar con Procedures. alexxino Varios 3 28-01-2007 23:40:57
Lio con Procedures!!! diegofhernando Varios 8 12-11-2003 17:54:43


La franja horaria es GMT +2. Ahora son las 12:30:12.


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