Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: antoniog - Febbraio 17, 2018, 05:51:31 pm

Titolo: Utilizzare TPanel per creare un'applicazione MDI
Inserito da: antoniog - Febbraio 17, 2018, 05:51:31 pm
Posto il codice per visualizzare, muovere, nascondere massimizzare, minimizzare un pannello all'interno di una form.
Volevo allegare l'esempio ma il file è troppo grande,  potete scaricarlo da questo link:
www.genuardi.eu/download/MuoveSpostaOggettiRuntime.zip

Codice: [Seleziona]

unit Unit1;


{$mode objfpc}{$H+}


interface


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


type


  { TForm1 }


  TForm1 = class(TForm)
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    BitBtn3: TBitBtn;
    BitBtn4: TBitBtn;
    BitBtn5: TBitBtn;
    Panel1: TPanel;
    Panel2: TPanel;
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure BitBtn3Click(Sender: TObject);
    procedure BitBtn4Click(Sender: TObject);
    procedure BitBtn5Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Panel1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Panel1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer
      );
    procedure Panel1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { private declarations }
    FDownPoint: TPoint;
    FDragging: Boolean;
    FAllowDrag: Boolean;
  public
    { public declarations }
  end;


var
  Form1: TForm1;


implementation
uses
  {$IFNDEF FPC}
  Windows, 
{$ELSE}
  LCLIntf, LCLType, LMessages, Variants;
{$ENDIF}


{$R *.lfm}


{ TForm1 }


procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Button = mbLeft then
   begin
     FDragging := True;
     GetCursorPos(FDownPoint);
     FDownPoint.X := FDownPoint.X - Panel1.Left;
     FDownPoint.Y := FDownPoint.Y - Panel1.Top;
   end;
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
  FAllowDrag := True;
end;


procedure TForm1.BitBtn2Click(Sender: TObject);
begin
  Panel1.Align:=alClient;


end;


procedure TForm1.BitBtn3Click(Sender: TObject);
begin
  Panel1.Align:=alnone;
  Panel1.Height:=30;
  Panel1.Width:=300;
  Panel1.Top:=Form1.Height-60;
  Panel1.Left:=0;
end;


procedure TForm1.BitBtn4Click(Sender: TObject);
begin
  Panel1.Align:=alnone;
  Panel1.Width:=400;
  Panel1.Height:=400;
  Panel1.Top:=200;
  Panel1.Left:=200;
end;


procedure TForm1.BitBtn5Click(Sender: TObject);
begin
   Panel1.Visible:=True;
end;


procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  Panel1.Visible:=False;
end;


procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  MovePoint : TPoint;
begin
  if FDragging and FAllowDrag then
   begin
     GetCursorPos(MovePoint);
     Panel1.SetBounds(
       MovePoint.X - FDownPoint.X,
       MovePoint.Y - FDownPoint.Y,
       Panel1.Width, Panel1.Height
     );
   end;
end;


procedure TForm1.Panel1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
   if Button = mbLeft then
   FDragging := False;
end;


end.

Titolo: Re:Utilizzare TPanel per creare un'applicazione MDI
Inserito da: Stilgar - Febbraio 17, 2018, 09:55:24 pm
Ciao.
Perché non estendi il pannello e provi a scrivere un tuo pannello che possa avere quelle funzionalità.
Butto lì l'idea.
Se mettessi un bottone in altro a destra del pannello potresi avere un roller panel che si "chiude" e si "apre" al click.
Magari in combinata con un altro pannello potrebbero darti l'effetto "accordion".
😉
Titolo: Re:Utilizzare TPanel per creare un'applicazione MDI
Inserito da: antoniog - Febbraio 18, 2018, 10:58:38 am
Ciao, sono un programmatore di gestionali, non ho molta dimestichezza con altro codice .
quello che ho fatto, dopo ricerca sul web, è uno sfizio che volevo provare come vorrei provare a ridimensionare il pannello a runtime.
Titolo: Re:Utilizzare TPanel per creare un'applicazione MDI
Inserito da: Stilgar - Febbraio 18, 2018, 11:27:21 am
Come preferisci.
😊
Titolo: Re:Utilizzare TPanel per creare un'applicazione MDI
Inserito da: Avogadro - Febbraio 19, 2018, 09:44:01 pm
Ho scaricato l'esempio e ho provato a farlo girare: non succede niente .

Un esempio che funzioni sotto windows 10 ?



Titolo: Re:Utilizzare TPanel per creare un'applicazione MDI
Inserito da: antoniog - Febbraio 22, 2018, 03:50:58 pm
prova a ricompilare il progetto