
Micheus
Veteranos-
Total de itens
3.189 -
Registro em
-
Última visita
Tudo que Micheus postou
-
então, isto é conhecido por tela de Splash. deu certo, mas não saberia dizer até quando... O código está sim, muito estranho - e ao meu ver meio fora da lógica: -criar splash -mostra splash -passado o tempo splash fecha -cria forma principal -mostra form principal. seu form de splash está (tentando) fazer coisas depois de ter chamado um método Release e Free... :blink: O resutado dos dois é o mesmo: destruir seu form, o que já implica em fechá-lo e sumir com ele do mapa. Logo parece estar funcionando, mas em uma condição instável. Outra coisa, use apenas um dos dois métodos, e preferencialmente o Release. Abraços
-
Eder, sugiro que você localize o pacote ZComponent.dpk abra e compile e instale ele. (use a opção File->Open) o ZCore é só parte do pacote. Ele é referenciado por ZComponent.dpk o qual, também, contém a chamada à unit que fará o registro dos componentes - ZComponentReg.pas. Abraços
-
(Resolvido) Conseguir valor da diferença entre datas
pergunta respondeu ao K!ko de Micheus em Delphi, Kylix
K!ko, mas já não foi isso que dissemos... :huh: Apenas sugiro que você utilize Date. Now, retorna a hora agregado e você terá um resultado fracionário. Se você leu o post que mencionei, lá eu digo: o tipo TDateTime (que é na verdade um Double) então, é importante que você não utilize a parte fracionária (correspondente à horas). Mas, se você preferir utilizar uma variável inteira para armazenar a quantidade dias, faça assim: atraso := Trunc(data_final - Date); em teoria você não precisa nem declara data_atual... (mas não sei se você utiliza em outro ponto do código) Abraços -
jhonatas araujoficou muito estranha toda esta sua lógica com os forms. Como mencionou o colega Duduh_Capixaba, esta sua tela de login é um tanto "diferente". Eu acredito que você queira é se referir a uma tela de Splash, já que telas logins são utilizadas justamente para fazer uma validação do usuário antes que ele possa acessar o sistema, de modo que não faz sentido que ela feche sozinha e o sistema "entre no ar". Veja se esta sugestão funciona de acordo com o que você espera. No projeto: program Project1; uses Forms, Controls, Unit1 in 'Unit1.pas' {Form1}, // tela de login Unit2 in 'Unit2.pas' {Form2}; // tela principal {$R *.RES} begin Form1 := TForm1.Create(nil); try Form1.ShowModal; finally Form1.Release; end; Application.Initialize; Application.CreateForm(TForm2, Form2); Application.Run; end. no seu Form1 (tela de "login"): uses Unit1; ... {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin Tempo := 5; Label1.Caption := IntToStr(Tempo); // deixar o label invisível não faz muinto sentido // já que você atualiza o valor dele, melhor mostrá-lo // Label1.Visible := False; end; procedure TForm1.Timer1Timer(Sender: TObject); begin Tempo := Tempo - 1; Label1.Caption := IntToStr(Tempo); if Tempo = -1 then ModalResult := mrOK; // mrOk na unit Controls end; end. Esta atribuição à ModalResult fará com que a tela aberta em modo modal, seja fechada. Abraços
-
(Resolvido) Organizar por ordem alfabetica
pergunta respondeu ao charles_1976 de Micheus em Delphi, Kylix
se este dataset que está em uso é o mesmo que será utilizado para emissão do relatório, já não deveria estar listando os membros de forma ordenada, já que supostamente está ordenado pelo nome do membro (index=indnome)? se a resposta a pergunta anterior for sim, então acredito que a resposta a esta pergunta seria, não. mas, supondo que a resposta seja não, então você tem que usar sim um componente TQuery, configurar a propriedade DatabaseName e escrever o código SQL na respectiva propriedade. Esta instrução SQL seria algo como: SELECT * FROM membros ORDER BY nomeobserve que seria conveniente no lugar do "*", citar apenas o nome dos campos que serão utilizados. Abraços -
(Resolvido) Conseguir valor da diferença entre datas
pergunta respondeu ao K!ko de Micheus em Delphi, Kylix
K!ko, parece que você não testou o que o colega Denis Courcy lhe sugeriu, pois é exatamente o número de dias que lhe será retornado! Se tiver dúvidas do porque, dê uma olhada na explicação que fiz neste post; Abraços -
biakeffer, baseado nesta sugestão que o colega Denis Courcy, talvez este tópico possa lhe ler útil. Abraços
-
reunix, O Paradox não fornece muitos recurso em termos de SQL, logo não tem funções de tratamento de datas como, por exemplo,DateDiff. Como você precisa utilizar o campo meses que está cadastrado no registros, acredito que o meio mais simples seria estimar o período baseado na média de 30 por mês. Assim, a consulta para as datas inferiores a data atual menos a quantidade de meses cadastrada ficaria: Operações.Sql.Add('Select * from operacoes') Operacoes.Sql.Add('where data < (Date -(30*meses))');Veja se isto lhe atende. Uma alternativa a ser avaliada, criar um campo para data de término do emprestimo em sua tabela - caso em que você conseguiria maior precisão na sua consulta, já que esta data de término seria inicializada via programação ao gravar o registro. Abraços
-
vms, que tipo de formatação você utiliza então com este RichEdit? Porque tá parecendo que você não faz uso de formatação alguma e, daí, talvez fosse mais interessante utilizar um TMemo ou então, habilitar a propriedade PlainText (True).
-
Provavelmente você utiliza um campo calculado no dataset para mostra vlrtot no DBGrid (só para confirmar...). Quanto a mostrar no TEdit, o procedimento poderá ser feito de duas maneiras: - a que já mencionei, em que você percorre todos os registros do dataset ligado ao DBGrid somando o campo vlrtot e atribuindo o resultado ao seu TEdit através da conversão para texto (pode ser via função FloatToStr ou FormatFloat). - outra, seria utilizando um componente TQuery (supondo que você utilize os componentes da paleta BDE) para executar um SQL do tipo SUM. Assim, você obtém a totalização apenas executando a query (talvez a mais simples). Mas é importante saber se você utiliza algum tipo de filtro para mostrar os dados no seu DBGrid, pois este filtro terá que ser aplicado à instrução SQL para obtenção do resultado correto. Diga-me que opção você prefere, e eu tento lhe explicar como implementá-la. Informe também o nome do dataset ligado ao DBGrid, se ele está em um datamodule - coisas necessárias para uma exemplificação menos genérica. você diz fazer isto no DBGrid? Tipo, você utiliza o DBGrid para edição dos dados?Supondo que seja, eu teria a oferecer duas opções: - você digitar o código e mostrar em outro campo (lookup) a descrição; - você selecionar diretamente a descrição de uma lista. do mesmo modo, diga-me o que prefere. Abraços
-
Renatosky, este último post poderia ser considerado um UP - e eles são proibidos pelas regras do forum. ;) Este parece não será um "problema" muito fácil de resolver. Se você colocar um TEdit no seu form principal, observará ao abrir um de seus forms Child, que ao teclar TAB em um campo deste form, o foco será movido para o Edit colocado no form principal. E isto ocorre independente de questões como uso do KeyPreview. Abraços
-
(Resolvido) Copiar texto exibido no Memo
pergunta respondeu ao Aleksander de Micheus em Delphi, Kylix
Aleksander, como tinha dito, era um exemplo simplista - não estava certo do que você realmente queria - agora ficou mais claro. :blush: Façamos uso da mensagem EM_GETFIRSTVISIBLELINE. Ela retorna o índice, baseado em 0 (zero), da primeira linha visível. O exemplo ficaria assim: var Idx, IdxFinal: integer; begin Memo2.Lines.Clear; // limpa memo2 Idx := Memo1.Perform(EM_GETFIRSTVISIBLELINE, 0, 0); IdxFinal := Idx +10; while (Idx < IdxFinal) and (Idx < Memo1.Lines.Count) do begin Memo2.Add(Memo1.Lines[Idx]); Inc(Idx); end; end; Abraços -
lucas, não sei se seria a melhor maneira, mas é a que eu usaria: utilizaria a função Meio (Mid, se em Inglês). Assim, em cada uma das caixas de texto, colocaria na Origem do controle. A sintax é Meio(<campo>;posição;qtd):caixa 1) =Meio([<nome campo>];1;1) caixa 2) =Meio([<nome campo>];2;1) caixa 3) =Meio([<nome campo>];3;1) ... caixa 7) =Meio([<nome campo>];7;1) Veja se ajuda. Abraços
-
Veja se esta apostila lhe ajuda a entender o que são as tais 3 camadas: Apostila de Delphi sobre 3 Camadas (é bem simples, mas pareceu-me explicar) Como você já deve ter lido antes, você achará informação a este respeito procurando por MIDAS. Veja se estes artigos lhe auxiliam (citam o D5, mas são perfeitamente aplicados ao D7, p.e.):- Programação Distribuída no Ambiente Delphi 5 utilizando tecnologia MIDAS - Delphi 5 e a Programação Distribuída Usando OLE e COM - Aplicação Multi-Camadas - em 3 partes (com Interbase) - 3 Camadas (ref. forum ActiveDelphi)
-
(Resolvido) Rolar o grid com o scroll do mouse
pergunta respondeu ao Vivendo&Aprendendo de Micheus em Delphi, Kylix
Este exemplo é baseado na mesma filosofia de um código que postei há algum tempo. Entretanto, adaptado a situação proposta: - Procedimento para evento declarado no form principal; - Uso apenas por forms que contenham DBGrid; Faça esta codificação no form principal: type TFormPrincipal = class(TForm) private procedure AppEventsMessage(var Msg: TMsg; var Handled: Boolean); end; ... procedure TFormPrincipal.AppEventsMessage(var Msg: TMsg; var Handled: Boolean); var Sentido: SmallInt; begin // primeiramente verificamos se é o evento a ser tratado... if Msg.message = WM_MOUSEWHEEL then if ActiveControl is TDBGrid then // *** <=== AQUI você testa se classe é TDBGRID begin Msg.message := WM_KEYDOWN; Msg.lParam := 0; Sentido := HiWord(Msg.wParam); if Sentido > 0 then Msg.wParam := VK_UP else Msg.wParam := VK_DOWN; end; end; // no evento OnCreate do form principal procedure TFormPrincipal.FormCreate(Sender: TObject); begin ... Application.OnMessage := AppEventsMessage; end; Caso você venha a querer processar este evento para componentes tipo lista (TComboBox, TListBox, ...), basta que você adicione estas classes ao teste, como segue: ... if (ActiveControl is TDBGrid) or (ActiveControl is TListBox) or (ActiveControl is TComboBox) then ... Abraços -
(Resolvido) Copiar texto exibido no Memo
pergunta respondeu ao Aleksander de Micheus em Delphi, Kylix
Aleksander, de uma forma simplista, usando a informação que você passou, bastaria que você copiasse as 10 linhas como você mesmo disse. A propriedade Lines é um objeto do tipo TStrings. Assim sendo, basta indexar as 10 primeiras linhas do seu memo1. Algo assim: var Idx: integer; begin Memo2.Lines.Clear; // limpa memo2 Idx := 0; while (Idx < 10) and (Idx < Memo1.Lines.Count) do begin Memo2.Add(Memo1.Lines[Idx]); Inc(Idx); end; end; Dê uma experimentada e veja se era isso. Abraços -
Como dar um Update em uma tabela comparando o mesmo campo de 2 bancos
uma questão respondeu Micheus em SQL Server
João, para fazer este update com o objetivo que você menciona, parece-me que deveria estar utilizando o database DBGestao_Recife_Centro na cláusula WHERE. Porém, nela você utiliza DB_Recife_Centro. Dê uma conferida no seu SQL. -
Dante, acho que você consegue isto através de um SELECT INTO. Dê uma olhada na sintaxe do comando - ref. msdn - SELECT Ficaria algo como: SELECT * INTO tbl_bkup_cont FROM TBL_TMP_MENS_CNTA_RASCUN Porém, que me eu lembre, você estaria copiando apenas estrutura e dados. Índices e qualquer outra coisa estaria fora.
-
Shariath Dagon, veja se seu problema não está relacionado à configuração dos flags em CreateFile(). Voce usou: ofn.Flags = OFN_HIDEREADONLY | OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST; mas, me parecem estranhos para a criação de um arquivo, que muito provavelmente não vai existir e se existir o provável é que se reescreva ele. Experimente utilizar apenas: OFN_OVERWRITEPROMPT Veja o que consta da documentação sobre OFN_FILEMUSTEXIST (ref. msdn - OpenFile structure): Specifies that the user can type only names of existing files in the File Name entry field. If this flag is specified and the user enters an invalid name, the dialog box procedure displays a warning in a message box. If this flag is specified, the OFN_PATHMUSTEXIST flag is also used. This flag can be used in an Open dialog box. It cannot be used with a Save As dialog box. Abraços
-
Shelly ou Michelle, você espalhou alguns posts por aí heim?! :D Acho que achei o "fio da meada" a partir deste post (ref. CodeGuru). Nele um cara cita o kit de desenvolvimento fornecido pelo fabricante do semiconduto - Cypress Semiconductor. Resumindo, neste link você pode fazer o download de USBDevStudio_1703.exe (caso já não o tenha feito). Após instalado, o que você precisa estará basicamente na pasta C:\...\Cypress\USB DevStudio\CyAPI. Tem uma pasta Inc onde você encontra o CyAPI.h e a parta Lib, onde você encontra duas sub-pastas: BC6 (Borland C) e VC6_7 (Visual C) - e nelas a biblioteca CyAPI.lib. Para resolver o problema com a compilação, ou você vai copiar os dois arquivos para os respectivos diretórios Inc e Lib do seu C ou você configura o caminho para eles no seu projeto. Abraços
-
Eder, você não vai encontrar. Sugiro que você avalie o uso dos componentes da paleta ZeosLib. Atualmente a versão é 6.6.2RC (Release Candidate - D5, D6, D7, D2005, BSD2006), mas esta versão só dá suporte a partir do Delphi 5. Voce até poderia tentar instalar no seu Delphi 4 - caso não tenham havido grandes mudanças entre as versões, você conseguirá instalá-lo sem problemas (esta versão seria preferível). Suporte ao Delphi 4, é encontrada em uma versão anterior e estável é a 6.1.5 Stable (D4, D5, D6 e D7). Ela contém 2 patchs. Assim, você baixa todos os 3 zips, descompacta o principal (stable), depois descompacta o path1 seguido pelo path2. A grande vantagem em utilizar os componentes Zeos é facilidade na portabilidade de sua aplicação para outro banco de dados para o qual ele dê suporte (MySQL, PostgreSQL, Interbase, Firebird, MS SQL, Sybase, Oracle and SQLite) - com componentes da paleta Interbase você fica restrito à Intebase e Firebird. Pense a respeito. ;) Abraços
-
Marcelo, não deixe de informar qual o banco de dados que está utilizando e o componente de acesso aos dados. Para não haver confusão... Se seu objetivo é apenas mostrar o total na tela, e não guardá-lo no banco de dados, então você não vai utilizar um componente TDBEdit mas sim um TEdit. Se tiver dúvida quanto a diferença entre um e outro, é porque não estão lhe ensinando direito no curso que acaso faça. Se não fizer, é melhor que tente conhecer melhor o Delphi para saber exatamente o que deseja tirar dele. Veja este post do Jhonas - tem uns links interessantes. Quanto a somar a coluna valor total do DBGrid, vale o que não me canso em repetir: O DBGrid apenas mostra os dados existentes no dataset a ele ligado. Assim, se quer somar a coluna valor total, faça um loop onde você totaliza a coluna (campo do seu dataset) valor total em uma variável e depois a atribui ao seu edit. Se você informar o componente que utiliza, seu nome e o nome do campo envolvido, dá para exemplificar sem lhe confundir mais. Abraços
-
Acontece que naquele exemplo, basta desconectar um Cliente e ele desconecta todos. Logo, os Clientes todos são desligados.... não consegui implementar! Bom, então tem algum errinho que não percebi. Verificarei e logo que puder lhe informo.José, eu já corrigi o demo anexo ao tópico. Era coisa simples. Ocorreu que inicialmente eu testava apenas usando Server e 1 Client, depois adaptei e não percebi que havia esquecido de ajustar a verificação da lista antes de desabilitar a caixa de combinação. Assim, no exemplo o código deveria estar assim: procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject; Socket: TCustomWinSocket); begin // quando o cliente disconecta, ele é eliminado da lista ComboBox1.Items.Delete(ComboBox1.Items.IndexOfObject(Socket)); // verifico maior que 1 porque o primeiro item da lista é "(Todos os Client's)". Então, // apenas se houver 2 itens na lista é que teremos um client conectado AtualizaEstado(ComboBox1.Items.Count > 1); end; Abraços
-
(Resolvido) Organizar por ordem alfabetica
pergunta respondeu ao charles_1976 de Micheus em Delphi, Kylix
charles_1976, como você deve ter percebido, uma boa opção para fazer consultas mas complexas, e mesmo simples, como estas é através de instruções SQL. Inicialmente, você terá que estudar um pouco sobre os recursos do SQL (SELECT, INSERT, UPDATE, ...); A seguir você deve saber que para utilizar estas instruções SQL você terá que fazer uso de componentes que lhe permitam utilizá-las. Pelo que você comentou nos posts, você está trabalhando com componentes da paleta BDE (provavelmente TTable), então você terá que fazer uso do componente TQuery e na propriedade SQL você colocar as instruções (estas que os colegas já lhe sugeriram) As instruções SQL do Paradox são um pouco restritas. Procure por LOCALSQL.HLP em C:\Arquivos de programas\Arquivos comuns\Borland Shared\BDE. Neste seu post, que citei, parece-me que você possui um índice para a tabela membros, chamado indnome. Se isto procede, então você deve apenas selecionar este índice para sua tabela e o relatório deveria sair na ordem, de acordo com o índice. Abraços -
Simples mas bem sacana. Por que é que os dados que são armazenados no banco, teriam alguma relação com a sintaxe da linguagem utilizada para criar ele? :wacko: