Jump to content

Multi-Thread


Whalattax

Recommended Posts

Olá pessoal.

Tenho um Form com uma ListView e um outro Form com TMemo (Aparece no TMemo o que está escrito na ListVew). Era para usar o ciclo Form mas o meu Chefe quer a utilização de Thread.

Quando clico no button "Run" aparece me o Form da ListView, escolho um programo e queria que abra 2 processos, 1 para o Form da instalação e outro para o Form do TMemo, ao mesmo tempo.

Se escolho mais que uma instalação, deve me aparecer a instalação e o TMemo do primeiro programo e quando acabar, a instalação e o TMemo do segundo programo substitui o primeiro.

Código

Agradecimento.

Link to comment
Share on other sites

Não sei. Mas o método Show permite abrir os dois Form's ao mesmo tempo mas não para funcionar. Quando selecciono um programo a instalar na lista e que clico no button para instalar, devo-me aparecer o Form com dados do programo seleccionado no bloco de nota e o Form que instala o programo seleccionado.

Para mais facilidade, coloco aqui o código que tenho neste momento (Ciclio For):

procedure TForm1.Button1Click(Sender: TObject);
//label erro;
var
  i:integer;
begin
 form7:=Tform7.Create(self);
 for i := 0 to listview1.Items.Count-1 do
	 if listview1.Items[i].Checked
		then with Form7 do
				 begin
					  Memo1.Lines.Clear;
					  Memo1.Lines.Add(listview1.Items[i].SubItems[1]);
					  ShowModal;
					  Application.ProcessMessages;
				 end;
			  form7.Free;
 //   goto erro;
  THREAD_PRIORITY_BELOW_NORMAL;
  THREAD_PRIORITY_ABOVE_NORMAL;
  Application.CreateForm(TForm4, Form4);
  Form4.install;
// erro:
 //	ShowMessage('Não foi encontrado o caminho pretendido!!');
 //Form1.Hide;
 ////WinExec('comandos.dll', SW_NORMAL);
 //Proc := TProcess.Create(nil);
 //for x in ListView1.Items do
 //	begin
 //		 if x.Checked then
 //			begin
 //			  Proc.CommandLine := x.SubItems.Strings[0] ;
 //			  Proc.Execute;
 //			  //Fid(Proc.ProcessID);
 //			  //Proc.WaitOnExit;
 //			  repeat until ((not Proc.Running) or (button.click));
 //			  if button.click;
 //			  Form3.
 //			  //DeleteFile('temp.dll') ;
 //			end;
 //	end;
 //Form1.Show;
 //WinExec('taskkill /F /IM comandos.dll /T', SW_HIDE);
end;		  

Form1 = Form da lista;

Form4 = Form de instalação;

Form7 = Form Bloco de nota.

Obrigado.

Edited by thoga31
GeSHi
Link to comment
Share on other sites

Porque é que não fazes :

procedure TForm1.Button1Click(Sender: TObject);
var
 i:integer;
begin
 form7:=Tform7.Create(self);
 try
for i := 0 to listview1.Items.Count-1 do begin
  if listview1.Items[i].Checked then with Form7 do begin
	Memo1.Lines.Clear;
	Memo1.Lines.Add(listview1.Items[i].SubItems[1]);
	Show;
	Form4 := TForm4.Create(Self);
	try
	  Form4.Install;  // Presumo que só retorna quando a instalação acabar e que processa mensagens do Windows.
	finally
	  Form4.Free;
	end;
	Hide;
  end;
end;
 finally
Form7.Free;
 end;
end;		  

Podes posicionar as forms antes das linhas Form7.Show e Form4.Install.

P.S. A edição da mensagem alterou a tabulação do código mas não tenho pachorra para corrigir...

Edited by bsccara
Link to comment
Share on other sites

Pois está a funcionar mas não funciona bem quando selecciono mais que um programa.

Quando selecciono dois programas e clico no button para instalar, aparece-me o primeiro programa e primeiro bloco de nota do primeiro programas mas quando passa pela segunda instalação é que está mal. Tipo, está a me instalar os 2 programas seleccionados duas vezes.

Não sei, se vocês vão perceber, se não percebem, eu irei tentar explicar melhor.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.