Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   ¿componente de mapa de mesas para restaurante? (https://www.clubdelphi.com/foros/showthread.php?t=84449)

JXJ 20-10-2013 16:56:25

¿componente de mapa de mesas para restaurante?
 
Hola

¿Saben si hay componentes de mapas de mesas. ?

es decir, que pueda colocar mesas, en una imagen,

solo he encontrado el de este sitio

http://neftali.clubdelphi.com/?p=269...#comment-18237

gracias.

José Luis Garcí 20-10-2013 17:29:50

Hola JXJ, yo estoy usando algo parecido pero lo que situó son un Speedbutton adaptados para TPV, si te interesa te comento algo más

JXJ 20-10-2013 18:45:03

eso suena interesante, yo pensaba en poner timage de fondo y poner otros timage para las mesas,

Si me interesa, comenta un poco mas.


Tambien recuerdo que por ahi vi unos componentes parecidos para poner mesas.. del nombre no recuerdo.
Gracias.

[José Luis Garcí]

José Luis Garcí 21-10-2013 13:17:36

Hola JXJ, en primer lugar te encontraras con componentes que encontraras en el club, están este y este, a continuación te pongo 2 imágenes y el código de cada modulo, el 1º es crear plano, te lo pondré en dos respuesta por el limite de tamaño. Es importante que tengas en cuenta que no están terminados pero puedes hacerte una idea, de como queda +/-



Código Delphi [-]
unit UCrearPlano;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DBCtrls, Grids, DBGrids, StdCtrls, Buttons, SPBBC, ExtCtrls, DB,
  IBCustomDataSet, IBQuery,  ExtDlgs, Clipbrd, SBTPV, UCCDBaseComp,
  UCCDSelectOnRunTime, Mneweditjl, NewSpinEdit, IniFiles;

type
  TFCrearPlano = class(TForm)
    Panel2: TPanel;
    Imagen: TImage;
    Panel3: TPanel;
    Panel1: TPanel;
    ButSalir: TSpeedButtonBC;
    Label1: TLabel;
    ButCargarImagenLibre: TSpeedButtonBC;
    Label2: TLabel;
    ButSeleccionarPlano: TSpeedButtonBC;
    ButCrearElemento: TSpeedButtonBC;
    DBGrid1: TDBGrid;
    DBGrid2: TDBGrid;
    DBNavigator1: TDBNavigator;
    DSSituacion: TDataSource;
    DBNavigator2: TDBNavigator;
    DSUbicacion: TDataSource;
    IBQUbicacion: TIBQuery;
    OpenPictureDialog1: TOpenPictureDialog;
    SpeedButtonTPV1: TSpeedButtonTPV;
    ButBajar: TSpeedButtonBC;
    ButSubir: TSpeedButtonBC;
    ButDerecha: TSpeedButtonBC;
    ButIzquierda: TSpeedButtonBC;
    Saltos: TNewSpinEdit;
    DsTipo: TDataSource;
    DBImage1: TDBImage;
    ButCrearTodosLosElementos: TSpeedButtonBC;
    ButDestruirElemento: TSpeedButtonBC;
    TamanoButon: TNewSpinEdit;
    Label5: TLabel;
    Label6: TLabel;
    ButGrabarConfiSituacion: TSpeedButtonBC;
    CheckBox1: TCheckBox;
    procedure ButSeleccionarPlanoClick(Sender: TObject);
    procedure ButCargarImagenLibreClick(Sender: TObject);
    procedure ButCrearElementoClick(Sender: TObject);
    procedure ButDerechaClick(Sender: TObject);
    procedure ButIzquierdaClick(Sender: TObject);
    procedure ButSubirClick(Sender: TObject);
    procedure ButBajarClick(Sender: TObject);
    procedure ButDestruirElementoClick(Sender: TObject);
    procedure ButCrearTodosLosElementosClick(Sender: TObject);
    procedure SpeedButtonTPV1Click(Sender: TObject);
    procedure MiOnClick(Sender: TObject);
    procedure ButGrabarConfiSituacionClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure ButSalirClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FCrearPlano: TFCrearPlano;
  VarSNameComp:string;
  dir, Fichero: string;              //Directorio po
  ini: TIniFile;          //Archivo Ini

implementation

{$R *.dfm}

uses UDM, Fun;

function CaseOfString(s: string; a: array of string): Integer;
//------------------------------------------------------------------------------
// Para usar String en un case
// Bajada de http://www.swissdelphicenter.ch/torr...de.php?id=2330
//  01/10/2013
{//Ejemplo--------------------------------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
begin
  case CaseOfString(Edit1.Text, ['42', '23', 'nerd alert', 'hello world']) of
    0: Label1.Caption := 'What is six times nine?';
    1: Label1.Caption := 'Nichts ist, wie es scheint...';
    2: Label1.Caption := 'BATMAAAAAAAN!';
    3: Label1.Caption := 'Hello people.';
    else
      Label1.Caption := '?';
  end;
end;}
//------------------------------------------------------------------------------
begin
  Result := 0;
  while (Result < Length(a)) and (a[Result] <> s) do
    Inc(Result);
  if a[Result] <> s then
    Result := -1;
end;


procedure TFCrearPlano.MiOnClick(Sender: TObject);
begin
   VarSNameComp:=(Sender as TSpeedButtonTPV).Name;
   Panel3.Caption:='Elemento seleccionado:= [  '+VarSNameComp+'  ]';
end;

procedure TFCrearPlano.ButCargarImagenLibreClick(Sender: TObject);
begin
  if OpenPictureDialog1.Execute then
  begin
    Fichero:=OpenPictureDialog1.FileName;
    Imagen.Picture.LoadFromFile(OpenPictureDialog1.FileName);
  end;
end;



procedure TFCrearPlano.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:='Crear 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
//         ShowMessage(sl[i]);
        (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','');
           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);
           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
         end;
       end;
    end;
end;

procedure TFCrearPlano.ButCrearElementoClick(Sender: TObject);

begin
   VarSNameComp:='But'+DSUbicacion.DataSet.FieldByName('TIPO').AsString+DSUbicacion.DataSet.FieldByName  ('CODIGO').AsString;
   if not ((FindComponent(VarSNameComp) as TSpeedButtonTPV).Caption=VarSNameComp ) then
   begin
       with TSpeedButtonTPV.Create(SElf)do
       begin
         Name:=VarSNameComp;
         Parent:=Panel2;
         Width:=TamanoButon.Value;
         Height:=TamanoButon.Value;
         Top:=0;
         Left:=0;
         ButonStyle:=SbtImagenColor;
         ImagenTop:=10;
         ImagenLeft:=10;
         ImageLong:=TamanoButon.Value-17;
         LeftQuad:=Width-15;
         LongQuad:=Width div 4;
         if DsTipo.DataSet.Locate('CODIGO',DSUbicacion.DataSet.FieldByName('TIPO').AsString,[loPartialKey,loCaseInsensitive]) then Glyph:=DBImage1.Picture.Bitmap;
         case CaseOfString(DsTipo.DataSet.FieldByName('MTIPOS').AsString,['MBanco','Motros','MMesa','MSofa','MTaburete','MTerraza']) of
           0:MYType:=MBanco;
           1:MYType:=Motros;
           2:MYType:=MMesa;
           3:MYType:=MSofa;
           4:MYType:=MTaburete;
           5:MYType:=MTerraza;
         end;
         ColorUsed:=clLime;
         UsedQuad:=True;
         OnClick:=MiOnClick;  //Asignamos el evento creado, para ello
       end;
       Panel3.Caption:='Elemento seleccionado:= [  '+VarSNameComp+'  ]';
       if CheckBox1.Checked then DSUbicacion.DataSet.Next;

   end else ShowMessage('Ya existe');
end;

procedure TFCrearPlano.ButSalirClick(Sender: TObject);
begin
  Close;
end;

procedure TFCrearPlano.ButBajarClick(Sender: TObject);
begin
   if not ((FindComponent(VarSNameComp) as TSpeedButtonTPV).Caption=VarSNameComp ) then
   begin
      (FindComponent(VarSNameComp) as TSpeedButtonTPV).Top:=(FindComponent(VarSNameComp) as TSpeedButtonTPV).Top+Saltos.Value;
   end;
end;

procedure TFCrearPlano.ButSubirClick(Sender: TObject);
begin
   if not ((FindComponent(VarSNameComp) as TSpeedButtonTPV).Caption=VarSNameComp ) then
   begin
      (FindComponent(VarSNameComp) as TSpeedButtonTPV).Top:=(FindComponent(VarSNameComp) as TSpeedButtonTPV).Top-Saltos.Value;
   end;
end;

procedure TFCrearPlano.ButDerechaClick(Sender: TObject);
begin
   if not ((FindComponent(VarSNameComp) as TSpeedButtonTPV).Caption=VarSNameComp ) then
   begin
      (FindComponent(VarSNameComp) as TSpeedButtonTPV).Left:=(FindComponent(VarSNameComp) as TSpeedButtonTPV).Left+Saltos.Value;
   end;
end;

procedure TFCrearPlano.ButIzquierdaClick(Sender: TObject);
begin
   if not ((FindComponent(VarSNameComp) as TSpeedButtonTPV).Caption=VarSNameComp ) then
   begin
      (FindComponent(VarSNameComp) as TSpeedButtonTPV).Left:=(FindComponent(VarSNameComp) as TSpeedButtonTPV).Left-Saltos.Value;
   end;
end;

procedure TFCrearPlano.SpeedButtonTPV1Click(Sender: TObject);
begin
   VarSNameComp:=TSpeedButtonTPV(Sender).Name;
end;

procedure TFCrearPlano.ButCrearTodosLosElementosClick(Sender: TObject);
begin
    DSUbicacion.DataSet.First;
    while not DSUbicacion.DataSet.Eof do
    begin
       ButCrearElementoClick(Sender);
       DSUbicacion.DataSet.Next;
    end;
end;

procedure TFCrearPlano.ButDestruirElementoClick(Sender: TObject);
begin
   (FindComponent(VarSNameComp) as TSpeedButtonTPV).Free;
end;

procedure TFCrearPlano.ButGrabarConfiSituacionClick(Sender: TObject);
var
   Ruta:string;
   VerMEmo: Boolean;    //Al grabar en el Ini Será 1 para true y 0 para false
   Ancho: Integer;
   Fecha: TDate;
   Hora: TTime;
   ButonStile:Integer;
   i,o,U, mitipo: Integer;
begin


    ///Falta al grabar si no hay imaghen del plano poner none y al leerlo dejarlo en blanco


   o:=0;
   u:=0;
   for i:= 0 to Panel2.ControlCount - 1 do   //Contamos el número de speedbutton
   begin
      if Panel2.Controls[i] is TSpeedButtonTPV then U:=U+1;
   end;
   dir := ExtractFilePath(ParamStr(0));
   ini := TIniFile.Create(dir + DSSituacion.DataSet.FieldByName('SITUACION').AsString +'.ini');    //Cremoas El Ini si no existe
   try
      ini.WriteString('Startup', 'Rutap', dir);                  //Valor = a dir
      ini.WriteDate('Statup','Fecha',Now);                       //Fecha de grabación
      ini.WriteInteger('Statup','Numero de elementos',U);
      if Fichero<>'' then ini.WriteString('Plano','Fichero',Fichero);
      for i:= 0 to Panel2.ControlCount - 1 do
      begin
         if Panel2.Controls[i] is TSpeedButtonTPV then
         begin
            ini.WriteString('Boton'+inttostr(o),'Name',Panel2.Controls[i].Name);
            ini.WriteInteger('Boton'+inttostr(o),'Width',Panel2.Controls[i].Width);
            ini.WriteInteger('Boton'+inttostr(o),'Height',Panel2.Controls[i].Height);
            ini.WriteInteger('Boton'+inttostr(o),'Top',Panel2.Controls[i].Top);
            ini.WriteInteger('Boton'+inttostr(o),'Left',Panel2.Controls[i].Left);
            ini.WriteInteger('Boton'+inttostr(o),'ImagenTop',(FindComponent(Panel2.Controls[i].Name) as TSpeedButtonTPV).ImagenTop );
            ini.WriteInteger('Boton'+inttostr(o),'ImagenLeft',(FindComponent(Panel2.Controls[i].Name) as TSpeedButtonTPV).ImagenLeft);
            ini.WriteInteger('Boton'+inttostr(o),'ImageLong',(FindComponent(Panel2.Controls[i].Name) as TSpeedButtonTPV).ImageLong);
            ini.WriteInteger('Boton'+inttostr(o),'LeftQuad',(FindComponent(Panel2.Controls[i].Name) as TSpeedButtonTPV).LeftQuad);
            ini.WriteInteger('Boton'+inttostr(o),'LongQuad',(FindComponent(Panel2.Controls[i].Name) as TSpeedButtonTPV).LongQuad);
            mitipo:=-1;
            if (FindComponent(Panel2.Controls[i].Name) as TSpeedButtonTPV).MYType=MMesa then mitipo:=0;
            if (FindComponent(Panel2.Controls[i].Name) as TSpeedButtonTPV).MYType=MTaburete then mitipo:=1;
            if (FindComponent(Panel2.Controls[i].Name) as TSpeedButtonTPV).MYType=MTerraza then mitipo:=2;
            if (FindComponent(Panel2.Controls[i].Name) as TSpeedButtonTPV).MYType=MBanco then mitipo:=3;
            if (FindComponent(Panel2.Controls[i].Name) as TSpeedButtonTPV).MYType=MSofa then mitipo:=4;
            if (FindComponent(Panel2.Controls[i].Name) as TSpeedButtonTPV).MYType=Motros then mitipo:=5;
            ini.WriteInteger('Boton'+inttostr(o),'MYType',mitipo);
            o:=o+1;
         end;
      end;
      ShowMessage('Archivo creado');
   finally
      ini.Free;
   end;
end;

procedure TFCrearPlano.FormCreate(Sender: TObject);
begin
  Fichero:='';
end;

end.

José Luis Garcí 21-10-2013 13:20:04

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

José Luis Garcí 21-10-2013 13:23:29

Como puedes ver uso en este caso dos tablas 1 con las diversas situaciones y otra con los elementos de esa situación, así cuando llamamos a una, automáticamente mostramos únicamente los elementos de esta plano.

Todo lo guardo en un ini que cargo al mostrar el plano.

Espero haberme explicado claramente :o.

pacopenin 22-10-2013 18:25:08

José Luis Garcí, no se ven las imágenes.

José Luis Garcí 22-10-2013 20:09:00

Pongo los links para que podáis verlas, aunque a mi si se me ven, si siguen sin verse, podéis mandarme un email y os mando los archivos JPG

Esta es la del creador de planos http://farm8.staticflickr.com/7334/1...9174bce7_b.jpg
y esta la de trabajar ya con el plano http://farm3.staticflickr.com/2893/1...1a91ea9a_b.jpg

José Luis Garcí 14-11-2013 10:20:38

pongo la foto nuevamente


AzidRain 15-11-2013 01:29:28

No veo mucha utilidad en meterse en honduras con un "plano de mesas", cada camarero ya sabe donde están cuales son las que le corresponden y como las va a atender. Si unes dos mesas puedes tomar como base la que le corresponda al camarero que las "une" (por aquello de que agarre una mesa de otro). El número de comensales puede ser variable y no tiene importancia salvo que se vayan a pedir cuentas separadas, lo cual el camarero normalmente pregunta primero. Si es así, entonces cada mesa puede tener n numero de órdenes que están asignadas a n numero de comensales identificados por x dato (nombre de pila por ejemplo) o bien la mesa puede tener una sola cuenta consolidada. Nuevamente, insisto, el como se haga al mesero (camarero) le importa poco. El querrá poder tomar la comanda (orden) lo más rápido posible.

En cierta cadena de restaurantes muy famosa aquí en México trataron de implementar un sistema basado en dispositivos tipo PALM, era tan complicado para las meseras que regresaron a la ya conocida libretita. Ahora solo toman nota, lo alimentan al sistema y de ahí todo fluye. No veo por qué inventar el hilo negro.


La franja horaria es GMT +2. Ahora son las 10:14:44.

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