Ir ao conteúdo
  • Cadastre-se
Entre para seguir isso  
maclogic

Criando forms dentro de threads

Recommended Posts

Ola mais uma vez galera..

  Dessa X o problema é o seguinte..

Tenho um Thread no Delphi 6 que esta executando um query e logo apos ele terminar o query eu preciso apresentar um form com o resultado da query, o form já existe e esta pronto pra receber um componente TQuery como paramento.. mas eu não consigo fazer com q a thread que esta executando o query, criar o form e apresenta-lo.. o syncronize não deixa eu passar algum parametro para a procedure que eu criei para criar o form.. logo estou com a query presa dentro do execute da thread..

alguem tem ideia?? é realmene importante!!

Ahh tipo não entendo muito de threads.. então se tiver alguma burrada no codigo não liguem muito.. :)

Muito obrigado!!

[]s

Mac Logic

PS antes que pecam.. aqui esta o codigo q eu estou tentando gerar..

(a UNIT2 é a q contem o form para mostrar o resultado.. o resto esta tudo dentro do form1)

unit Unit1;

interface

uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

 Dialogs, StdCtrls, dxExEdtr, dxEdLib, ExtCtrls, dxCntner, dxEditor, dxTL,

 dxDBCtrl, dxDBGrid, DB, adstable, adsdata, adsfunc, adscnnct, Menus;

type

 TForm1 = class(TForm)

   AdsConnection1: TAdsConnection;

   TbTable: TAdsTable;

   qrySQLStatement: TAdsQuery;

   Label1: TLabel;

   edtPath: TEdit;

   cmbTables: TdxPickEdit;

   Label2: TLabel;

   Panel1: TPanel;

   Panel2: TPanel;

   memSQLStatement: TdxMemo;

   lbFields: TListBox;

   btnConnect: TButton;

   btnExecSQL: TButton;

   Panel4: TPanel;

   procedure btnConnectClick(Sender: TObject);

   Procedure CreateDbfList(var cmbTables:TdxPickEdit);

   procedure cmbTablesChange(Sender: TObject);

   procedure LoadFieldList(var lbFields:TListBox;TbTable:TadsTable);

   procedure btnExecSQLClick(Sender: TObject);

   procedure FormCreate(Sender: TObject);

   procedure memSQLStatementKeyDown(Sender: TObject; var Key: Word;

     Shift: TShiftState);

   procedure FormClose(Sender: TObject; var Action: TCloseAction);

 private

   { Private declarations }

 public

   { Public declarations }

 end;

TThreadOnSQL = class(TThread)

protected

  constructor create();

  procedure Execute;override;

  procedure CreateResults(qrySQLStatement:TAdsQuery);

End;

var

 Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

{***************************************************************************}

constructor TThreadOnSQL.create();

Begin

  inherited Create(False);

End;

procedure TThreadOnSQL.Execute();

Var

  sOldCaption : String;

begin

  self.Priority := tpLowest;

  With Form1 Do

  Begin

     sOldCaption := Form1.Caption;

     Try

        If (AdsConnection1.IsConnected) Then

        Begin

           Caption := Caption + ' - Running SQL command, wait. . .';

           Panel1.Enabled := False;

           btnExecSQL.Enabled := False;

           qrySQLStatement.Close;

           qrySQLStatement.SQL.Clear;

           If memSQLStatement.SelText <> '' Then

              qrySQLStatement.SQL.Text := memSQLStatement.SelText

           Else

              qrySQLStatement.SQL.Text := memSQLStatement.Text;

           qrySQLStatement.ExecSQL;

           qrySQLStatement.Active := True;

           synchronize(CreateResults(qrySQLStatement));

        End

        Else

           ShowMessage('Connect the path and select a table before execute the SQL.');

     Except

        on E: Exception do

        MessageDlg('Error:'+#13+'"'+E.Message+'"',mtError,[mbOk],0);

     End;

     btnExecSQL.Enabled := True;

     Panel1.Enabled     := True;

     Caption := sOldCaption;

  End;

End;

Procedure TThreadOnSQL.CreateResults(qrySQLStatement:TAdsQuery);

Var

  frmResults : TfrmResults;

Begin

  frmResults := TfrmResults.Create(self);

  frmResults.Populate(qrySQLStatement);

  frmResults.Show;

End;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora
Entre para seguir isso  





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×