Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Rompecabezas (https://www.clubdelphi.com/foros/showthread.php?t=10975)

Chajal 02-06-2004 18:31:13

Rompecabezas
 
:D Ante todo muchas felicidades a la existencia de este Club. Bueno he estado practicando Delphi 6 y se que mi nivel no llega mas que a novato, espero que este juego aclare muchas dudas a algunos (incluye manual, y codigo fuente) y me ayude a resolver otras, ya que el juego se que se puede mejorar, por ejemplo con un arreglo de botones (hecho que hice en VB, pero no se como implementarlo:confused: en Delphi), que reduciria muchisimo el codigo fuente y haria más eficiente su manejo. Ahora estoy realizando otro juego (:D que espero subir pronto), pero estoy atorado, ya que no se como captural el boton derecho del mouse en una "image".
Ante todo Gracias

Nota: Si no logro subir el juego, lo pueden bajar de

www.geocities.com/ChajalMexico/index.html

delphi.com.ar 02-06-2004 18:40:09

Cita:

Empezado por Chajal
por ejemplo con un arreglo de botones (hecho que hice en VB, pero no se como implementarlo:confused: en Delphi), que reduciria muchisimo el codigo fuente y haria más eficiente su manejo

Delphi te permite crear vectores y matrices de cualquier tipo de dato, entre ellos los controles. Lo que no puedes hacer que si te deja VB es crearlos en tiempo de diseño.
Para crearlos en tiempo de ejecución, solo tienes que definir un vector del tipo que quieras usar, crear en un ciclo los controles y ubicarlos donde te guste. Por otro lado todos los eventos de un mismo tipo pueden apuntar al mismo procedure, así que solo tienes que asignarle el evento a utilizar a un procedure predefinido.

Saludos!

SnaKe 02-06-2004 18:42:58

Puedes utilizar el evento OnMouseDown del TImage, si te fijas en el interface que se crea en ese evento hay una variable que se llama Button, comprueba de la siguiente forma:

Código Delphi [-]
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if (Button = mbRight) then begin
   // Aqui lo que quieras
  end;
end;

Espero que te sirva.
Un saludo.

delphi.com.ar 02-06-2004 18:56:41

Por otro lado, viendo tu código, hacer algo así, para mantener lo hecho en tiempo de diseño:
Código Delphi [-]
  TForm1 = class(TForm)
  ...
  private
    Botones: array[1..9] of TButton; {De 1 a nueve para manter tu numeración}
    ...
  end;
...
procedure TForm1.FormCreate(Sender: TObject);
begin
  Botones[1] := Button1;
  Botones[2] := Button2;
  ...
end;
Otra opción, puede ser manejar una función que devuelva un TButton pasándole su Index, esta si sería un feo case, pero te evitarías el resto:
Código Delphi [-]
function TForm1.GetButton(Index: Integer): TButton;
begin
  case Boton of
    1: Result := Button1;
    2: Result := Button2;
    ...
  else
    raise ...
  end;
end;

Saludos!

Chajal 02-06-2004 19:01:51

Gracias...
 
Gracias Snake, gracias Delphi.com.ar me han aclarado unas dudotas, espero tener pronto la version 2 del rompecabezas, asi como el nuevo juego prometido


La franja horaria es GMT +2. Ahora son las 15:36:59.

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