n03l
23-12-2013, 20:33:38
Saludos, necesito una ayudita con un problemita que no e podido resolver.
Tengo Un Form mdi principal y un Form hijo en el cual creo un thread para realizar una serie de procesos incluyendo manejo de bases de datos. de esta forma me funciona bien.
el problema que tengo esque quiero crear el Form hijo varias veces pero el problema esque desde e theread hago referencias apuntando al Form1, por ejemplo Form1.ProgressBar1.Position:=Form1.ProgressBar1.Position+1;
lo cual no me funciona para el segundo Form
espero me ayuden!!! saludos
Aca el Form mdi Principal
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TFrmMain = class(TForm)
Panel1: TPanel;
BtnFrm1: TButton;
BtnFrm2: TButton;
procedure BtnFrm2Click(Sender: TObject);
procedure BtnFrm1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FrmMain: TFrmMain;
implementation
uses Unit1;
{$R *.dfm}
procedure TFrmMain.BtnFrm1Click(Sender: TObject);
begin
Form1:= TForm1.Create(Application);
Form1.Label1.Caption:='Soy el Uno';
Form1.Caption:= 'Soy el Uno';
Form1.show;
end;
procedure TFrmMain.BtnFrm2Click(Sender: TObject);
var
F2: TForm1;
begin
F2:= TForm1.Create(Application);
F2.Label1.Caption:='Soy el Dos';
F2.Caption:= 'Soy el Dos';
F2.show;
end;
end.
Aca el Form1 que quiero crear varias veces
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls, Buttons;
type
TForm1 = class(TForm)
BitBtn2: TBitBtn;
ProgressBar1: TProgressBar;
Label1: TLabel;
procedure BitBtn2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
Uses Hilos;
var
Hilo:THilo;
{$R *.dfm}
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
Hilo:=THilo.Create(True);
Hilo.FreeOnTerminate:=true;
Hilo.Resume;
end;
end.
y aca la unidad del Hilo
unit Hilos;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls, Buttons;
type
THilo = class(TThread)
private
{ Private declarations }
protected
procedure Execute; override;
end;
implementation
uses Unit1;
procedure THilo.Execute;
begin
Form1.ProgressBar1.Position:=0;
Form1.BitBtn2.Enabled:=false;
repeat
Form1.ProgressBar1.Position:=Form1.ProgressBar1.Position+1;
Sleep(500);
until Form1.ProgressBar1.Position=Form1.ProgressBar1.Max;
Form1.BitBtn2.Enabled:=true;
end;
end.
Claro esta no es mi aplicacion real, es solo un esquema para lograr mi objetivo
http://s2.subirimagenes.com/imagen/previo/thump_8748484mdi.png (http://www.subirimagenes.com/imagen-mdi-8748484.html)
Saludos y espero sugerencias.
Tengo Un Form mdi principal y un Form hijo en el cual creo un thread para realizar una serie de procesos incluyendo manejo de bases de datos. de esta forma me funciona bien.
el problema que tengo esque quiero crear el Form hijo varias veces pero el problema esque desde e theread hago referencias apuntando al Form1, por ejemplo Form1.ProgressBar1.Position:=Form1.ProgressBar1.Position+1;
lo cual no me funciona para el segundo Form
espero me ayuden!!! saludos
Aca el Form mdi Principal
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TFrmMain = class(TForm)
Panel1: TPanel;
BtnFrm1: TButton;
BtnFrm2: TButton;
procedure BtnFrm2Click(Sender: TObject);
procedure BtnFrm1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FrmMain: TFrmMain;
implementation
uses Unit1;
{$R *.dfm}
procedure TFrmMain.BtnFrm1Click(Sender: TObject);
begin
Form1:= TForm1.Create(Application);
Form1.Label1.Caption:='Soy el Uno';
Form1.Caption:= 'Soy el Uno';
Form1.show;
end;
procedure TFrmMain.BtnFrm2Click(Sender: TObject);
var
F2: TForm1;
begin
F2:= TForm1.Create(Application);
F2.Label1.Caption:='Soy el Dos';
F2.Caption:= 'Soy el Dos';
F2.show;
end;
end.
Aca el Form1 que quiero crear varias veces
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls, Buttons;
type
TForm1 = class(TForm)
BitBtn2: TBitBtn;
ProgressBar1: TProgressBar;
Label1: TLabel;
procedure BitBtn2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
Uses Hilos;
var
Hilo:THilo;
{$R *.dfm}
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
Hilo:=THilo.Create(True);
Hilo.FreeOnTerminate:=true;
Hilo.Resume;
end;
end.
y aca la unidad del Hilo
unit Hilos;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls, Buttons;
type
THilo = class(TThread)
private
{ Private declarations }
protected
procedure Execute; override;
end;
implementation
uses Unit1;
procedure THilo.Execute;
begin
Form1.ProgressBar1.Position:=0;
Form1.BitBtn2.Enabled:=false;
repeat
Form1.ProgressBar1.Position:=Form1.ProgressBar1.Position+1;
Sleep(500);
until Form1.ProgressBar1.Position=Form1.ProgressBar1.Max;
Form1.BitBtn2.Enabled:=true;
end;
end.
Claro esta no es mi aplicacion real, es solo un esquema para lograr mi objetivo
http://s2.subirimagenes.com/imagen/previo/thump_8748484mdi.png (http://www.subirimagenes.com/imagen-mdi-8748484.html)
Saludos y espero sugerencias.