Ir para conteúdo
Fórum Script Brasil

Micheus

Veteranos
  • Total de itens

    3.189
  • Registro em

  • Última visita

Tudo que Micheus postou

  1. fajo, já que sim, coloque um brack-point nas linhas "frmReceive := TfrmReceive.Create(Application);" dos procedimentos e execute o programa de dentro da IDE do delphi (F9), só para ter certeza de que eles não estão sendo chamados mesmo (só para desencargo de consciência). Abraços
  2. Micheus

    Debug

    juniorboll, só para não deixá-lo sem uma resposta, já que imagino uma possibilidade... Quando você apertao F9 caia direto na janela da CPU, ou aparecia uma mensagem do tipo "Debugger Exception Notification"? Porque se for o caso (o único que conheço), verifique se não está marcada o checkbox do canto inferior-esquerdo na caixa de diálogo (como no ex.), pois neste caso, clicando OK sempre cairá na tal janela. Não recomendo desabilitar "integrated debugger", pois é sua ferramenta de depuração - auxiliando na localização de problemas no código. Abraços
  3. fajo, você tem algum código escrito para os eventos OnNewLine ou OnNewMemo? Se tem, eles não estão sendo executados? você já pôs um break-point para verificar? Sem "debugar" o programa acho que não vai dar para achar uma solução.
  4. Seria difícil colocar o código dessa rotina e de onde ela é chamada?Nesse processo, as mensagens circulam pela rede utilizando algum componente específico tipo socket ou você implementou isto num banco de dados? Se quizer enviar, até pode, mas só vou ter um tempo livre para isto na terça a noite. Dê uma olhada na sua caixa de mensagens aqui do forum (meu e-mail) Abraços
  5. Ressucitando o velho post. :D Em algum lugar eu lí que como o TQRRichEdit descende do TRichEdit e por este utilizar o Richedit versão 1, teria tal restrição. No msdn cita que o recurso de transparência está diponível a partir da versão 2. Talvez as versões mais recentes do Delphi não tenha este problema. poderia ser uma solução, só não sei se o quick vai fazer quebra da imagem, supondo que seu texto pudesse começar em uma página e terminar em outra. Pode ser que haja por ai algum componente que "tape essa brecha". Abraços
  6. como assim, colocar o foco na aplicação que está na tray e sem mostrar o form? Acho que não dá. O que você pretende fazer?
  7. Visitante, quando vejo um código deste tamanho, sem identação e ainda em letras garrafais, dá até uma preguiça de olhar. Para tentar ajudar é necessário copiar o código e identar para conseguir ver a estrutura lógica que você está utilizando. Por favor, tente lembrar de utilizar, no editor da mensagem, o botãozinho com o "#". É bem fácil: cola seu código, depois marca ele e clica no botãozinho com o "#" - falou?! Pontos a verificar: 1) o tal FormPesquisaESTOQUEX foi removido do auto-create no projeto? Se não foi, remova-o; 2) troque a parte do código: Application.CreateForm(TFormPesquisaESTOQUEX,FormPesquisaESTOQUEX); FormPesquisaESTOQUEX.ShowModal; FormPesquisaESTOQUEX.RELEASE; FormPesquisaESTOQUEX := NIL; por: FormPesquisaESTOQUEX := TFormPesquisaESTOQUEX.Create(Self); try FormPesquisaESTOQUEX.ShowModal; finally FormPesquisaESTOQUEX.Free; FormPesquisaESTOQUEX := NIL; end; digamos que é o procedimento padrão para criar e destruir, dinamicamente, um form apresentado com o método ShowModal (com show não é assim) Agora a origem do problema (vou utilizar o seu código bagunçado para poder identificá-lo): "... IF (QUERY1ES_CODIGOEANBARRA.TEXT = W_CODIGOEAN) THEN BEGIN FORMMENU.W_OPERACAO := 'FORMFILTROETIQUETA_SINTONIA'; MASKEDITCODIGOREFERENCIA.SetFocus; Modulo.TEstoque.Cancel; FormPesquisaESTOQUEX := TFormPesquisaESTOQUEX.CREATE(APPLICATION); FORMPESQUISAESTOQUEX.QUERY1.ACTIVE := TRUE; FORMPESQUISAESTOQUEX.QUERY1.Close; FORMPESQUISAESTOQUEX.QUERY1.OPEN; REFRESH; OPERACAO := '4'; VORDEM := 'ES_CODIGOEANBARRA'; FORMPESQUISAESTOQUEX.COMBOBOXORDEM.TEXT := 'POR CODIGO EAN'; FORMPESQUISAESTOQUEX.EDITPESQUISA.TEXT := FORMFILTROETIQUETA_SINTONIA.W_CODIGOEAN; IF FORMPESQUISAESTOQUEX.COMBOBOXORDEM.TEXT = 'POR CODIGO EAN' THEN BEGIN OPERACAO := '4'; VORDEM := 'ES_CODIGOEANBARRA'; With FORMPESQUISAESTOQUEX.Query1 do begin vOrdem := 'ES_CODIGOEANBARRA'; VSELECT1 := 'SELECT * FROM ESTOQUE '+ 'WHERE '+ '(ESTOQUE.ES_CODIGOEANBARRA=:EAN) '; FORMPESQUISAESTOQUEX.QUERY1.Close; FORMPESQUISAESTOQUEX.QUERY1.SQL.clear; FORMPESQUISAESTOQUEX.QUERY1.SQL.Add(vSelect1); FORMPESQUISAESTOQUEX.Query1.Params[0].AsSTRING := FORMFILTROETIQUETA_SINTONIA.W_CODIGOEAN; FORMPESQUISAESTOQUEX.QUERY1.Open; FORMFILTROETIQUETA_SINTONIA.MASKEDITCODIGOEAN.TEXT := W_CODIGOEAN; FORMFILTROETIQUETA_SINTONIA.MASKEDITCODIGOREFERENCIA.SetFocus; //--- NESTE PARAMETRO IRA ABRIR O FORM DA PESQUISA NO ESTOQUE PARA VISUALIZAR OS //--- PRODUTOS COM O CODIGO DA PESQUISA SOLICITADO Application.CreateForm(TFormPesquisaESTOQUEX,FormPesquisaESTOQUEX); FormPesquisaESTOQUEX.ShowModal; ..." Percebeu, você está criando o form duas vezes, mas só elimina ele na segunda. Na verdade, a segunda vez só ocorre se passar pelo "IF FORMPESQUISAESTOQUEX.COMBOBOXORDEM.TEXT = 'POR CODIGO EAN' THEN". Mas isso só dá para perceber com o texto identado!!! você vai ter que melhorar sua lógica para resolver este problema. dica: quando você está se referindo a componentes localizados no form em que você está processando, não é necessário referenciar a que form ele pertence. Por ex., se você está tratando a procedure TFORMFILTROETIQUETA_SINTONIA.MaskEditCODIGOEANExit, entende-se que você está codificando no form TFORMFILTROETIQUETA_SINTONIA, deste modo, você poderia economizar digitação em casos como estes: FORMFILTROETIQUETA_SINTONIA.MASKEDITCODIGOEAN.TEXT := W_CODIGOEAN; FORMFILTROETIQUETA_SINTONIA.MASKEDITCODIGOREFERENCIA.SetFocus; ficariam:MASKEDITCODIGOEAN.TEXT := W_CODIGOEAN; MASKEDITCODIGOREFERENCIA.SetFocus; Abraços
  8. Micheus

    Dbgrid

    Dá uma olhada neste post. Abraços
  9. Micheus

    Fechar Programas

    Geovani, eu não tenho conta de administrador aqui para testar, foi onde implementei o teste, então, vou botar o código e você vê se consegue algo. Vou por só o .pas, então no seu form para teste, adicione um TListBox e um TButton: unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; ListBox1: TListBox; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; NetAPIStatus = Integer; PFILE_INFO_3 = ^FILE_INFO_3; FILE_INFO_3 = record fi3_id: Integer; fi3_permissions: Integer; fi3_num_locks: Integer; fi3_pathname: PWideChar; fi3_username: PWideChar end; function NetFileEnum(serverName, basePath, userName: PWideChar; level: DWORD; var bufPtr: PWideChar; prefmaxlen: DWORD; entriesread, totalentries :LPDWORD; var resumeHandle :DWORD ): NetAPIStatus; stdcall; function NetApiBufferFree(buffer: Pointer): NetAPIStatus; stdcall; const MAX_PREFERRED_LENGTH = DWORD(-1); NERR_Success = 0; var Form1: TForm1; implementation {$R *.DFM} function NetFileEnum; stdcall external 'NETAPI32.DLL'; function NetApiBufferFree; stdcall external 'NETAPI32.dLL'; procedure ListFiles(const server, user :string; list :TStrings); var wUser, wServer :WideString; err, i, nil_HANDLE, entriesRead, totalEntries :DWORD; buffer :PWideChar; info :PFILE_INFO_3; begin wUser := user; wServer := server; err := NetFileEnum( nil, // PWideChar(wServer), nil, nil, // PWideChar(wUser), 3, buffer, MAX_PREFERRED_LENGTH, @entriesRead, @totalEntries, nil_HANDLE); if err = NERR_Success then try info := PFILE_INFO_3(buffer); for i := 0 TO entriesRead - 1 DO begin list.Add(info^.fi3_pathname); Inc(info) end finally NetAPIBufferFree(buffer) end else raise Exception.CreateFmt('Error %d enumerating files', [err]) end; procedure TForm1.Button1Click(Sender: TObject); begin ListFiles('', '', ListBox1.Items); end; end.
  10. As informações estão meio vagas: - o código da DLL não está completo - falta declaração da funcValidData exportada; - não dá para saber de qual procedure não foi declarada segundo a mensagem (é sempre preferível colocar a mensagem original); - não sabemos como você está carregando/chamando as procedures/funções da DLL; Um bom link sobre DLL: Dynamic Link Libraries (DLL) and Delphi Abraços
  11. "DLL Dynamic Link Library, são arquivos que contém rotinas e funções que podem ser utilizadas pelos programas. O mesmo programa pode utilizar várias DLLs diferentes e a mesma DLL pode ser usada por vários programas. O uso de DLLs visam facilitar o trabalho dos programadores, que podem utilizar funções que já estão prontas em alguma DLL ao invés de ter de criá-las do zero." (ref. Guia do Hardware) Entendendo as DLLs - Link Editado por micheus 26-01-2007 16:22 O principal objetivo não é realmente armazenar dados, digamos que esta é foi uma "aplicação inventada", mas é uma aplicação. | apesar de ser utilizado para armazenar diversos recursos - é minha opinião. :D Os recursos em uma DLL são independentes da linguagem de programação utilizada para desenvolver o programa que a utiliza. Assim, você pode utilizar no seu programa Delphi uma DLL desenvolvida em C, VB.NET, ... Achei mais isso: "Por que eu devo usar uma DLL? Eis uma boa questão. Apesar de tudo, o que uma DLL dá a você? DLLs oferecem esses benefícios: - Reuso efetivo de código - Capacidade de compartilha código facilmente entre muitas aplicações - Capacidade para repartir código - Internacionalização de sua aplicação - Uso efetivo dos recursos do Windows" (ref. InfoHome - completíssimo) Abraços
  12. Micheus

    Manipulação String

    só dando uma forcinha...function Copy(S; Index, Count: Integer): string; neste caso, deveria ser assim: Copy(Variável, 12, 1); Abraços
  13. henker, desculpe a demora em responder.Caso ainda não tenha resolvido o problema, a solução que encontrei (após debugar o processo de filtragem) é a seguinte: procedure TPesqFuncionarios.BBLocalizarClick(Sender: TObject); begin with MasterCadFuncionarios.TabelaMaster do begin if RGOpcoes.ItemIndex = 0 then Filter := 'nome LIKE '+QuotedStr('*'+EditPesquisa.Text+'*')+'' else Filter := 'cpf LIKE '+QuotedStr('*'+EditPesquisa.Text+'*')+''; end end; você deve definir a propriedade Filtered = True já em design-time - não há necessidade de fazer em run-time. (a princípio, isto vale apenas para a Zeos Lib, não afirmo pelas demais ;)) Utilizei deste modo no evento EditPesquisa.OnChange e funcionou que é uma beleza:procedure TMainForm.EDpesquisaChange(Sender: TObject); begin with DMMain.ZTable1 do Filter := 'nome LIKE '+QuotedStr('*'+EDPesquisa.Text+'*')+''; end; Observe que o maior problema está no fato de ter que ser utilizado "*" e não "%" como máscara. Seguindo a execução do programa fui parar na unit ZMatchPattern, onde a função IsMatch (utilizada no processo da filtragem) está codificada e fui logo dar de cara com estas constantes:{ Character defines } MATCH_CHAR_SINGLE = '?'; MATCH_CHAR_KLEENE_CLOSURE = '*'; MATCH_CHAR_RANGE_OPEN = '['; MATCH_CHAR_RANGE = '-'; MATCH_CHAR_RANGE_CLOSE = ']'; MATCH_CHAR_CARET_NEGATE = '^'; MATCH_CHAR_EXCLAMATION_NEGATE = '!'; daí caiu a ficha - nem continuei debugando. :D O novo código que lhe postei acima, está bem simplificado - nada de close e open. Também, diferente do que nomalmente vejo por ai (e lhe havia sugerido) não tem essa de Filtered = False / atribui o filtro / Filtered = True, porque no Zeos o filtro é aplicado na atribuição do texto (Filter := ...). Então, Filtered pode ficar ativo o tempo todo. Observe que método SetFilterText, na unit ZAbstractRODataset, faz a releitura das linhas de sua tabela no momento da alteração do texto, desde que o filtro esteja habilitado:procedure TZAbstractRODataset.SetFilterText(const Value: string); begin inherited SetFilterText(Value); FilterExpression.DefaultVariables.Clear; FilterExpression.Expression := Value; InitFilterFields := False; if FilterEnabled then RereadRows; end; Abraços
  14. Micheus

    Fechar Programas

    Geovani, esta informação pode ser obtida via função da API NetFileEnum, mas a função, assim como via o painel de controle, só lhe retornará algo se você tiver direitos de administrador, do contrário você obterá um "Acces denied" (acesso negado). Também há um detalhes referentes às versões do Windows - este post do Churc vale para esta função também. Pesquisando no Google: get users with open file on machine, o 2º link aponta para uma versão em VB (fácil de ler e converter, caso lhe enteresse) Abraços
  15. Xanxerê, acho que deve ser um daqueles casos que citei antes: "...uma opção seria utilizar a propriedade RecNo do dataset ligado ao DBGrid - desde que o dataset suporte esta fucionalidade;"Existem componentes (dataset) em que a propriedade RecordCount, por exemplo, também não corresponde ao número de registros no dataset, mas sim algo como o número de registros recuperados (assim por questões de otimização) - o MDO (que utilizo para acesso ao FireBird) é um caso destes. Existem outros. Qual o banco de dados que você utiliza e qual o componente de acesso? Abraços
  16. Visitante, primeiramente, altere a propriedade Position do form para poDesigned; depois para garantir que seu form seja mostrado sempre no canto inferior-direito obdecendo a visibilidade ou não da barra de tarefas (taskbar - aquela do botão Iniciar) ou qualquer outra barra de tarefas personalizada que possa ser configurada para manter-se visível ou auto-ocultar, utilize o seguinte código no evento OnShow do form:procedure TForm1.FormShow(Sender: TObject); var R :TRect; begin if SystemParametersInfo(SPI_GETWORKAREA, 0, @R, 0) then SetBounds(R.Right -Width, R.Bottom -Height, Width, Height); end; Já se você quizer que a janela fique bem no canto da tela, sem levar em conta a visibilidade da barra de tarefas (taskbar):procedure TForm1.FormShow(Sender: TObject); begin SetBounds(GetSystemMetrics(SM_CXSCREEN) -Width, GetSystemMetrics(SM_CYSCREEN) -Height, Width, Height); end; Obs: Ambos funcionarão bem quando você utilizar o Show e Hide (parece ser seu caso pelo post). Já se a aplicação for minimizada para a barra de tarefas, ao clicar no icone dela para torná-la visível, e neste meio tempo tiver sido modificada a visibilidade da barra de tarefas este método pode não funcionar corretamente. Tentei, com OnActivate, WM_SYSMESSAGE com SC_RESTORE e nada de passar por um desses eventos e posicionar corretamente a janela para esta situação. Abraços
  17. Tem algum tradutor aew??? :D Progr'amador, acho que é mais complicado responder do que entender a pergunta não?! :huh: Aparentemente seria isso, não é: "Tenho que fazer um programa em delphi com banco de dados em MySQL e distribuir os dados na rede através de php, como que faço?" Abraços
  18. Cris Rodrigues, uma adaptação no código do colega Thales, que localiza diretórios pode servir para o que você quer. Veja o Post
  19. Alisson, tem lógica sim. Também utilizo desta forma no Firebird. Aliás, até testar a "sua" função CURRENT_DATE, eu ainda não tinha utilizado desta forma, mas funcionou. você provavelmente também poderá utilizar TODAY, mais apropriado, já que NOW retorna data e hora. Eu testei com minha base destas formas e todas também funcionaram: select * from ligacao where teste = cast('today' as date) select * from ligacao where teste = cast(current_date as date) Abraços
  20. Micheus

    Numerar Paginas

    Se é para explicar como numerar no Office.org Writer, acho que o posto talvez devesse estar no forum Demais Programas e S.O ?
  21. Qual o banco de dados que você está utilizando. A dica vale para Firebird (pelo menos comigo funciona) e provavelmente Interbase - mas utilizo dialect 3. Outra, já experimentou configurar DIALECT 3 na conexão com o banco de dados? Que componentes você está utilizando?
  22. É não sei explicar. Mas se você for utilizar essa quantidade de linhas no seu código, então porque não coloca apenas a consulta utilizada no seu #1 post:Select CX.sequencial, CX.coo From CaixaGeral CX, AdmCartao ADM WHERE CX.codAdmCartao = ADM.codAdmCartao GROUP BY CX.sequencial, CX.cooe então, após abrir a query (TQuery), utiliza a propriedade RecordCount. Não daria?
  23. Alisson, provavelmente seu campo data é do tipo DATE e como você está comparando como um TIMESTAMP, obtém o erro. Experimente converter o TIMESTAMP para DATE e veja se funciona: (DATA_DEVOLUCAO > CAST(CURRENT_DATE AS DATE)) Abraços
  24. Fabi, acho que sua SQL deveria ficar deste modo, confira se é isto:Select CX.sequencial, CX.coo, COUNT(*) Qtd From CaixaGeral CX, AdmCartao ADM where CX.codAdmCartao = ADM.codAdmCartao GROUP BY CX.sequencial, CX.coo E se não me engano ainda daria para fazer assim, mas acho que teria que ser avaliado qual tem melhor desempenho (acredito seja a primeira):Select CX.sequencial, CX.coo, COUNT(*) Qtd From CaixaGeral CX where Exists(Select * from AdmCartao ADM where CX.codAdmCartao = ADM.codAdmCartao) GROUP BY CX.sequencial, CX.coo Acrescentei as colunas CX.sequencial, CX.coo no SELECT porque normalmente você precisa saber a que se refere cada linha retornada na consulta. Abraços
  25. Fabi, dê uma revisada no que você deseja fazer. você está introduzindo dois SELECT na sua query: ... SQL.Clear; SQL.Add('SELECT COUNT(*) FROM('); SQL.Add('SELECT CX.COO, CX.SEQUENCIAL FROM CAIXAGERAL CX, ADMCARTAO ADM '); ... Abraços
×
×
  • Criar Novo...