Ir ao conteúdo
  • Cadastre-se

Criando forms dentro de threads


maclogic

Posts recomendados

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;

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...