Churc
Veteranos-
Total de itens
1.198 -
Registro em
-
Última visita
Tudo que Churc postou
-
Opa Hmm olhando seu código o erro aparenta ser o seguinte, no subitems[4] você faz o valor do produto vezes a quantidade e joga no listview formatando como dinheiro: Quantidade := StrToint(edtQtde.text) ; Valor := DblValue(edtvlr.text) ; Valor_T := valor * quantidade ; ListItem.SubItems.Add(formatfloat('#,##0.00',Valor_T)); Certo, então se o valor de cada produto é 100 e a quantidade é 3 então aquele subitem vai receber formatado 300,00... Agora o problema é que um valor Real/Double é de alta precisão mas não suporta vírgulas como separação apenas pontos e quando você faz um loop pra soma total, ele da um "is not a valid floating point value" por causa da vírgula, se por exemplo ao invés de 100,00 fosse 100.00 ele aceitaria numa boa... Não sei se existe alguma função específica para isso, mas se ninguém souber uma maneira de se resolver isso através de funções do Delphi podemos criar uma função para você para converter valores formatados como dinheiro para ter suporte a soma de alta precisão (Real/Double); abraço
-
Opa Esta combinação de teclas é chamada de Hotkey Da uma olhada nestes tópicos: Tópico 1 Tópico 2 Tópico 3 abraço
-
Opa Ai fica difícil saber em amigo, pode ser váaaarias coisas... :) Primeiro, a DLL não ter compatibilidade com Windows 2003, algo na API que mudou ou algo que precisa ser incrementado...se você tem certeza de que o erro é na DLL a única maneira de corrigir é tendo o código fonte dela e modificar, testar para dar suporte a tal versão do windows, ou para pelo menos ver se o erro é nela mesmo dando um debug por exemplo... abraço
-
Opa Valeu pessoal! :D Muito boa as dicas vou testar! Abração!
-
Opa Então fiz os testes aqui, funcionou perfeito tanto em um HD IDE quanto em um HD SATA/RAID... A única coisa que mudei foi que ao invés de usar Scsi0: eu alterei para C: mas lembrando que você vai precisar ter privilégios administrativos no Windows XP ou seja, o usuário no Windows NT/XP/2003/Vista que rodar o seu programa vai ter que ser administrador senão não retorna nada... Exemplo de uso... Function GetWindowsDir: String; var chBuffer: array[0..MAX_PATH] of Char; begin GetWindowsDirectory(chBuffer, MAX_PATH); Result := IncludeTrailingBackslash(StrPas(chBuffer)); end; Function GetSysDrive: String; begin Result := ExcludeTrailingPathDelimiter(ExtractFileDrive(GetWindowsDir)); end; Na parte do código que tem Scsi0 você altera conforme abaixo... Isso somente na parte que contém Scsi0 já na parte para Win9X/ME você mantem o Smartv conforme explico mais abaixo o porque... hDevice := CreateFile(PChar('\\.\' + GetSysDrive), ... Isto vai forçar a função pegar o Serial do HD principal, ou seja, da onde o Windows está instalado, normalmente é C:\ Eu testei aqui se formatando um HD iria alterar o Serial e não, realmente não muda pois o Serial pego é através do Hardware e não do Software(GetVolumeInformation)... No artigo está escrito Envie um email para o autor que ele te retorna este arquivo Smartvsd.vxd pois vi relatos dealgumas pessoas terem pego na internet e por problemas de versão ou sei lá não funcionava... Bom de qualquer forma vou fazer mais testes né, afinal com a parte de licença do programa não se brinca auhahua abraço
-
Opa Pra que a galera possa te ajudar, especifique o banco de dados que está usando e os componentes de acesso, e se por exemplo for paradox já que como você mencionou você está aprendendo, diga se está usando query ou table... abraço
-
Opa Ai vai um exemplo bemm simples de como fazer isto... Se tiver problemas pra adaptar ao seu código poste aqui... http://www.4shared.com/file/13436575/6c025fcf/piscaedit.html abraço
-
É isto mesmo Churc e o meio de impedir que isso ocorra é salvar a posição do cursor (propriedade SelStart do edit) antes da alteração e ajustar sua posição caso seja realizada alguma alteração no sentido de incluir os caracteres de pontuação da formatação. Tem outra coisa em questão ainda, para definir o alinhamento do edit para outra que não a esquerda, faz-se necessário manipular a criação do componente, visto que é necessário definir em seu estilo que tráestá-se de um componente multi-linha, bem como o tipo do alinhamento (ver comentário no help Win32API - CreateWindow - EM_RIGHT). Disto resulta que a melhor saída seria realmente utilizar/criar um componente para este fim (minha opnião). Em meu componente (mencionado anteriormente), eu utilizo o evento OnKeyPress, mas é um controle chato de ser feito (pelo menos ainda não consegui deixar redondo). Deve ser observado também, a questão de modificar a propriedade Text, como resultado do processamento, pois resultará na ocorrência de um evento OnChange (se não me falha a memória). Neste caso, faz-se necessário ainda salvar e remover o evento (atribuir nil a OnChange) e restaurá-lo depois do processamento - isso no caso de haver qualquer processamento no referido evento. Abraços Opa Então Micheus, sobre o SelStart parece ser uma boa, se der pra salvar a posição do cursor então acredito que de pra fazer o que ele quer em eventos como onKeyUp... Eu também acho que a melhor maneira deve ser criar um componente para isto, ou dar um inherit de um... pode ser que se der um override no create params dele de para ajustar o EM_RIGHT, tem que ver onde ele fica, Exstyle? abraço
-
Opa Então cara eu tenho este problema também, alias atualmente é o maior problema que tenho auhahuahu, veja só, até hoje não consegui gerar nada que seja estático da máquina, ou seja, algo que se formatar o PC por exemplo, quando for habilitar o programa novamente, ele pegar um Serial que seria identificação do PC e retornar a mesma que era antes, resumindo, um serial único... Um jeito bom é o MAC Address da placa de rede, ele é único mas nem todos os pcs possuem placa de rede... Outra forma é usando informações da BIOS, mas das funções que achei, ou não funcionava no Windows XP ou não funcionava no Windows 98 ou ao testar em várias máquinas dava pau, fora que agora com o Windows Vista com certeza os mtfs da Micro$oft vão mudar os esquemas, resumindo sem sucesso... Que da pra obter eu sei que dá, porque o Microkê aquele programa que da nota ao cantar que alias foi feito em Delphi, eu formato o PC e o serial é o mesmo... ai é só mandar email ou salvar a chave recebida que eu libero o programa denovo... Já passei por várias coisas, por exemplo não sei como mas uma vez em um cliente todos os pcs possuiam o mesmo serial do HD, claro pegando através do GetVolumeInformation, mas seria um Ghost que fez isso? Detalhe que, se você armazena este serial e uma chave a partir do serial em um arquivo no PC, então se o cara fizer um ghost (Clone) você foi crackeado desde que todas as máquinas vão funcionar normalmente... Se você fizer a cada abertura do programa ele checar se o serial gravado bate com o serial pego na hora (isto pra checar se os arquivos não foram copiados de outro pc) então você pode ter problemas de derrepente as informações obtidas mudarem, a menos que seja único o serial ele não mude... isto ainda que se for feito Ghost nada vai adiantar... É algo complicado, impedir que seja crackeado é impossível, senão a Microsoft com milhares de programadores, assim também como grandes empresas como Adobe, etc não teriam seus programas crackeados em menos de 3 dias do lançamento, mass podemos dificultar... Eu estou sem o Delphi em casa mas amanhã no serviço vou testar essa função e te retorno se houve sucesso e como, lá tenho 3 HDs no meu micro um é SATA e vou testar em outros micros também ai vamos ver o que acontece... abraço
-
Opa Tem jeito mais fácil sim, adicione em Uses DateUtils e faça a diferença assim exemplo var iDays: Integer; begin iDays := DaysBetween(Date1, Date2); iDays vai receber o numero de dias entre estas 2 datas, tem várias funções deste tipo exemplo, MonthBetween Vale lembrar que não tenho o Delphi aqui então talvez o nome da função não seja exatamente esta mais use o Ctrl + Espaço pra achá-la rsr abraço
-
Opa Entendi, só que tem um problema, os eventos onKeyUp, onKeyDown, onKeyPress se você manipular o texto digitado o cursor volta para o primeiro caracter, no que atrapalha e não da certo da maneira que você deu como exemplo, agora a não ser que haja como impedir isto... Sei que se fosse "internamente" ou seja, no componente não haveria este problema, agora usando eventos seria "externamente" então vai ocorrer este problema... Usando os eventos externos da pra fazer mais acontece o que eu te falei... Sem dar este problema, eu não sei como te ajudar, espero que o Micheus ou alguém saiba ;) abraço
-
Opa Na biblioteca RxLib possue um componente chamado TCurrencyEdit que faz isto que você quer, não sei se faz "exatamente" como você quer, mas é um Edit que formata o que é digitado em modo de dinheiro (currency), da uma olhada se não for podemos te ajudar com outros métodos... Rxlib Download abraço
-
Opa Se o item que você se refere seria do Explorer ou até mesmo menus seria clHighLight;
-
Ops rsr disfarça Eu passei o Formato do FormatDateTime errado :rolleyes: seria mesmo FormatDateTime('yyyy/mm/dd', SeuValorTDateTime); De qualquer forma segue o que o Micheus falo acho que vai ser melhor rsr abs
-
Opa Eu não tenho experiencia com banco de dados e MySQL mass Se este é o problema, você pode usar por exemplo, se for passar a data como String na consulta seria exemplo: var szDate: String; begin szDate := FormatDateTime('dd/mm/yyyy', SeuValorTDateTime); Assim independente de como venha esse valor, szDate vai ficar no formato dd/mm/yyyy abraço
-
Opa O correto seria unit Unit1; interface uses Windows, Forms, Messages, ShellAPI; Const WM_TRAYICON = WM_USER + 1; type TForm1 = class(TForm) procedure FormDestroy(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private procedure WMTrayIcon(var Msg: TMessage); message WM_TRAYICON; end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caNone; Hide; end; procedure TForm1.FormCreate(Sender: TObject); var NotifyIconData: TNotifyIconData; begin Application.ShowMainForm := False; with NotifyIconData do begin cbSize := sizeof(TNotifyIconData); Wnd := Self.Handle; uId := 0; uCallBackMessage := WM_TRAYICON; uFlags := NIF_ICON or NIF_TIP or NIF_MESSAGE; hIcon := Application.Icon.Handle; szTip := 'Teste de TryIcon'; end; Shell_NotifyIcon(NIM_ADD,@NotifyIconData); end; procedure TForm1.FormDestroy(Sender: TObject); var NotifyIconData: TNotifyIconData; begin with NotifyIconData do begin cbSize := sizeof(TNotifyIconData); Wnd := Self.Handle; uId := 0; uFlags := 0; end; Shell_NotifyIcon(NIM_DELETE,@NotifyIconData); end; procedure TForm1.WMTrayIcon(var Msg: TMessage); var Pt: TPoint; begin if Msg.lParam = WM_RBUTTONDOWN then begin GetCursorPos(Pt); PopupMenu1.Popup(Pt.X,Pt.Y); end else if Msg.lParam = WM_LBUTTONDBLCLK then Form1.Show; end; Quanto aos erros que apareceu pra voce... [Error] Unit1.pas(16): Undeclared identifier: 'WM_TRAYICON' É porque em private estava chamando essa constante e a mesma estava declarada abaixo então ele não a encontrava... coloquei acima de type... [Error] Unit1.pas(39): Statement expected but 'VAR' found procedure TForm1.FormCreate(Sender: TObject); begin // <-- Erro var NotifyIconData : TNotifyIconData; beginQualquer variavel declarada deve estar acima de begin e você estava declarando abaixo de um begin e chamando outro... abraço
-
Opa Vou dar uma olhada, qualquer novidade posta ai e eu também ahuauha valeu Erso abraço
-
Opa Caraca esqueci do CVS, na verdade CVS é um nome que se da a uma tecnologia onde se faz o controle de versões, que é o que exatamente você quer... Eu usei uma vez em uma empresa, mas já estava totalmente configurado no servidor e usava um programa chamado WinCVS para conectar no servidor de controle e postar as alterações, lembro que era possível saber qual parte dos códigos eram diferentes entre duas versões e tudo mais como também fazer anotações, é o que você precisa... Não deve ser fácil, fácil configurar não, deve dar um pouco de trabalho porque até pra postar versões era meio estranho já nem lembro mais, só lembro do "commit" aahuauha Da uma olhada aqui onde tem tudo a parte teórica que você precisa saber sobre CVS... Eu até me interessei também e vou tentar implementar aqui, e assim podemos um ajudar o outro nas configurações certo! O primeiro passo é conseguirmos configurar o Servidor, deve ter no site abaixo... Site oficial do CVS Depois é baixar um programa cliente, existem vários mas acho que o WinCVS é o mais conhecido, e então aprendermos a postar versões e as demais coisas... abraço
-
Opa, auhauh É possível no Firefox criar tipo algo que eu consiga saber a URL que está sendo acessada? Tipo um plugin, addon, extension ou sei lá, que através disto eu consiga saber a URL que está sendo acessada e bloquear, como um filtro? abraçosss
-
Opa Procurei na net e não achei nada sobre também, de qualquer forma, arquivos .tlb são Type Libraries e você as obtem importando atráves de um controle ActiveX... Se você possuir este controle, basta importá-lo utilizando o menu do Delphi: Component - Import Component isto no Delphi 2006 nas demais versões seria Import ActiveX Control... Só um detalhe, se no google não achou nada, boa sorte ahuauha porque se você não tiver este controle que vai saber lá qual é então vai ser bem difícil você consegui-lo... abraço
-
Opa Existe Softwares prontos que já fazem isso, Fisheye, Starteam da Borland e alguns outros, ambos são pagos mas se você procurar no google com certeza deve ter mais alguns que são free... Se eu achar algum eu posto aqui! abraço
-
Opa Apenas complementando o código do Erso, da pra se usar case também ao invés de if case Combobox1.Itemindex of 1: Variavel := 127.00; 2: Variavel := 130.00; 3: ... end; abraço
-
Opa Cara eu não respondi que não da pra entender nada rsr você está falando como se eu tivesse vendo o seu programa, mas que na verdade não estou então não da pra imaginar o que você quer fazer... se você postar esta parte do código e o que quer fazer talvez ajude abraço
-
Inserir E Remover Componentes Em Tempo De Execução
pergunta respondeu ao Alpha-X de Churc em Delphi, Kylix
Opa O código do Erso está perfeito, só que ai você precisa definir na hora de criar o componente um nome para ele... labnovo.Name := 'MeuLabel'; E depois passar no código do Erso o nome do componente que você deseja remover especificando o que você colocou em name... Para evitar que você acesse um componente inexistente e receba na cara um access violation o correto é primeiro checar se ele existe, pode-se até criar uma função específica para isto, caso irá remover vários componentes... exemplo procedure TForm1.FreeCompbyName(const szName: String); var aComp: TComponent; begin aComp := FindComponent(szName); if (Assigned(aComp)) then aComp.Free; end; ai pra remover o componente exemplo FreeCompbyName('MeuLabel'); abraço -
Opa João Carlos, acredito eu que você tenha sido pouco claro, por exemplo, Qual banco de dados você está usando, Firebird? Qual componentes de acesso ao banco você está usando? Acho que assim fica mais fácil a galera te ajudar senão seu tópico capaz que fique vago... abraço