Ir para conteúdo
Fórum Script Brasil

Gustavo_Sid

Membros
  • Total de itens

    40
  • Registro em

  • Última visita

Posts postados por Gustavo_Sid

  1. Olá galera.

    Estou fazendo um sistema de backup do firebird pelo Gbak, e gostaria de pegar o retorno do Gbak. Pois pelo WinExec ou ShellExecute não consigo pegar o retorno. Tenteu também pelo CreateProcess mais tmabém não funciona.

    Usei o seguinte código:

    procedure TForm1.CaptureConsoleOutput(DosApp: string; var AMemo: TMemo);

    const

    ReadBuffer = 1048576; // 1 MB Buffer

    var

    Security : TSecurityAttributes;

    ReadPipe,WritePipe : THandle;

    start : TStartUpInfo;

    ProcessInfo : TProcessInformation;

    Buffer : Pchar;

    TotalBytesRead,

    BytesRead : DWORD;

    Apprunning,n,

    BytesLeftThisMessage,

    TotalBytesAvail : integer;

    begin

    with Security do

    begin

    nlength := SizeOf(TSecurityAttributes);

    binherithandle := true;

    lpsecuritydescriptor := nil;

    end;

    if CreatePipe (ReadPipe, WritePipe, @Security, 0) then

    begin

    // Redirect In- and Output through STARTUPINFO structure

    Buffer := AllocMem(ReadBuffer + 1);

    FillChar(Start,Sizeof(Start),#0);

    start.cb := SizeOf(start);

    start.hStdOutput := WritePipe;

    start.hStdInput := ReadPipe;

    start.dwFlags := STARTF_USESTDHANDLES + STARTF_USESHOWWINDOW;

    start.wShowWindow := SW_HIDE;

    // Create a Console Child Process with redirected input and output

    if CreateProcess(nil ,PChar(DosApp),

    @Security,@Security,

    true ,CREATE_NO_WINDOW or NORMAL_PRIORITY_CLASS,

    nil ,nil,

    start ,ProcessInfo) then

    begin

    n:=0;

    TotalBytesRead:=0;

    repeat

    Inc(n,1);

    Apprunning := WaitForSingleObject(ProcessInfo.hProcess,100);

    Application.ProcessMessages;

    if not PeekNamedPipe(ReadPipe ,@Buffer[TotalBytesRead],

    ReadBuffer ,@BytesRead,

    @TotalBytesAvail,@BytesLeftThisMessage) then break

    else if BytesRead > 0 then

    ReadFile(ReadPipe,Buffer[TotalBytesRead],BytesRead,BytesRead,nil);

    TotalBytesRead:=TotalBytesRead+BytesRead;

    until (Apprunning <> WAIT_TIMEOUT) or (n > 150);

    ShowMessage('Terminou');

    Buffer[TotalBytesRead]:= #0;

    OemToChar(Buffer,Buffer);

    AMemo.Text := AMemo.Text + (StrPas(Buffer));

    end;

    FreeMem(Buffer);

    CloseHandle(ProcessInfo.hProcess);

    CloseHandle(ProcessInfo.hThread);

    CloseHandle(ReadPipe);

    CloseHandle(WritePipe);

    end;

    end;

    O backup é feito mais não leva nada para o Memo, alguém pode me ajudar por favor ??

    Obrigado.

  2. Olá amigos.

    Estou com um problema em acessar pastas com espaços. Quero acessar a pasta C:\Program Files\. E vou usar essa pasta para executar um comando no cmd do windows, que precisa que a pasta com espaços fique entre aspas.

    No meu código colocando \" não sai " e sim \".

    alguém poderia me ajudar.

    Obrigado.

  3. Consegui encontrar um código que consiga o posicionamento da barra de tarefas do windows.

    Estou disponibilizando para quem precisar.

    procedure TForm1.Button1Click(Sender: TObject);

    var

    Tasklist : HWnd;

    Bordered : TRect;

    begin

    Tasklist := FindWindow('Shell_TrayWnd', nil);

    GetWindowRect(Tasklist, Bordered);

    Label1.Caption := 'Left: ' + IntToStr(Bordered.Left);

    Label2.Caption := 'Right: ' + IntToStr(Bordered.Right);

    Label3.Caption := 'Top: ' + IntToStr(Bordered.Top);

    Label4.Caption := 'Bottom: ' + IntToStr(Bordered.Bottom);

    end;

    Obrigado pela ajuda.

  4. na propriedade WindowState do form deixe como wsMaximized

    se a barra de ferramentas não estiver oculta o form ocupara toda a tela mantendo a barra de ferramentas

    abraço

    Quanto ao Form na tela foi resolvido. Porém, tenho vários Labels e botões na tela e os posiciono com a medida da resolução usada. Então desta forma quando usar a barra de ferramentas na lateral, ou a barra for maior, o Form ficará posicionado mais os campos não. Então acho que o ideial era eu arrumar uma forma de pegar o tamanho da barra e se possivel também saber se ela está na horizontal e vertical, desta forma consigo sempre posicionar os campos diminuindo o tamanho da barra do tamanho da tela.

    Entendeu ?

    Obrigado.

  5. Olá Galera,

    Estou fazendo uma aplicação onde o Form principal tem que ocupar toda a tela e deixa visível somente a barra de ferramentas do windows onde se encontra o menu iniciar. Tive a ideia de atribuir atribuir o tamanho do Form o tamanho da tela menos o tamanho da barra de ferramentas do windows, porém não estou achando uma forma ou uma função que me retorne esse tamanho. Ficarei grato para quem puder me ajudar.

    Obrigado.

    Gustavo

  6. Olá galera.

    Estou fazendo uma aplicação na qual eu conecto pelo ADO num banco de dados Access onde uso uma tabela temporária. Então deleto os registros e insiro novamente.

    Acontece que a cada vez que insiro os registros o banco de dados aumenta de tamanho, mas ao deletar os registros o tamanho não diminiu, ou seja, quando insiro novamente ele só vai aumentando o tamanho sendo que estou deletando os registros e o tamanho não diminui.

    Talvez tenha que fazer algum comando para deletar os registros fisicamente alguma coisa assim, se alguém souber por favor me ajude.

    Obrigado.

    Abraços.

  7. Obrigado Jhonas. O componente funcionou, porém me apareceu uma outra dúvida. Não sei se você chegou a instalar este componente, mais quando vou conectar no banco de dados Pervasive ele abre a tela para digitar usuário e senha. Tentei desmarcar e marcar as opções do componente de conexão, inclusive um componente de sessão onde você informa os dados do servidor e do banco de dados (usuário e senha), mais mesmo assim ele continua abrindo a tela para colocar usuário e senha.

    Queria saber se tem alguma forma de eu definir esse usuário e senha no componente para que não fique abrindo a tela para digita-los toda fez que fizer a conexão com o banco de dados Pervasive ???

    Abraços.

    Obrigado.

  8. Olá galera do Forum.

    Gostaria de pedir uma ajuda. Estou desenvolvendo uma aplicação onde preciso fazer uma leitura do banco de dados Pervasive 10, acontece que não estou encontrando um componente para o Delphi que eu consigo conectar a um banco de dados Pervasive. Gostaria de saber se existe algum componente para isso ou alguma forma de conectar por ODBC ou coisa parecida, preciso de conectar ao banco para fazer leitura,edição e gravação, se alguém souber como eu faço isso pelo Delphi por favor me ajude ??

    Agurado Respostas.

    Obrigado.

    Abraços.

  9. Não amigo. Desculpe me expressei mal.

    Eu quis dizer pelo Delphi, se existe alguma função ou componente do Delphi que me de esta informação, se o sistema é 64 bits ou 32 bits?

    E como gravo uma chave no Windows 64 bits??

    Entendeu?

    Abraços.

  10. Olá amigo.

    Digite isso no evento OnDrawCell do StringGrid:

    procedure TForm1.gradeDrawCell(Sender: TObject; ACol, ARow: Integer;

    Rect: TRect; State: TGridDrawState);

    begin

    if gdSelected in State then

    grade.Canvas.Brush.Color:= clGreen; //Aqui você coloca a cor de desejar.

    grade.Canvas.FillRect(Rect); // redesenha a celula

    grade.Canvas.TextOut(Rect.Left+3,Rect.Top+2,grade.Cells[acol,arow]);

    end;

    Abraços.

  11. Olá amigos.

    Estou precisando de uma ajuda com registro do windows.

    Fiz uma rotina para inserir uma chave no registro do windows, quando utilizo no Windows XP 32 bits funciona tudo lindo, o problema é quando coloco em sistemas 64 bits, aí não insere a chave no registro.

    alguém pode me dizer como utilizo para 64 bits e como descobrir se o sistema é 64 ou 32 bits ???

    Agradeço desde já.

    O codigo que utilizei foi o seguinte:

    procedure TfrmPricipal.prRegistrar;

    Var

    vChave: String;

    Registro: TRegistry;

    begin

    vChave:= 'Valor';

    Registro:= TRegistry.Create;

    Registro.RootKey:= HKEY_LOCAL_MACHINE;

    Registro.OpenKey('\SOFTWARE\Sistema Contabil',true);

    Registro.WriteString('Valor',vChave);

    FreeAndNil(Registro);

    ShowMessage('Programa Registrado com sucesso');

    end;

  12. o problema é que como o ScrollBar move uma coluna de cada vez não estão sendo pintadas as celulas corretamente
    já experimentou usar o metodo Repaint ?

    gostaria de uma achar uma forma de o ScrollBar mover 2 colunas cada vez que clicada no ScrollBar.
    Va em Iniciar > Painel de Controle > Mouse > Roda ( ou scroll ) > Número de Linhas de cada vez

    coloque o numero de linhas que quer que role

    OBS: ScrollBar move linhas não colunas

    abraço

    Sim. Eu uso o Repaint. So que preciso que mova 2 colunas e não 1. Estou falando do ScrollBar Horizontal, quando o numero de colunas não cabe na tela do StringGrid aí ele coloca uma Barra Horizontal. Essa ScrollBar que to falando, e quando clica na seta para mover, ela move 1 coluna de cada vez, preciso que mova 2 colunas.

    Sabe como fazer ??

    Abraço.

  13. Olá galera.

    Estou com um problema numa aplicação onde mesclo as colunas do stringgrid, o problema é que como o ScrollBar move uma coluna de cada vez não estão sendo pintadas as celulas corretamente, gosteria de uma achar uma forma de o ScrollBar mover 2 colunas cada vez que clicada no ScrollBar.

    alguém sabe como fazer isso??

    Obrigado.

    Abraços.

  14. Seguinte Galera para não Criar outro Tópico vou aproveitar esse mesmo para outro problema desse mesmo programa.

    O problema é o seguinte:

    Tenho um serviço e um forma na aplicação.. acontece que o serviço so utilizo mesmo para colocar como serviço do windows é no form que tenho um TTimer para rodar as tarefas...

    O problema é o seguinte de alguma forma o timer está sendo entorrompido por alguma razão e estou achando que seja o serviço, como foi minha primeira aplicação utilizando serviço não sei muito bem como funciona.

    Enfim gostario de saber se o serviço fica executando de tempo em tempo porque crio o meu form nele e isso pode ta atrapalahando..

    o Codigo é o seguinte:

    procedure TSID_MVEERP.ServiceExecute(Sender: TService);

    begin

    try

    CoInitialize(Nil);

    try

    Application.CreateForm(TfrmPrincipal, frmPrincipal);

    frmPrincipal.Show;

    except

    on E: Exception do

    ShowMessage('Erro: '+ E.Message);

    end;

    While (not(Self.Terminated)) do

    ServiceThread.ProcessRequests(true);

    finally

    CoUninitialize;

    end;

    end;

    Quero saber se isso é executado constantemente enquanto o serviço está rodando porque isso pode estar parando o Timer que tem nesse Form ??? E se for como faço para que ele fique sempre rodando mais sem criar esse form a todo momento, tentei colocar no on start do serviço mais aí está dando erro so consegui dessa forma...

    Abraços..

  15. Leia este comentario

    Serviços do Windows têm um nome interno usado pelo sistema operacional como identificador único e um nome externo usado como uma descrição a ser apresentada ao usuário. Tanto o C++ Builder quanto o Delphi usam como nome interno do Serviço o valor da propriedade Name do componente TService. Por isso, é preciso modificar esse valor antes do programa ter a oportunidade de registrar o Serviço ou realizar qualquer outra operação que dependa do nome. Um bom lugar é o próprio construtor do TService.

    Uma implicação importante ao se usar esse método é que alterar o nome de um componente nos força a respeitar as regras de nomeação do ambiente. Ou seja, o nome não pode ser iniciado por um número, não pode apresentar espaços em branco nem caracteres que não existam na língua inglesa, como caracteres acentuados (agudo, circunflexo, til, trema, crase) ou o cê cidilha.

    Podemos usar o próprio nome da configuração obtido anteriormente para diferenciar cada instância instalada. Para que isso funcione, teremos que preparar o nome obtido para garantir sua validade, substituindo os caracateres que não forem permitidos.

    abraço

    OK. Entendi realmente so vai dar se trocar o nome do executável. Muito obigado pela ajuda irei fazer isso.

    Abraços..

  16. Application.Title:= 'Integração PDV ERP'; //Aki coloco o titulo mais quando rodo aparece o nome do executavel.

    voce não reparou ainda que é justamente o nome do executável que aparece no gerenciador de tarefas ?

    se voce quiser o titulo 'Integração PDV ERP', esse é que deverá ser o nome do seu executável

    abraço

    Sim é o nome do executavel que fica no gerenciador de tarefas. Mais o que eu quero é que o executável tenha um nome e quando abrir ele a aba do programa na barra de tarefas fica o texto definido no "Application.Title", isso sempre funciona para qualquer aplicação so que nessa não ta funcionando ta ficando o nome do executável, acho que talvez seja porque é um aplicação de serviço.

    Entendeu ?? Será que não tem outra forma para fazer isso numa aplicação de serviço??

    Abraços..

  17. veja esse link

    http://www.devmedia.com.br/articles/viewcomp.asp?comp=7867

    Quando inicio o serviço criado abre o form normalmente, mais os Edits que preciso para digitar os parametros do serviço ficam travados e não deixa digitar

    lendo esse artigo, voce vai entender o motivo porque os Edits ficam travados ...

    para solucionar o problema voce devera parar o serviço e passar os paramentros necessarios e depois inicia-lo novamente

    abraço

    Éh agora entendi. acontece que na minha aplicação quando paro o serviço o form é destruido dessa forma não vai ter jeito de passar os parametros, mas já resolvi esse problema. Crei um outro executavel para passar os parametros, assim so paro o serviço e chamo esse outro executál e depois incio o serviço novamente, dessa forma deu tudo certo. Mais muito obrigado.

    So tenho outra duvida, por ser um serviço não estou conseguindo colocar um título na aplicação para aparecer na barra de tarefas, uso o codigo abaixo e não funciona. Sabe o porque e se tem como resolver ???

    program svrMVEpdverp;

    uses

    SvcMgr,

    untServico in 'untServico.pas' {SID_MVEERP: TService};

    {$R *.res}

    begin

    Application.Initialize;

    Application.Title:= 'Integração PDV ERP'; //Aki coloco o titulo mais quando rodo aparece o nome do executavel.

    Application.CreateForm(TSID_MVEERP, SID_MVEERP);

    Application.Run;

    end.

    Obrigado.

    Abraços;

  18. Olá galera.

    Estou com um problema quando estou tentando criar um serviço em delphi para o windows.

    Acontece que o serviço já consegui fazer rodar, o problema é que presico de um form na aplicação, pois vou usar um banco de dados ACCESS para quardar as configurações que serviço precisa.

    O que está ocorrendo é o seguinte:

    Quando inicio o serviço criado abre o form normalmente, mais os Edits que preciso para digitar os parametros do serviço ficam travados e não deixa digitar. Aí pensei que era porque o form estava sendo criado a cada vez que o serviço rodava. Aí resolvi colocar em outro form que fica idenpendente do serviço, mais na mesma aplicação e mesmo assim os Edits ficaram travados também..

    alguém sabe o que pode ser ?? E como resolvo isso??

    Abraços.

  19. Foi mal ... propriedade RequestLive = true

    abraço

    OK. brigadão amigo deu certo..

    Mais agora tem outro problema.. a aplicação limpa essa tabela DBF e insere novos registros cada vez que é executada, e quando ela é limpa o tamanho dela não muda..

    Por exemplo inseri os registros e ficou com 500Kb o arquivo DBF, quando rodo a rotina novamente fica com 1MB, se rodo novamente vai para 1,5MB, ou seja ela mantem o tamanho existente e aumenta 500Kb, mais se abrir o arquivo são sempre a mesma quantidade de registros.

    Sabe como resolver isso ??

    Utilizo o camando "DELETE FROM" na query para limpar..

    Aguardo. Abraços.

  20. Ola galera.

    Estou com um problema em uma aplicação..

    Manipulo arquivos DBF que uso para integrar com minha aplicação, consigo limpar as tabelas com o comando delete..

    Utilizo a query da paleta BDE.. então quando utilizo Append.. para fazer a inserção de registros da o seguinte erro : 'cannot modify a read-only dataset'.. já verifiquei se o arquivo está como somente leitura e não está, por um Manager de DBF consigu inclui registros..

    Somente pelo delphi que da esse erro..

    O que pode ser???

    alguém tem outra solução ??

×
×
  • Criar Novo...