Recent

Author Topic: New form not responding in linux  (Read 6357 times)

calebs

  • Full Member
  • ***
  • Posts: 212
New form not responding in linux
« on: April 07, 2011, 04:04:36 pm »
Hello all.

I have a program that has a main form and other hidden that appears when i click a button with

form2.show;
form2.bringtofront;
refresh;

In windows has the normal behaviour, shows the form, interact, closes it (with hide).
But same program in linux show the form but is unresponsive.
I can't make click on any component on the new form, only resize it and if i close the window doesn't hide.
If i close the main form, closes all, no error given.

Any clues? Thanks.

PS: with form2.showmodal works as expected, but i'll prefer that was not modal.

zeljko

  • Hero Member
  • *****
  • Posts: 1812
    • http://wiki.lazarus.freepascal.org/User:Zeljan
Re: New form not responding in linux
« Reply #1 on: April 07, 2011, 04:16:09 pm »
Open an issue about it and attach example, also write your lazarus version.

calebs

  • Full Member
  • ***
  • Posts: 212
Re: New form not responding in linux
« Reply #2 on: April 07, 2011, 04:18:38 pm »
How do i do that? I've never do it before...
I'll download latest svn in the meantime to see if it is solved...

zeljko

  • Hero Member
  • *****
  • Posts: 1812
    • http://wiki.lazarus.freepascal.org/User:Zeljan
Re: New form not responding in linux
« Reply #3 on: April 07, 2011, 04:24:57 pm »
Here you can learn howto report an issue:
http://wiki.lazarus.freepascal.org/How_do_I_create_a_bug_report

At least attach problematic example here if you don't know how to report issue.

calebs

  • Full Member
  • ***
  • Posts: 212
Re: New form not responding in linux
« Reply #4 on: April 07, 2011, 04:43:37 pm »
mmm the code is long i'll try to post it here

main form

Code: [Select]
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

Code: [Select]
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

zeljko

  • Hero Member
  • *****
  • Posts: 1812
    • http://wiki.lazarus.freepascal.org/User:Zeljan
Re: New form not responding in linux
« Reply #5 on: April 07, 2011, 05:22:36 pm »
Sorry, but I have not enough spare time to recreate your project with copy-paste  from web page.
Attach complete zipped/tarred project or open issue and attach it there.

calebs

  • Full Member
  • ***
  • Posts: 212
Re: New form not responding in linux
« Reply #6 on: April 07, 2011, 05:33:08 pm »
No problem, but it would be very complicated because it uses an mysql database for work and program doesn't work without it
I'll try to do it later thanks, post it here or open an issue.

zeljko

  • Hero Member
  • *****
  • Posts: 1812
    • http://wiki.lazarus.freepascal.org/User:Zeljan
Re: New form not responding in linux
« Reply #7 on: April 07, 2011, 06:13:34 pm »
Then create an simple project which shows problem. I don't want to install mysql because of that.

 

TinyPortal © 2005-2018