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
public
end;
var
FPlano: TFPlano;
VarSNameComp:string;
dir, Fichero: string; ini: TIniFile; 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 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); 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 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; 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; 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+' ]';
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 MessageBeep(1000); 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 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 TSpeedButtonTPV(Sender).Reserva:=False;
TSpeedButtonTPV(Sender).Ocupada:=True;
TSpeedButtonTPV(Sender).Font.Color:=clBlack;
end;
7:begin TSpeedButtonTPV(Sender).Reserva:=False;
TSpeedButtonTPV(Sender).Ocupada:=False;
TSpeedButtonTPV(Sender).Font.Color:=clAqua;
end;
end;
end else
begin
if TSpeedButtonTPV(Sender).Unidas then
begin
end else
begin
if TSpeedButtonTPV(Sender).Ocupada then begin
TSpeedButtonTPV(Sender).Font.Color:=clBlack;
if TSpeedButtonTPV(Sender).MYType=MTaburete then TSpeedButtonTPV(Sender).Comensales:=1
else TSpeedButtonTPV(Sender).Comensales:=SoloInteger(Contador.Value);
end else
begin 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