Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Reproductor Delphi (https://www.clubdelphi.com/foros/showthread.php?t=89245)

anonymous 21-10-2015 22:12:16

Reproductor Delphi
 
Buenas queria saber si me podrian decir como hacer para poder maximizar un panel haciendole doble click , al reproducir un video ..
Como tienen los reproductores actuales , pensaba en modificar algun evento del panel1 ?
Porfavor ayuden .. Muchas gracias :D

AgustinOrtu 21-10-2015 22:26:27

Asumiendo que tenes una estructura: Panel dentro del Form (es decir, Panel.Parent := Form)

En el Panel, setea la propiedad Align --> alClient, y
En el Form. setea la propiedad WindowsState --> wsMaximized

anonymous 21-10-2015 22:39:56

Me queda el formulario ocupando toda la pantalla , yo quisiera dejarlo normal.
Pero al iniciar una pelicula o en cualquier momento .. hacer un doble click y que el panel 1 se maximize en toda la pantalla

AgustinOrtu 21-10-2015 22:50:27

Basicamente lo que tenes que hacer es, en el evento OnDblClick del Panel,

Si Form = Maximizado --> Normal
Sino Form --> Maximizado

Pero es necesario que el panel este alineado alClient (para que se expanda todo lo que su contenedor lo permita)

anonymous 21-10-2015 22:53:35

Se me maximiza todo el form pero el panel1 queda del mismo tamaño

AgustinOrtu 21-10-2015 23:04:33

Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
  Panel1.Align := alClient;
  Panel1.Caption := 'Normal';
  Panel1.Color := clRed;
end;

procedure TForm1.Panel1DblClick(Sender: TObject);
begin
  if WindowState = wsMaximized then
  begin
    WindowState := wsNormal;
    Panel1.Caption := 'Normal';
  end
  else
  begin
    WindowState := wsMaximized;
    Panel1.Caption := 'Maximizado';
  end;
end;

Que es lo que necesitas exactamente? Que el tamaño del panel sea el mismo del form? Porque eso es lo que estoy entendiendo y eso es lo que hace el codigo de arriba

ecfisa 21-10-2015 23:05:41

Hola anonymous.
Cita:

Empezado por anonymous (Mensaje 498235)
Me queda el formulario ocupando toda la pantalla , yo quisiera dejarlo normal.
Pero al iniciar una pelicula o en cualquier momento .. hacer un doble click y que el panel 1 se maximize en toda la pantalla

Según te entiendo, tendrías que usar el evento OnDblClick del TPanel elegido como Display, ejemplo:
Código Delphi [-]
procedure TForm1.PanelDisplayDblClick(Sender: TObject);
begin
  Panel1.Align := alClient;
end;
Ahora, que el video también se maximice dependerá de el tamaño que tenga este...

Saludos :)

escafandra 23-10-2015 01:55:21

Código Delphi [-]
procedure TForm1.SetFullScreen(Full: boolean);
begin
  if Full then
  begin
    BorderStyle:= bsNone;
    WindowState:= wsMaximized;
    DoubleBuffered:= true;
    Panel1.Align:= alClient;
  end
  else
  begin
  //.........
  end;
end;


Saludos.

anonymous 23-10-2015 21:45:43

Cita:

Empezado por AgustinOrtu (Mensaje 498239)
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
  Panel1.Align := alClient;
  Panel1.Caption := 'Normal';
  Panel1.Color := clRed;
end;

procedure TForm1.Panel1DblClick(Sender: TObject);
begin
  if WindowState = wsMaximized then
  begin
    WindowState := wsNormal;
    Panel1.Caption := 'Normal';
  end
  else
  begin
    WindowState := wsMaximized;
    Panel1.Caption := 'Maximizado';
  end;
end;

Que es lo que necesitas exactamente? Que el tamaño del panel sea el mismo del form? Porque eso es lo que estoy entendiendo y eso es lo que hace el codigo de arriba




Al Hacer doble click se me maximiza el formulario pero no el panel ...



Este es mi codigo
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, ExtCtrls, MPlayer, ComCtrls, ToolWin;

type
  TForm1 = class(TForm)
    MediaPlayer1: TMediaPlayer;
    OpenDialog1: TOpenDialog;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    ProgressBar1: TProgressBar;
    Timer1: TTimer;
    Panel1: TPanel;
    procedure BitBtn1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Panel1DblClick(Sender: TObject);



  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
   begin
   MediaPlayer1.FileName := OpenDialog1.Filename ;
   Mediaplayer1.Display := panel1 ;
   MediaPlayer1.Open ;
   mediaplayer1.DisplayRect := panel1.ClientRect;
   Progressbar1.Max := MediaPlayer1.Length ;
   progressbar1.Position := 0;
   Timer1.Enabled := true ;



end;
end ;



procedure TForm1.FormCreate(Sender: TObject);
begin
  Panel1.Align := alClient;
  Panel1.Caption := 'Normal';
  Panel1.Color := clRed;
end;


procedure TForm1.Panel1DblClick(Sender: TObject);
begin
  if WindowState = wsMaximized then
  begin
    WindowState := wsNormal;
    Panel1.Caption := 'Normal';
  end
  else
  begin
    WindowState := wsMaximized;
    Panel1.Caption := 'Maximizado';
  end;
end;


procedure TForm1.Timer1Timer(Sender: TObject);
begin
Progressbar1.Position := Mediaplayer1.Position ;
end;



end.

escafandra 24-10-2015 00:40:16

Y entiendo lo que dices. Haz lo siguiente:

Crea un nuevo formulario con available con el la propiedad KeyPreview:= true y siguiente código en el evento OnKeyDown:
Código Delphi [-]
procedure TForm2.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
const
 VK_ESCAPE = $1B;
begin
  if Key = VK_ESCAPE then Close;
end;

En el formulario principal escribes esto en el evento OnDblCick:
Código Delphi [-]
procedure TForm1.Panel1DblClick(Sender: TObject);
begin
  Form2:= TForm2.Create(self);
  Form2.BorderStyle:= bsNone;
  Form2.WindowState:= wsMaximized;
  Form2.Panel1.Align:= alClient;
  MediaPlayer1.Display:= Form2.Panel1;
  MediaPlayer1.DisplayRect:= Rect(0, 0, Screen.Width, Screen.Height);
  Form2.ShowModal();
  MediaPlayer1.Display:= Panel1;
  Form2.Free;
end;

El comportamiento será el siguiente: al hacer doble click en el Panel del video en ejecución se maximiza a pantalla completa sin ver formulario alguno y el vídeo lo verás FullSceen, con la salvedad de sus proporciones, que serán respetadas. En esta situación, al pulsar Escape volverá al formulario principal como si nada hubiera pasado, visualizándose normalmente en el panel diseñado al efecto.


Saludos.

escafandra 24-10-2015 01:22:59

Pensándolo mejor, en el segundo formulario no te hace falta ningún Panel quedando el evento así:

Código Delphi [-]
procedure TForm2.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
const
 VK_ESCAPE = $1B;
begin
  if Key = VK_ESCAPE then Close;
end;
Código Delphi [-]
procedure TForm1.Panel1DblClick(Sender: TObject);
begin
  Form2:= TForm2.Create(self);
  Form2.BorderStyle:= bsNone;
  Form2.WindowState:= wsMaximized;
  Form2.KeyPreview:= true;
  MediaPlayer1.Display:= Form2;
  MediaPlayer1.DisplayRect:= Rect(0, 0, Screen.Width, Screen.Height);
  Form2.ShowModal();
  MediaPlayer1.Display:= Panel1;
  Form2.Free;
end;

Saludos.

escafandra 24-10-2015 01:59:19

Y si nos ponemos a simplificar, ni siquiera hace falta crear visualmente ningún Form2, lo podemos hacer por código:

Pongo toda la unit de ejemplo para mostrar como asigno el evento OnKeyDown que llamo FullScreenKeyDown
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ImgList, StdCtrls, MPlayer, ExtCtrls;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    MediaPlayer1: TMediaPlayer;
    OpenDialog1: TOpenDialog;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Panel1DblClick(Sender: TObject);
    procedure FullScreenKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
  begin
    MediaPlayer1.FileName:= OpenDialog1.FileName;
    MediaPlayer1.Open;
  end;
end;

procedure TForm1.Panel1DblClick(Sender: TObject);
var
  Form2: TForm;
begin
  Form2:= TForm.Create(self);
  Form2.BorderStyle:= bsNone;
  Form2.WindowState:= wsMaximized;
  Form2.KeyPreview:= true;
  Form2.OnKeyDown:= FullScreenKeyDown;
  MediaPlayer1.Display:= Form2;
  MediaPlayer1.DisplayRect:= Rect(0, 0, Screen.Width, Screen.Height);
  Form2.ShowModal();
  MediaPlayer1.Display:= Panel1;
  Form2.Free;
end;

procedure TForm1.FullScreenKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
const
  VK_ESCAPE = $1B;
begin
  if Key = VK_ESCAPE then Close;
end;

end.

Saludos.

anonymous 26-10-2015 19:26:48

Gracias Idolo .. el unico error es que al apretar ESC se cierra el programa

anonymous 26-10-2015 19:49:41

Como se puede acceder a los eventos de un formulario creado por Codigo ? Tengo esa duda , si me podrias explicar un poco me ayudarias :D

AgustinOrtu 26-10-2015 19:57:20

Código Delphi [-]
type
 TAlgunaClase = class
 public
   procedure TuEvento(Sender: TObject);
 end;

{ mas adeante.. }
FormularioCreadoPorCodigo.OnCreate := TuEvento;

Notar que el evento que asignas tiene que ser de firma compatible. Esto es, que los parametros sean lo mismo. Como se ve en el ejemplo, el procedimiento TuEvento tiene un parametro Sender de tipo object, esto es asi porque OnCreate es un evento de tipo TNotifyEvent el cual se declara asi:

Código Delphi [-]
TNotifyEvent = procedure(Sender: TObject) of object;

El of object te requiere ademas, que el evento este declarado en una clase, de ahi que yo lo haya puesto en TAlgunaClase

escafandra 26-10-2015 22:50:10

Cita:

Empezado por anonymous (Mensaje 498387)
... el unico error es que al apretar ESC se cierra el programa

Tienes razón, no me di cuenta al sacar distintas versiones de lo mismo. La solución es bien fácil:
Código Delphi [-]
procedure TForm1.FullScreenKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
const
  VK_ESCAPE = $1B;
begin
  if Key = VK_ESCAPE then (Sender as TForm).Close;
end;


Saludos.

escafandra 26-10-2015 23:26:27

Cita:

Empezado por anonymous (Mensaje 498388)
Como se puede acceder a los eventos de un formulario creado por Codigo ? Tengo esa duda , si me podrias explicar un poco me ayudarias :D

Ya te ha contestado AgustinOrtu. En el código que expuse en el mensaje 12 tienes el ejemplo de cómo lo hice yo:
Código Delphi [-]
Form2.OnKeyDown:= FullScreenKeyDown;
Siendo FullScreenKeyDown un evento tipo OnKeyDown (TKeyEvent) procedimiento que pertenece a TForm1:
Código Delphi [-]
TKeyEvent = procedure (Sender: TObject; var Key: Word; Shift: TShiftState) of object;

En realidad un evento no es más que un puntero a un procedimiento perteneciente a una clase que lo recibe.

Saludos.


La franja horaria es GMT +2. Ahora son las 19:33:53.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi