Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-05-2004
cristian bravo cristian bravo is offline
Registrado
 
Registrado: may 2004
Posts: 2
Poder: 0
cristian bravo Va por buen camino
Question darle movimiento a este grafico

hola como estan, yo aca medio complicado por que tengo este codigo y quiero que la funcion que grafico se mueva (osile) que se vea el recorido de la onda y no se como hacerlo alguno de ustedes podria darme una mano porfa se los agradeseria aca esta el codigo para que me digan lo malo y correcciones y me den sus ideas grax..


unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Buttons, StdCtrls, ExtCtrls, ExtDlgs, Menus, Math;
type
TForm1 = class(TForm)
Button1: TButton;
Image1: TImage;
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
Button2: TButton;
Button3: TButton;
SavePictureDialog1: TSavePictureDialog;
Label4: TLabel;
Label5: TLabel;
Button4: TButton;
OpenPictureDialog1: TOpenPictureDialog;
Label6: TLabel;
Edit3: TEdit;
Button5: TButton;
Edit2: TEdit;
Label3: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var xi, yi, i, n, xn, h, a: Integer;
f: double;
begin
f := StrToFloat(Edit3.Text);
n := Round(StrToFloat(Edit1.Text));
a := Round(StrToFloat(Edit2.Text))*10;
xn:= 540;
Image1.Canvas.Pen.Color := clRed;
for i:= 0 to xn do
begin
yi:=Round(a*sin(f*DegToRad(i))+100);
Image1.Canvas.Pixels[i+n,200-yi]:= clRed;
Image1.Canvas.Pixels[i+n+1,200-yi]:= clRed;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
application.Terminate;
end;
procedure TForm1.Button3Click(Sender: TObject);
var
archivo: TEXTFILE;
begin
if SavePictureDialog1.Execute then
begin
Image1.Picture.SaveToFile( SavePictureDialog1.FileName);
GetNamePath ;
assignfile(archivo,SavePictureDialog1.FileName + '.txt');
Rewrite(archivo);
WriteLN(archivo,Trim(Edit1.Text) );
//WriteLN(archivo,Trim(Edit2.Text) );
WriteLN(archivo,Trim(Edit3.Text) );
CloseFile(archivo) ;
end;
end;
procedure TForm1.Button4Click(Sender: TObject);
var
archivo: TEXTFILE;
aux,aux2,aux3:String;
begin
if OpenPictureDialog1.Execute then
Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
assignfile(archivo,OpenPictureDialog1.FileName + '.txt');
Reset(archivo);
ReadLN(archivo,aux);
Edit1.Text:=aux;
ReadLN(archivo,aux2);
// Edit2.Text:=aux2;
ReadLN(archivo,aux3);
Edit3.Text:=aux3;
CloseFile(archivo) ;
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
Image1.Picture.Bitmap.LoadFromFile('limpiar.bmp');
end;
end.
Responder Con Cita
  #2  
Antiguo 09-05-2004
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Lo primero como es tu primer mensaje en el foro te doy la bienvenida.

Convendría que le pegaras un vistazo a la Guía de estilo de los Foros, con ello verás las normas mínimas, el cumplimiento de las mismas redunda en un mejor funcionamiento de éstos y el obtener respuestas más rápidas.

Puedes pulsar en el botón editar de tu mensaje y colocarle las etiquetas Vb, en tu caso convendría que pusieras delante de tu código la etiqueta [ Delphi]
y al final[ /Delphi]

De esta manera tu código sería mucho más legible.

Si lo que deseas es que cada punto de la onda se vaya dibujando lentamente, creo que con un Bmp no lo vas a lograr, quizás tuvieras que utilizar funciones para escribir puntos directamente en el Canvas.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.

Última edición por marcoszorrilla fecha: 09-05-2004 a las 11:43:51.
Responder Con Cita
  #3  
Antiguo 09-05-2004
Amilius Amilius is offline
No confirmado
 
Registrado: ene 2004
Posts: 138
Poder: 0
Amilius Va por buen camino
Cita:
Empezado por cristian bravo
procedure TForm1.Button5Click(Sender: TObject);
begin
Image1.Picture.Bitmap.LoadFromFile('limpiar.bmp');
end;


Bueno la verdad mejor si creas y recuperas una vez el gráfico de "fondo" ( que supongo es visualmente muy agradable ) al crear el form y lo liberas en el onDestroy.

Para que tu gráfico se vea oscilando debes sincronizar el periodo de la onda con múltiplos del ancho de tu área gráfica, de lo contrario el efecto será de onda desplazándose.

Si realmente quieres que te ayuden con el código tienes que dar nombres muy significativos a tus variables:

aux,aux2,aux3:String;
var xi, yi, i, n, xn, h, a: Integer;

A nadie le gusta tener que revisar codigo ajeno para saber que hacen esos "aux" y las otras variables de la segunda línea: no importa que se usen (tan horrorosamente abreviadas :P ) en matemáticas, en programación tienes libertad de utilizar más caracteres y te recomiendo que los uses: especialmente en las partes más complicadas del código para darle mayor significado.

Última edición por Amilius fecha: 09-05-2004 a las 17:09:19.
Responder Con Cita
  #4  
Antiguo 10-05-2004
cristian bravo cristian bravo is offline
Registrado
 
Registrado: may 2004
Posts: 2
Poder: 0
cristian bravo Va por buen camino
sorry por lodos los errores y por la poca cortesia de mi parte, espero que mejorar en adelnte, lo sierto es que hase 2 semanas que e comensado con delphi y no cacho mucho por eso pregunto sobre esto por que no e encantrado mucho sobre el movimiento en delphi les agradeseria que pudieran ser algo mas explicativos porfa.

sorry por lo de las variables es que no e estado muy creativo y e estado medio complicado tratando de hacer esto para la siguiente sere algo mas explicativo grax.

PD: algo de codifo mo me vendria nada mal si es que no les molesta porfis
Responder Con Cita
  #5  
Antiguo 10-05-2004
Amilius Amilius is offline
No confirmado
 
Registrado: ene 2004
Posts: 138
Poder: 0
Amilius Va por buen camino
No tengo ejemplos puntuales para este tipo de graficación (ondas), pero:

* Para graficar la onda: es mejor usar el MoveTo() para el primero punto y luego una serie de LineTo(). El pixels es un tanto lento. Un objeto TTimer sería bueno para la animación y en su OnTimer ejecutar un repaint() de un TPaintBox donde en su evento onPaint dibujes un Tbitmap conteniendo la onda graficada:
* En un Tbitmap preparas la imagen (en su canvas aplicas los moveTo(), LineTo(), etc) y luego aplicas un .draw de este TBitmap en el canvas del PaintBox: obtienes una animación sin parpadeos.


+ Y un tip mas: Si aún tienes algo de parpadeo:
Código Delphi [-]
with self do//self es el control que contiene el gráfico
    ControlStyle:=ControlStyle+[csOpaque];
OJO que esto es más recomendado para formularios donde sólo tienes el area gráfica y nada más: como en un juego, o un form donde sólo muestres el gráfico de las ondas.

P.D.

En lugar de: application.Terminate;

un: close(); generalmente es más recomendado.
Responder Con Cita
Respuesta



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


La franja horaria es GMT +2. Ahora son las 14:10:43.


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