mmm the code is long i'll try to post it here
main form
unit principalmenu;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
Menus, Buttons, StdCtrls, ExtCtrls, process,
nombresdeaplicaciones, tipos, mensajeria;
type
{ Tformprincipalmenu }
Tformprincipalmenu = class(TForm)
BitBtn1: TBitBtn;
...
procedure MenuItem9Click(Sender: TObject);
private
procedure deshabilitartodo;
procedure validaraccesos;
{ private declarations }
public
idusuario : integer;
permiso1, permiso2 : integer;
contras : string;
{ public declarations }
end;
var
formprincipalmenu: Tformprincipalmenu;
implementation
{ Tformprincipalmenu }
Procedure tformprincipalmenu.deshabilitartodo;
var
a : integer;
Begin
bitbtn1.enabled:=false;
bitbtn2.enabled:=false;
bitbtn3.enabled:=false;
bitbtn4.enabled:=false;
bitbtn5.enabled:=false;
bitbtn6.enabled:=false;
bitbtn7.enabled:=false;
bitbtn8.enabled:=false;
bitbtn9.enabled:=false;
bitbtn11.enabled:=false;
for a:=0 to mainmenu1.Items.Count-1 do
mainmenu1.Items[a].Enabled:=false;
end;
Procedure tformprincipalmenu.validaraccesos;
Begin
deshabilitartodo;
if (permiso1 and ingventas) = ingventas then Begin
bitbtn4.enabled:=true;
mainmenu1.Items[3].Enabled:=true;
end;
if (permiso1 and ingclientes) = ingclientes then Begin
bitbtn2.enabled:=true;
mainmenu1.Items[1].Enabled:=true;
end;
if (permiso1 and ingarticulos) = ingarticulos then Begin
bitbtn1.enabled:=true;
mainmenu1.Items[0].Enabled:=true;
end;
if (permiso1 and ingproveedores) = ingproveedores then Begin
bitbtn3.enabled:=true;
mainmenu1.Items[2].Enabled:=true;
end;
if (permiso1 and ingcompras) = ingcompras then Begin
bitbtn5.enabled:=true;
mainmenu1.Items[4].Enabled:=true;
end;
if (permiso1 and inggastos) = inggastos then Begin
bitbtn6.enabled:=true;
mainmenu1.Items[5].Enabled:=true;
end;
if (permiso1 and inglibros) = inglibros then Begin
bitbtn7.enabled:=true;
mainmenu1.Items[6].Enabled:=true;
end;
if (permiso1 and ingmantenimiento) = ingmantenimiento then Begin
bitbtn9.enabled:=true;
mainmenu1.Items[8].Enabled:=true;
end;
if (permiso1 and ingcheques) = ingcheques then Begin
bitbtn8.enabled:=true;
mainmenu1.Items[7].Enabled:=true;
end;
if (permiso1 and ingviajantes) = ingviajantes then Begin
bitbtn11.enabled:=true;
// mainmenu1.Items[3].Enabled:=true;
end;
end;
Function tformprincipalmenu.devolverruta: string;
var
cad : string;
begin
//
cad:=application.location;
if pos(cad,'\') > 0 then
cad:=cad+'\';
devolverruta:=cad;
end;
Procedure tformprincipalmenu.ejecutaraplicacion(proge : string ; res : boolean);
var
prog : TProcess;
begin
{$IFDEF Windows}
proge:=proge+'.exe';
{$ENDIF}
proge:=devolverruta+proge+' -u '+inttostr(idusuario)+' -c '+contras;
// showmessage(proge);
prog:=tprocess.Create(nil);
prog.commandline:=proge;
formprincipalmenu.WindowState:=wsMinimized;
application.Minimize;
application.ProcessMessages;
prog.options:=prog.options+[powaitonexit];
prog.Execute;
formprincipalmenu.WindowState:=wsNormal;
formprincipalmenu.BringToFront;
application.BringToFront;
application.Restore;
application.ProcessMessages;
//devolver el error en res
end;
procedure Tformprincipalmenu.MenuItem3Click(Sender: TObject);
begin
bitbtn3click(sender);
end;
procedure Tformprincipalmenu.MenuItem4Click(Sender: TObject);
begin
bitbtn4click(sender);
end;
procedure Tformprincipalmenu.MenuItem9Click(Sender: TObject);
begin
menumantenimiento.PopUp();
end;
procedure Tformprincipalmenu.MenuItem1Click(Sender: TObject);
begin
bitbtn1click(sender);
end;
procedure Tformprincipalmenu.MenuItem20Click(Sender: TObject);
var
err : boolean;
begin
ejecutaraplicacion(usuariosgestion, err);
end;
procedure Tformprincipalmenu.MenuItem21Click(Sender: TObject);
var
err : boolean;
begin
ejecutaraplicacion(configuraciones, err);
end;
procedure Tformprincipalmenu.MenuItem22Click(Sender: TObject);
var
err : boolean;
begin
ejecutaraplicacion(usuariosauditoria, err);
end;
procedure Tformprincipalmenu.MenuItem23Click(Sender: TObject);
var
err : boolean;
begin
ejecutaraplicacion(stockmanual, err);
end;
procedure Tformprincipalmenu.MenuItem24Click(Sender: TObject);
var
err : boolean;
begin
ejecutaraplicacion(stockmovimientos, err);
end;
procedure Tformprincipalmenu.MenuItem25Click(Sender: TObject);
var
err : boolean;
begin
ejecutaraplicacion(clientespagos, err);
end;
procedure Tformprincipalmenu.MenuItem26Click(Sender: TObject);
var
err : boolean;
begin
ejecutaraplicacion(listasdeprecios,err);
end;
procedure Tformprincipalmenu.MenuItem2Click(Sender: TObject);
begin
bitbtn2click(sender);
end;
procedure Tformprincipalmenu.BitBtn2Click(Sender: TObject);
begin
menuclientes.PopUp();
end;
procedure Tformprincipalmenu.BitBtn3Click(Sender: TObject);
begin
menuproveedores.PopUp();
end;
procedure Tformprincipalmenu.BitBtn4Click(Sender: TObject);
var
err : boolean;
begin
ejecutaraplicacion(ventas, err);
end;
procedure Tformprincipalmenu.BitBtn5Click(Sender: TObject);
var
err : boolean;
begin
ejecutaraplicacion(compras, err);
end;
procedure Tformprincipalmenu.BitBtn6Click(Sender: TObject);
var
err : boolean;
begin
ejecutaraplicacion(gastos, err);
end;
procedure Tformprincipalmenu.BitBtn8Click(Sender: TObject);
begin
menucheques.PopUp();
end;
procedure Tformprincipalmenu.BitBtn9Click(Sender: TObject);
begin
menumantenimiento.PopUp();
end;
procedure Tformprincipalmenu.FormShow(Sender: TObject);
begin
validaraccesos;
fmensajeria.usuario:=idusuario;
end;
procedure Tformprincipalmenu.menuarticulosClick(Sender: TObject);
begin
end;
procedure Tformprincipalmenu.MenuItem10Click(Sender: TObject);
var
err : boolean;
begin
ejecutaraplicacion(clientesgestion, err);
end;
procedure Tformprincipalmenu.MenuItem13Click(Sender: TObject);
var
err : boolean;
begin
ejecutaraplicacion(articulosgestion,err);
end;
procedure Tformprincipalmenu.MenuItem14Click(Sender: TObject);
var
err : boolean;
begin
ejecutaraplicacion(proveedoresgestion,err);
end;
procedure Tformprincipalmenu.MenuItem16Click(Sender: TObject);
var
err : boolean;
begin
ejecutaraplicacion(chequesabm,err);
end;
procedure Tformprincipalmenu.MenuItem18Click(Sender: TObject);
var
err : boolean;
begin
ejecutaraplicacion(bancosgestion,err);
end;
procedure Tformprincipalmenu.MenuItem19Click(Sender: TObject);
var
err : boolean;
begin
ejecutaraplicacion(localidadesgestion,err);
end;
procedure Tformprincipalmenu.BitBtn10Click(Sender: TObject);
begin
modalresult:=mrok;
end;
procedure Tformprincipalmenu.BitBtn11Click(Sender: TObject);
var
err : boolean;
begin
ejecutaraplicacion(viajantesgestion,err);
end;
procedure Tformprincipalmenu.BitBtn12Click(Sender: TObject);
begin
fmensajeria.Show;
fmensajeria.BringToFront;
fmensajeria.Refresh;
refresh;
end;
procedure Tformprincipalmenu.BitBtn1Click(Sender: TObject);
begin
menuarticulos.PopUp();
end;
initialization
{$I principalmenu.lrs}
end.
The caller of the second form is on bitbtn12click
unit mensajeria
unit mensajeria;
{$mode objfpc}
interface
uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
StdCtrls, ComCtrls, ExtCtrls, Buttons, EditBtn, rutinas, utilidades, tipos, conexionbase, clipbrd;
type
{ Tfmensajeria }
Tfmensajeria = class(TForm)
BitBtn1: TBitBtn;
...
procedure ListView1CustomDrawItem(Sender: TCustomListView; Item: TListItem;
State: TCustomDrawState; var DefaultDraw: Boolean);
private
procedure cargarmensajes;
procedure cargarusuarios;
procedure limpiar;
{ private declarations }
public
usuario : integer;
{ public declarations }
end;
var
fmensajeria: Tfmensajeria;
implementation
{ Tfmensajeria }
procedure Tfmensajeria.BitBtn4Click(Sender: TObject);
begin
fmensajeria.Hide;
end;
procedure Tfmensajeria.BitBtn3Click(Sender: TObject);
var
cad : string;
nro : integer;
begin
if combobox1.ItemIndex>=0 then begin
if dateedit1.Date>now then begin
if memo2.Text<>'' then begin
try
if combobox1.ItemIndex=0 then begin
for nro:=1 to combobox1.Items.Count-1 do begin
cad:='INSERT INTO mensajes (de, para, urgente, persistente, fenviado, fvalido, mensaje, leido, enref) ';
cad:=cad+'VALUES ('+inttostr(usuario)+', '+sacarespacios(devolverultimoparametro(combobox1.items[nro]))+', ';
if checkbox1.Checked then
cad:=cad+'1, '
else
cad:=cad+'0, ';
if checkbox4.Checked then
cad:=cad+'1, "'
else
cad:=cad+'0, "';
cad:=cad+devolverfecha(now)+'", "'+devolverfecha(dateedit1.Date)+'", "'+escaparstring(memo2.Text)+'", ';
cad:=cad+'0, ';
if label11.Caption='' then
cad:=cad+'0)'
else
cad:=cad+label11.caption+')';
// showmessage(cad);
conexbase.bquery.SQL.Text:=cad;
conexbase.bquery.ExecSQL;
end;
showmessage('Mensajes enviados con exito');
cargarmensajes;
limpiar;
end
else begin
cad:='INSERT INTO mensajes (de, para, urgente, persistente, fenviado, fvalido, mensaje, leido, enref) ';
cad:=cad+'VALUES ('+inttostr(usuario)+', '+sacarespacios(devolverultimoparametro(combobox1.text))+', ';
if checkbox1.Checked then
cad:=cad+'1, '
else
cad:=cad+'0, ';
if checkbox4.Checked then
cad:=cad+'1, "'
else
cad:=cad+'0, "';
cad:=cad+devolverfecha(now)+'", "'+devolverfecha(dateedit1.Date)+'", "'+escaparstring(memo2.Text)+'", ';
cad:=cad+'0, ';
if label11.Caption='' then
cad:=cad+'0)'
else
cad:=cad+label11.caption+')';
// showmessage(cad);
conexbase.bquery.SQL.Text:=cad;
conexbase.bquery.ExecSQL;
showmessage('Mensaje enviado con exito');
if label11.Caption<>'' then begin;
cad:='UPDATE mensajes SET leido = 1 where idmensaje = '+label11.Caption;
conexbase.bquery.SQL.Text:=cad;
conexbase.bquery.ExecSQL;
end;
cargarmensajes;
limpiar;
end;
except
showmessage('No pudo enviarse el mensaje. Revise los datos e intentelo nuevamente');
end;
end
else
showmessage('EL MENSAJE NO PUEDE ESTAR VACIO0');
end
else
showmessage('EL MENSAJE NO PUEDE CADUCAR ANTES DE HOY');
end
else
showmessage('DEBE SELECCIONAR UN USUARIO DESTINATARIO');
end;
procedure Tfmensajeria.BitBtn2Click(Sender: TObject);
var
nro : integer;
cad1, cad2 : string;
begin
if listview1.ItemIndex=-1 then
exit;
label11.Caption:=label12.Caption;
cad1:=sacarespacios(devolverultimoparametro(label2.Caption));
pagecontrol1.PageIndex:=1;
for nro:=0 to combobox1.Items.Count -1 do begin
cad2:=sacarespacios(devolverultimoparametro(combobox1.Items[nro]));
if cad1=cad2 then begin
combobox1.ItemIndex:=nro;
break;
end;
end;
memo2.clear;
cad2:='>>>'+memo1.Text;
memo2.Lines.Add('>');
memo2.Lines.add('');
memo2.Lines.add(cad2);
dateedit1.SetFocus;
end;
procedure Tfmensajeria.BitBtn1Click(Sender: TObject);
var
cad : string;
begin
if listview1.ItemIndex=-1 then
exit;
cad:='UPDATE mensajes SET leido = 1 where idmensaje = '+label12.Caption;
try
conexbase.bquery.SQL.Text:=cad;
conexbase.bquery.ExecSQL;
cargarmensajes;
limpiar;
except
showmessage('EL MENSAJE NO PUDO SER MARCADO COMO LEIDO. INTENTELO MAS TARDE');
end;
end;
procedure Tfmensajeria.FormCreate(Sender: TObject);
begin
checkbox2.Checked:=true;
checkbox3.Checked:=true;
end;
Procedure tfmensajeria.cargarmensajes;
var
nitem : tlistitem;
cad : widestring;
hoy, fmens : tdatetime;
Begin
cad:='SELECT me.leido, me.de, me.fenviado, me.fvalido, me.mensaje, me.idmensaje, us.apenom, me.urgente, me.persistente ';
cad:=cad+'FROM mensajes me, usuarios us ';
cad:=cad+'WHERE (para = '+inttostr(usuario);
if checkbox2.Checked then
cad:=cad+' AND leido = 0';
hoy:=now;
if checkbox3.Checked then
cad:=cad+' AND fvalido >= "'+devolverfecha(hoy)+'" AND de = idusuario AND persistente = 0';
cad:=cad+') OR (persistente = 1 AND para = '+inttostr(usuario)+' AND de=idusuario) ';
cad:=cad+'ORDER BY fenviado DESC';
{
Clipboard.AsText := cad;
showmessage(cad);
}
listview1.Clear;
conexbase.bquery.SQL.Text:=cad;
conexbase.bquery.Open;
while not conexbase.bquery.EOF do begin
nitem:=listview1.Items.Add;
if conexbase.bquery.FieldByName('leido').AsInteger=1 then
nitem.Caption:='Leido'
else
nitem.Caption:='Nuevo';
cad:=conexbase.bquery.FieldByName('apenom').AsString+' |' +conexbase.bquery.FieldByName('de').AsString;
nitem.SubItems.Add(cad);
nitem.SubItems.Add(conexbase.bquery.FieldByName('fenviado').AsString);
nitem.SubItems.Add(conexbase.bquery.FieldByName('fvalido').AsString);
nitem.SubItems.Add(conexbase.bquery.FieldByName('mensaje').AsString);
nitem.SubItems.Add(conexbase.bquery.FieldByName('idmensaje').AsString);
if conexbase.bquery.FieldByName('urgente').AsInteger=1 then
nitem.subitems.add('Urgente')
else
nitem.subitems.Add('Normal');
if conexbase.bquery.FieldByName('persistente').AsInteger=1 then
nitem.subitems.add('Persistente')
else
nitem.subitems.add('Normal');
conexbase.bquery.Next;
end;
conexbase.bquery.Close;
end;
Procedure tfmensajeria.limpiar;
Begin
label2.Caption:='';
label4.Caption:='';
label6.Caption:='';
memo1.Clear;
label12.Caption:='';
combobox1.ItemIndex:=-1;
label11.Caption:='';
dateedit1.Date:=now+7;
memo2.Clear;
checkbox1.Checked:=false;
checkbox4.Checked:=false;
pagecontrol1.PageIndex:=0;
end;
Procedure tfmensajeria.cargarusuarios;
var
cad : string;
Begin
cad:='SELECT * FROM usuarios ORDER BY apenom';
conexbase.bquery.SQL.Text:=cad;
conexbase.bquery.Open;
combobox1.Items.Clear;
combobox1.Items.Add('TODOS | 0');
while not conexbase.bquery.EOF do begin
cad:=conexbase.bquery.FieldByName('apenom').AsString;
cad:=cad+'('+conexbase.bquery.FieldByName('usuario').AsString+')';
cad:=cad+' | '+conexbase.bquery.FieldByName('idusuario').AsString;
combobox1.Items.Add(cad);
conexbase.bquery.Next;
end;
conexbase.bquery.Close;
end;
procedure Tfmensajeria.FormShow(Sender: TObject);
begin
cargarmensajes;
cargarusuarios;
limpiar;
end;
procedure Tfmensajeria.ListView1Click(Sender: TObject);
begin
pagecontrol1.PageIndex:=0;
label2.Caption:=listview1.Items[listview1.ItemIndex].SubItems[0];
label4.Caption:=listview1.Items[listview1.ItemIndex].SubItems[1];
label6.Caption:=listview1.Items[listview1.ItemIndex].SubItems[2];
memo1.Text:=listview1.Items[listview1.ItemIndex].SubItems[3];
label12.Caption:=listview1.Items[listview1.ItemIndex].SubItems[4];
end;
procedure Tfmensajeria.ListView1CustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
if Item.caption = 'Nuevo' then
Sender.Canvas.Brush.Color := clYellow;
if item.SubItems[6] = 'Persistente' then
sender.Canvas.Brush.Color:= clLime;
if item.SubItems[5] = 'Urgente' then
sender.Canvas.Brush.Color:= clRed;
DefaultDraw := true;
end;
initialization
{$I mensajeria.lrs}
end.
As i sayed before, this code works fine on windows but not on linux... at least on last open suse with latest svn lazarus-0.9.30.1-30225-20110407-src.tar.bz2
thx