Ver Mensaje Individual
  #5  
Antiguo 21-10-2013
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Reputación: 25
José Luis Garcí Va camino a la fama
La segunda parte, el plano en si



Código Delphi [-]
unit UPlano;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, DBCtrls, Grids, DBGrids, SBTPV, StdCtrls, Buttons, SPBBC,
  ExtDlgs, DB, IBCustomDataSet, IBQuery, IniFiles, AdvSmoothSpinner,
  MiPanelTouchInteger, LMDPNGImage;

type
  TFPlano = class(TForm)
    Panel1: TPanel;
    butSalir: TSpeedButtonBC;
    Label1: TLabel;
    Label2: TLabel;
    ButSeleccionarPlano: TSpeedButtonBC;
    SpeedButtonTPV1: TSpeedButtonTPV;
    DBGrid1: TDBGrid;
    DBNavigator2: TDBNavigator;
    DBImage1: TDBImage;
    Panel2: TPanel;
    Imagen: TImage;
    DSUbicacion: TDataSource;
    IBQUbicacion: TIBQuery;
    DsTipo: TDataSource;
    DSSituacion: TDataSource;
    OpenPictureDialog1: TOpenPictureDialog;
    Shape1: TShape;
    Shape2: TShape;
    clpurple: TShape;
    Shape4: TShape;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    PAnel3: TPanel;
    ButReservar: TSpeedButtonBC;
    ButUnir: TSpeedButtonBC;
    lb1580: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    LabUbicacion: TLabel;
    LabCamarero: TLabel;
    LabOcupantes: TLabel;
    LabTicket: TLabel;
    LabID: TLabel;
    GroupBox2: TGroupBox;
    ButOcupantes1: TSpeedButtonBC;
    ButOcupantes2: TSpeedButtonBC;
    ButOcupantes3: TSpeedButtonBC;
    ButOcupantes4: TSpeedButtonBC;
    MemInformacion: TMemo;
    Contador: TPanelTouchInteger;
    procedure ButSeleccionarPlanoClick(Sender: TObject);
    procedure MiOnClick(Sender: TObject);
    procedure ButReservarClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure ButUnirClick(Sender: TObject);
    procedure butSalirClick(Sender: TObject);
    procedure ButOcupantes1Click(Sender: TObject);
    procedure ButOcupantes2Click(Sender: TObject);
    procedure ButOcupantes3Click(Sender: TObject);
    procedure ButOcupantes4Click(Sender: TObject);
    Procedure Mouseenter(sender:TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FPlano: TFPlano;
  VarSNameComp:string;
  dir, Fichero: string;              //Directorio po
  ini: TIniFile;          //Archivo Ini
  VarBUnir:Boolean;
  VarIID:Integer;

implementation

{$R *.dfm}

uses UDM,Fun;

procedure TFPlano.ButOcupantes1Click(Sender: TObject);
begin
  Contador.NumberIn:=1;
end;

procedure TFPlano.ButOcupantes2Click(Sender: TObject);
begin
   Contador.NumberIn:=2;
end;

procedure TFPlano.ButOcupantes3Click(Sender: TObject);
begin
  Contador.NumberIn:=3;
end;

procedure TFPlano.ButOcupantes4Click(Sender: TObject);
begin
  Contador.NumberIn:=4;
end;

procedure TFPlano.ButReservarClick(Sender: TObject);
begin
   (FindComponent(VarSNameComp) as TSpeedButtonTPV).Ocupada:=False;
   (FindComponent(VarSNameComp) as TSpeedButtonTPV).Reserva:=True;
   (FindComponent(VarSNameComp) as TSpeedButtonTPV).Font.Color:=clYellow;
end;

procedure TFPlano.butSalirClick(Sender: TObject);
begin
        Close;
end;

procedure TFPlano.ButSeleccionarPlanoClick(Sender: TObject);
var i,VarIContadorLista:Integer;
    varStipo:string;
    Lista:TList;
    sl: TStringList;
begin
    ActQuery(IBQUbicacion,'Select * From UBICADOS where SITUACION='+QuotedStr(DSSituacion.DataSet.FieldByName('SITUACION').AsString));
    Caption:='Plano [ '+ DSSituacion.DataSet.FieldByName('SITUACION').AsString+' ]';
    sl := TStringList.Create;
    try
      for i:= 0 to (Panel2.ControlCount - 1) do   //Contamos el número de speedbutton
      begin
         if Panel2.Controls[i] is TImage  then TImage(Panel2.Controls[i]).Picture:=nil;
         if (Panel2.Controls[i] is TSpeedButtonTPV) then Sl.Add((Panel2.Controls[i]).Name); //TSpeedButtonTPV(Panel2.Controls[i]).Free;
      end;
      for I := 0 to sl.Count - 1 do
      begin
        (FindComponent(sl[i]) as TSpeedButtonTPV).Free;
      end;
     finally
      sl.Free;
    end;
    dir := ExtractFilePath(ParamStr(0));
    if FileExists(dir + DSSituacion.DataSet.FieldByName('SITUACION').AsString +'.ini') then
    begin
       ini := TIniFile.Create(dir + DSSituacion.DataSet.FieldByName('SITUACION').AsString +'.ini');
       Imagen.Picture.LoadFromFile(ini.ReadString('Plano','Fichero',''));
       for I := 0 to ini.ReadInteger('Statup','Numero de elementos',0)-1 do     //Quitar el 0 en   Statup0
       begin
         with TSpeedButtonTPV.Create(SElf)do
         begin
           Name:=ini.ReadString('Boton'+inttostr(I),'Name','');
           Font.Size:=7;
           Font.Color:=clAqua;
           Font.Style:=[fsBold];
           Caption:=Name;//Copy(Name,4,Length(name));
           Parent:=Panel2;
           Width:=ini.ReadInteger('Boton'+inttostr(I),'Width',0);
           Height:=ini.ReadInteger('Boton'+inttostr(I),'Height',0);
           Top:=ini.ReadInteger('Boton'+inttostr(I),'Top',0);
           Left:=ini.ReadInteger('Boton'+inttostr(I),'Left',0);
           ButonStyle:=SbtImagenColor;
           ImagenTop:=ini.ReadInteger('Boton'+inttostr(I),'ImagenTop',0);
           ImagenLeft:=ini.ReadInteger('Boton'+inttostr(I),'ImagenLeft',0);
           ImageLong:=ini.ReadInteger('Boton'+inttostr(I),'ImageLong',0);
           LeftQuad:=ini.ReadInteger('Boton'+inttostr(I),'LeftQuad',0);
           LongQuad:=ini.ReadInteger('Boton'+inttostr(I),'LongQuad',0);
           TopQuad:=(Width-(LongQuad+5));
           case ini.ReadInteger('Boton'+inttostr(I),'MYType',0) of
             0:begin
            MYType:=MMesa;
                  varStipo:='MMesa';
               end;
             1:begin
                  MYType:=MTaburete;
                  varStipo:='MTaburete';
               end;
             2:begin
                 MYType:=MTerraza;
                 varStipo:='MTerraza';
               end;
             3:begin
                 MYType:=MBanco;
                 varStipo:='MBanco';
               end;
             4:begin
                 MYType:=MSofa;
                 varStipo:='MSofa';
               end;
             5:begin
                 MYType:=Motros;
                 varStipo:='Motros';
               end;
           end;
           ColorUsed:=clLime;
           UsedQuad:=True;
            if DsTipo.DataSet.Locate('MTIPOS',varStipo,[loPartialKey,loCaseInsensitive]) then Glyph:=DBImage1.Picture.Bitmap;
           OnClick:=MiOnClick;  //Asignamos el evento creado, para ello
           OnMouseEnter:=Mouseenter;
         end;
       end;
    end;
end;

procedure TFPlano.FormCreate(Sender: TObject);
begin
   VarBUnir:=False;
   ButOcupantes1Click(Sender);
end;

procedure TFPlano.MiOnClick(Sender: TObject);
var VarBSeguir:Boolean;
begin
   VarSNameComp:=(Sender as TSpeedButtonTPV).Name;
   LabUbicacion.Caption:='[  '+VarSNameComp+'  ]';
    //Cargar datos
     LabOcupantes.Caption:=IntToStr(TSpeedButtonTPV(Sender).Comensales);
     LabTicket.Caption:=TSpeedButtonTPV(Sender).NumeroTicket;
     LabID.Caption:=IntToStr(TSpeedButtonTPV(Sender).Id);
   if (TSpeedButtonTPV(Sender).Ocupada=false) and (TSpeedButtonTPV(Sender).NumeroTicket<>'') then
   begin  //Si esta ocupada y tiene ticket no seguimos
      MessageBeep(1000);  //En configuracion si tenemos sonidos de avisos activados
      ShowMessage('Este elemento tiene un ticket asociado, debe cobrara el ticket para liberarla');
      TSpeedButtonTPV(Sender).Ocupada:=True;
      TSpeedButtonTPV(Sender).Font.Color:=clBlack;
      VarBSeguir:=False;
   end else VarBSeguir:=True;
   if VarBSeguir then
   begin
     if VarBUnir then
     begin
         TSpeedButtonTPV(Sender).Ocupada:=False;
         TSpeedButtonTPV(Sender).Font.color:=clAqua;
         if TSpeedButtonTPV(Sender).Unidas then
         begin
            TSpeedButtonTPV(Sender).Unidas:=False;
            TSpeedButtonTPV(Sender).Id:=0;
         end
         else
         begin
             TSpeedButtonTPV(Sender).Unidas:=True;
             TSpeedButtonTPV(Sender).Id:=VarIID;
             TSpeedButtonTPV(Sender).Font.color:=$007FFF7F;
         end;
     end else
     begin
       if TSpeedButtonTPV(Sender).Reserva then
       begin  //Si esta reservada
          Case Application.MessageBox( pchar(  'Desea ocupara el elemento o  eliminar la reserva' +#13#10
                                       +#13#10+'       [ Si ]         Ocupa la reserva'
                                       +#13#10+'      [ No ]        Elimina la reserva'
                                       +#13#10+'[ Cancelar ]  Lo deja tal cual'),
                                       pchar('Esta elemento esta reservado'), 3+32+0) of
          6:begin  //Si
                    TSpeedButtonTPV(Sender).Reserva:=False;
                    TSpeedButtonTPV(Sender).Ocupada:=True;
                    TSpeedButtonTPV(Sender).Font.Color:=clBlack;

            end;
          7:begin  //No
                    TSpeedButtonTPV(Sender).Reserva:=False;
                    TSpeedButtonTPV(Sender).Ocupada:=False;
                    TSpeedButtonTPV(Sender).Font.Color:=clAqua;
            end;
          end;
       end else
       begin
         if TSpeedButtonTPV(Sender).Unidas then
         begin      //Si estan unidas

         end else
         begin
            if TSpeedButtonTPV(Sender).Ocupada then     //Si la ocupamos
            begin
               TSpeedButtonTPV(Sender).Font.Color:=clBlack;
               if TSpeedButtonTPV(Sender).MYType=MTaburete then   TSpeedButtonTPV(Sender).Comensales:=1
               else TSpeedButtonTPV(Sender).Comensales:=SoloInteger(Contador.Value);
               //Si el ID es diferente de 0 buscamos los elementos con el mismo id y cargamos los datos





            end else
            begin    //Si la liberamos
          TSpeedButtonTPV(Sender).Font.color:=clAqua;
                TSpeedButtonTPV(Sender).Comensales:=0;
                TSpeedButtonTPV(Sender).Id:=0;
            end;
         end;

       end;
     end;
   end;
end;



procedure TFPlano.Mouseenter(sender: TObject);
function EstadoBoolean(MyBoolean:Boolean):string;
begin
    if MyBoolean then Result:='Si' else Result:='No';
end;
begin
    TSpeedButtonTPV(Sender).Hint:= ' Elemento.: '+TSpeedButtonTPV(Sender).Name  +#13#10+
           ' Ocupante.: '+IntToStr(TSpeedButtonTPV(Sender).Comensales ) +#13#10+
                                   ' Nº Ticket: '+TSpeedButtonTPV(Sender).NumeroTicket  +#13#10+
                                   ' Ocupada..: [ '+EstadoBoolean(TSpeedButtonTPV(Sender).Ocupada)+' ]'+#13#10+
                                   ' Reservada: [ '+EstadoBoolean(TSpeedButtonTPV(Sender).Reserva)+' ]'+#13#10+
                                   ' Unida....: [ '+EstadoBoolean(TSpeedButtonTPV(Sender).Unidas)+' ] Identificado: '+IntToStr(TSpeedButtonTPV(Sender).Id );
    MemInformacion.Lines.Clear;
    MemInformacion.Lines.Text:=TSpeedButtonTPV(Sender).Hint;
end;

procedure TFPlano.ButUnirClick(Sender: TObject);
var VarSID:string;
begin
   VarSID:=Copy(DateToStr(Now),0,5)+TimeToStr(Now);
   VarIID:=SoloInteger(VarSID);
  if ButUnir.Down then  VarBUnir:=True else VarBUnir:=False;
end;

end.

Espero sirva de ayuda, si tienes alguna duda, pega un toque en el foro
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
Responder Con Cita