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 16-12-2006
Deiv Deiv is offline
Miembro
 
Registrado: jul 2005
Ubicación: La Paz - Bolivia
Posts: 364
Poder: 20
Deiv Va por buen camino
Lightbulb Mouse con Texto Orbital

Hola,
En Febrero de este año pregunté en el foro Incluir Cursor Animado especial, en ese entonces mis conocimientos de autodidacta y novato en Delphi no estaban muy compenetrados (y aún me considero novato, modestia aparte) hasta que empecé a practicar hace un par de semanas atrás la Construcción de Páginas Web, y en ese trayecto buscando ejemplos de JavaScript, encuentro el código de "Texto Orbital" en MundoJavaScript.com aquel que había consultado en el Foro exponiendo un ejemplo de la página "Massy". He abierto un nuevo hilo por 2 razones: No quería que se pierda en "Varios" y quise darle un mejor título al Post.
Los consejos de los amigos:
Cita:
Empezado por dec
En realidad no se trata de un cursor animado, sino que el efecto que puedes ver alrededor del cursor lo lleva a cabo cierto código JavaScript, el cual, por cierto, no funciona en FireFox (y no pude verlo sino en Internet Explorer).
No sé si partiendo de ese JavaScript podrías hacer algo similar en Delphi. O bastaría con que pusieras un cursor animado, tal cual. Si vas por lo primero, obtén el código fuente JavaScript de la página Web que mencionas y que se relaciona con el efecto que dices. Ponte a elo y trataremos de ayudarte.
o de:
Cita:
Empezado por Neftali
Lo más aproximado que se me ocurre es que sustituyas todos los cursores estandard, por los correspondientes con el giro:
Mi opinión: Mucho trabajo, y poco beneficio. Además, como tú bien comentas en ese supuesto, se perdería la secuencia de giro al cambiar de cursor.
Me dejaron con una información que a la larga debía averiguar.
Bueno, HOY después de analizar el ejemplo de JavaScript "Texto Orbital" y relacionando con la función de Seoane EllipsePoint, he llegado a intentar realizar ese mismo efecto y acomodarlo en Delphi como Cursor animado especial con el siguiente código:
(Colocar la propiedad Cursor del Button1 a crHandPoint)

Código Delphi [-]
type
  TForm1 = class(TForm)
    Button1: TButton;
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Button1Click(Sender: TObject);
  private
    Texto:string;
    MouseX, MouseY:integer;
    Letra: array[0..50] of TStaticText;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  currStep:extended=0;

implementation

{$R *.dfm}

function EllipsePoint(X1,Y1,X2,Y2,Largo: Integer; currStep, Angulo: Double): TPoint;
var
  Cx,Cy,A,B: Double;
begin
  A:= abs(X2-X1)/2;
  B:= abs(Y2-Y1)/2;
  Cx:= (X1+X2)/2;
  Cy:= (Y1+Y2)/2;
  Result.X:= Trunc(Cx + A * cos(currStep+360/Largo*Angulo));
  Result.Y:= Trunc(Cy + B * sin(currStep+360/Largo*Angulo));
end;

procedure TForm1.FormCreate(Sender: TObject);
var
   n, Espacio:integer;
begin
  Texto:='Cursor Animado-';
  Espacio:=0;
  for n:=0 to length(Texto) do
     begin
       Letra[n]:= TStaticText.Create(Self);
       with Letra[n] do
         begin
           Parent:= Self;
           Top:= 10;
           Left:= Espacio;
           Caption:= Texto[n];
           autosize:=true;
           Font.Color:= clBlue;
           Font.Name:='Arial';
           Font.Size:=10;
           Alignment:=taCenter;
         end;
         Espacio:=Espacio+Letra[n].Width;
     end;
     Timer1.Enabled:=true;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  i:integer;
  P: TPoint;
begin
  for i:= 0 to length(Texto) do
  begin
    P:= EllipsePoint(10,10,150,70,length(Texto),currStep,(Pi*i)/180);
    Letra[length(Texto)-i].Left:= MouseX + P.X - 80;
    Letra[length(Texto)-i].Top := MouseY + P.Y - 40;
    Application.ProcessMessages;
  end;
  currStep:=currStep+0.03;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  MouseX:= x;
  MouseY:= y;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   timer1.Enabled:=false;
end;

end.
Bueno, este ejemplo todavía está en etapa de construcción, falta por ejemplo que el fondo del texto orbital la fuente y el tamaño del texto sea más pequeño y hay muchas cosas más por corregir imagino, en la cual estaré atento a vuestra experiencia.
Mis preguntas:
1.- Respondiendo a dec: He intentado adaptar dicho código JavaScript en un TPaintBox incluido en un TPanel, pero todo el área del TPanel se sobrepone a los objetos en el Form al movimiento del mouse, mala idea. Luego intenté realizar en un TLabel, pero este se situa detras de los objetos al movimiento del mouse, segunda mala idea, por ello decidí (a lo que mas se aproximaba) en un TStaticText. Pero aún así este componente me mueve cuadros pequeños por cada letra y es notorio cuando se posiciona sobre otro objeto. Y más aún si el texto contiene un string bastante largo es más notorio todo ello en el movimiento orbital.
¿Conocen de algún otro componente parecido al TStaticText que se sobreponga al los objetos pero en forma Transparente? la propiedad transparente aquí no me funciona.

2.- Respondiendo a Neftali: Ahora ya no hay problema con el cursor al posicionarse sobre un objeto que tenga la propiedad por ejemplo en mi caso Button1.Cursor:=crHandPoint; el Texto no pierde la secuencia de giro, pero..... pierde el "Centro" de giro, es decir, mientras el cursor está posicionado en el objeto [s]el Texto pierde la posición del FORM[/s], y tratándose de objetos más grandes es más notorio este desfase.
¿Existe alguna forma de solucionar esa ubicación, al posicionarse en un objeto? La finalidad es que el Mouse esté siempre en el centro del texto orbital mientras esté dentro del Form.

3.- Si observaron la variable currStep va a ir incrementando su valor constantemente (siempre), ¿Qué podrá pasar si por así decirlo dejo trabajando el programa todo 1 dia o 1 semana, dicho valor no excederá el tipo de rango que tiene? ¿Cómo solucionar esta parte?

Ahora si espero vuestra ayuda por favor, y disculpen lo extensivo del post.
Deiv

Última edición por Deiv fecha: 26-08-2007 a las 01:53:53.
Responder Con Cita
  #2  
Antiguo 19-12-2006
Deiv Deiv is offline
Miembro
 
Registrado: jul 2005
Ubicación: La Paz - Bolivia
Posts: 364
Poder: 20
Deiv Va por buen camino
Exclamation

Hola,
Bueno he mejorado el código, ahora tiene pinta de una verdadera órbita, ahora si se puede llamar "Mouse con Texto Orbital" pueden verlo en el nuevo ZIP que adjunto.
Al parecer ese desfase del centro que existe al ubicarse sobre otro objeto se puede solucionar con el evento OnMouseMove para cada objeto, capturando así sus coordenadas "X" y "Y".

- ¿De que manera buscar un común denominador de tal forma que esa posición "X" y "Y" obtenga un cálculo común para todos?

- Pensaba sobre una de mis otras preguntas que la variable currStep iba creciendo constantemente, tal vez solucionar con un IF que si llegase cerca a su límite, volver a reiniciarlo?

- He leido sobre el componente StaticText, y a este no se le puede hacer nunca transparente ya que es un componente que desciende de TWinControl y todos los TWinControls son ventanas verdaderas. ¿Existe otro componente que se sobreponga encima de los objetos mostrando un texto pero de forma transparente? o ¿de que otra forma encarar esta mi aplicación?

Última edición por Deiv fecha: 26-08-2007 a las 01:53:53.
Responder Con Cita
  #3  
Antiguo 06-01-2007
Deiv Deiv is offline
Miembro
 
Registrado: jul 2005
Ubicación: La Paz - Bolivia
Posts: 364
Poder: 20
Deiv Va por buen camino
Wink Al fin

Hola Amigos,
De tanto indagar e investigar, me recomendaron el uso del componente OSD (On Screen Display) es lo que Buscaba, si Ustedes adaptan el código a los ejemplos que les envié con este componente, tendrán un excelente cursor animado. Lástima que el Componente sea de pago, pero en fin, como dec dijo en programción todo se puede pero a veces cuesta tiempo y otras cosas.
Un saludo
Deiv
Responder Con Cita
  #4  
Antiguo 26-10-2008
Deiv Deiv is offline
Miembro
 
Registrado: jul 2005
Ubicación: La Paz - Bolivia
Posts: 364
Poder: 20
Deiv Va por buen camino
Hola,
Abro el hilo nuevamente ya que encontré algo parecido a lo que en aquel entonces (años..... de duda... que se quedó...) intentaba realizar; si bien les comenté del último componente OSD. De casualidad encontre un programa llamado RealDraw en esta página que si lo descargan como versión de prueba, instalan un momento tan solo para confirmar lo que digo, en su ABOUT pueden ver este giro de letras al movimiento del mouse.

¿Alguien puede explicar por favor de que artificios y componentes se valieron para realizar ese texto que se mueve alrededor del mouse en movimiento, en el ABOUT de ese Programa?

.

Última edición por Deiv fecha: 26-10-2008 a las 16:04:45.
Responder Con Cita
  #5  
Antiguo 27-10-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 21
cHackAll Va por buen camino
Cita:
Empezado por Deiv Ver Mensaje
...¿Alguien puede explicar por favor de que artificios y componentes se valieron para realizar ese texto que se mueve alrededor del mouse en movimiento, en el ABOUT de ese Programa?
Hola Deiv; serías tan amable de adjuntar un snapshot?
__________________
RTFM > STFW > Foro > Truco > Post > cHackAll > KeBugCheckEx
Responder Con Cita
  #6  
Antiguo 30-10-2008
Deiv Deiv is offline
Miembro
 
Registrado: jul 2005
Ubicación: La Paz - Bolivia
Posts: 364
Poder: 20
Deiv Va por buen camino
Wink

Hola,
Gracias por responder, no se como colocar un SnapShot, y por alguna razón el Foro ya no me permite subir archivos ZIP (dentro la Imagen) ya que aparentemente me excedí del Límite, pero cuando reviso mis preferencias no es así, de repente algo no estoy entendiendo....
De todas maneras envié el ejemplo en esta página donde se ve el efecto del Texto alrededor del mouse, es lo mismo que se ve en el ABOUT de este Programa RealDraw, solo que ya no está con código de JScript, he ahí el interés del mismo de saber cómo lo hicieron?
¿Alguna Idea?

Última edición por Deiv fecha: 30-10-2008 a las 01:37:28.
Responder Con Cita
  #7  
Antiguo 30-10-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 21
cHackAll Va por buen camino
Al parecer no solo no he leido el título del hilo, sino que no he visto tus comentarios en fin; a jugar se dijo:

Código Delphi [-]
unit Unit1;

interface

uses Windows, Types, Classes, Graphics, Controls, Forms, ExtCtrls;

type
 TForm1 = class(TForm)
  Timer: TTimer;
  procedure FormCreate(Sender: TObject);
  procedure TimerTimer(Sender: TObject);
  procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  procedure FormPaint(Sender: TObject);
 end;

var Form1: TForm1;

implementation

{$r *.dfm}

var Bitmap: TBitmap;

procedure TForm1.FormCreate(Sender: TObject);
begin
 Timer.Interval := 32;
 Bitmap := TBitmap.Create;
 Bitmap.Width := ClientWidth;
 Bitmap.Height := ClientHeight;
end;

procedure TForm1.TimerTimer(Sender: TObject);
begin
 Tag := (Tag - 2) mod 360;
 FormMouseMove(nil, [], 0, 0);
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
const
 Text: string = 'cHackAll ';
 Radio: Integer = 128;
var
 Point: TPoint;
 Index, Value, Color: Integer;
begin
 with Bitmap.Canvas do
  begin
   FillRect(Rect(0, 0, Bitmap.Width, Bitmap.Height));
   Point := ScreenToClient(Mouse.CursorPos);
   for Index := 1 to Length(Text) do
    begin
     Value := Round(Radio * Sin(((2 * Pi) * (Index / Length(Text))) + ((Tag / 180) * Pi)));
     if Value > 0 then
      Color := $D0
     else
      Color := Value + 128;
     Font.Size := 32 - Value;
     SetBkMode(Handle, TRANSPARENT);
     SetTextColor(Handle, RGB(Color, Color, Color));
     Windows.TextOut(Handle, Point.X + Round(Radio * Cos(((2 * Pi) * (Index / Length(Text))) + ((Tag / 180) * Pi))),
                             Point.Y + Value, @Text[Index], 1);
    end;
  end;
 FormPaint(nil);
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
 BitBlt(Canvas.Handle, 0, 0, Bitmap.Width, Bitmap.Height, Bitmap.Canvas.Handle, 0, 0, SRCCOPY);
end;

end.

Saludos
__________________
RTFM > STFW > Foro > Truco > Post > cHackAll > KeBugCheckEx
Responder Con Cita
  #8  
Antiguo 01-11-2008
Deiv Deiv is offline
Miembro
 
Registrado: jul 2005
Ubicación: La Paz - Bolivia
Posts: 364
Poder: 20
Deiv Va por buen camino
Acabo de leer el post y bueno, no tengo delphi a mano en este momento, y lo probaré en casa para ver tu código cHackAll, de todas maneras en este momento paralelamente subo un Video de el About aquí de este Programa, para que se entienda de que es lo que quiero obtener (Ojo que el link a partir de la fecha solo funcionará por 90 días) pesa apenas 1 MB.
Si observan este video, se han de fijar que si el mouse no se encuentra dentro de la ventana del form, las letras giran o se mueven por doquier y en desorden; y si ubicas el puntero del mouse en algún lugar de la ventana, entonces notarán que el texto: primero, se ubica alrededor como centro en el puntero del mouse, girando; y si se lo deja sin mover el mouse (estático) al final el texto gira alrededor en forma circular.

Con el código y ejemplo que puse lo que intente es realizar algo parecido pero de forma orbital y no encontraba el componente adecuado, pero este ABOUT es el que más se acerca a lo que en ese entonces intenté realizar, probaré el código del último post y veremos si es eso lo que realmente deseo. Gracias.
Saludos
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Posicion del mouse Luciano M. OOP 8 11-01-2006 20:05:16
Problema con el mouse y la alineacion del texto en un Tcombobox Carlos Arevalo Varios 3 23-09-2005 18:00:36
problemas con mouse ahkimpech Linux 1 29-07-2005 02:10:03
mouse AngelMarvin Windows 2 20-07-2004 08:16:35
inhabilitar mouse Barriccel API de Windows 2 04-12-2003 16:07:35


La franja horaria es GMT +2. Ahora son las 00:56:38.


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