
Micheus
Veteranos-
Total de itens
3.189 -
Registro em
-
Última visita
Tudo que Micheus postou
-
iglesio, saiba que é possível editar a sua mensagem postada anteriormente. Não é necessário postar outra para modificar o texto. Ok?! quanto a esta questão, você poderia utilizar uma query auxiliar para testar a existência do código ao sair do campo onde ele é digitado. Tipo assim:- na query auxiliar você cria o código de modo que passará como parâmetro o código digitado. Isto pode ser ferito no evento on create do seu form: procedure TForm1.Form1Create(Sender :TObject); begin with Query1 do begin SQL.Clear; SQL.Add('SELECT COD_SUS FROM TAB_SUS WHERE COD_SUS = :COD'); end; end; - o teste você faz no evento OnExit do componente onde você digita o código:procedure TForm1.DBEdit1Exit(Sender :TObject); begin with Query1 do begin Close; Parameters.ParamByName('COD').AsString := DBEdit1.Text; Open; if not EOF then begin ShowMessage('Este código já está cadastrado'); DBEdit1.SetFocus; Abort; end; end; end; Acho que seria algo mais ou menos assim. []s
-
Inserir Função Dentro Do Cadastro De Funcionários
pergunta respondeu ao Tekmicro de Micheus em Delphi, Kylix
Se as ligações estão corretas, será que você está abrindo o dataset (table ou query) definido no lockup antes que a tela seja mostrada? Normalmente esta é a causa do componente ficar desabilitado. -
Inserir Função Dentro Do Cadastro De Funcionários
pergunta respondeu ao Tekmicro de Micheus em Delphi, Kylix
Não seria o caso de utilizar um TDBLookupComboBox onde você setaria as propriedades: - Datasource => para o dataset de funcionários - DataField => campo referentes a função do funcionário(algo como COD_FUNCAO) (vem do DataSource). - ListSource => dataset referente a tabela de funções - ListField => o campo de descrição da função (vem do ListSource) - KeyField => o campo de relacionamento (normalmente o mesmo nome que o do DataField) entre a tabela funcionarios e função (vem do ListSource) -
juniorboll, como não apareceu nenhuma sugestão até agora, vou tentar dar uma. Veja se ajuda. Supondo que não exista informação que possa vir de outro lugar, eu criaria uma tabela para armazenar as cidades com os campos: COD_CIDADE(INTEGER) e DSC_CIDADE(VARCHAR(<nn>)); e outra tabela para armazenar os valores: COD_CIDADE(INTEGER), DAT_REGISTRO(DATE) e VLR_TOTAL(NUMERIC).Os tipos podem variar dependendo do banco que você vai utilizar para armazenar os dados. você pode ter uma tela para cadastrar as cidades e outra para os valores, onde nesta última você selecionaria a cidade de uma lista (lockup), informaria a data (poderia ser automáticamente obtida) e o valor. Bom, será um único relatório agrupando os dados desta maneira ou você deverá selecionar, além do período, o tipo: Semanal, Mensal ou Anual ?Este semanal, é em relação ao início do mês ou da semana em questão? Explico: - em relação ao início do mês seria de 1 a 7, 8 a 14, 15 a 21, ... - em relação a semana seria, por exemplo, neste mês: 1 a 5, 6 a 12, 13 a 19, ... []s
-
Provavelmente sim. quando você instala o Delphi em seu computador as bpl's também são instaladas no c:\Windows\System32.Na verdade, este é um recurso interessante, que muito se "ouve" falar em alguns forum's - modularazação do programa. Tem seus prós e contras. Será que você não alterou a opção em seu projeto responsável por este efeito? Dê uma olhada neste link, que fala sobre o uso de pacotes para modularizar aplicações, com atenção à 3ª imagem onde é apresentado o item que pode estar marcado em seu projeto para que opere nesta modalidade. A parte inicial do artigo está neste link. []s
-
A estrutura de um arquivo ini é a seguinte: [Nome_Sessão_1] Nome_Variaável_1_1 = Valor_Variável_1_1 ... Nome_Variaável_1_n = Valor_Variável_1_n [Nome_Sessão_2] Nome_Variaável_2_1 = Valor_Variável_2_1 ... Nome_Variaável_2_n = Valor_Variável_2_n Gravar para um arquivo ini:var Arq : Tinifile; begin Arq := Tinifile.create('nome_arquivo.Ini'); Arq.WriteString('Nome_Sessão','Nome_Variavel', Edit1.text); Arq.Free; end; Ler do arquivo ini:var Arq : Tinifile; begin Arq := Tinifile.create('nome_arquivo.Ini'); // na linha seguinte, o '' será o valor default, caso variável não exista no arquivo Edit1.text := Arq.ReadString('Nome_Sessão', 'Nome_Variavel',''); Arq.Free; end;
-
pankwood, acho que seria algo assim. Se eu estiver errado, alguém me corrija: Antes da versão 6 do Intebase, utilizando três comandos:// cria o campo temporário para salvar valor atual ALTER TABLE Sua_Tabela ADD obs_cadcli_tmp BLOB SUB_TYPE 1; // salva o valor atual UPDATE Sua_Tabela SET obs_cadcli_tmp = obs_cadcli; // elimina o campo com o tipo indesejado ALTER TABLE Sua_Tabela DROP obs_cadcli; // recria o campo com o novo tipo ALTER TABLE Sua_Tabela ADD obs_cadcli BLOB SUB_TYPE 1; // atualiza os dados do campo desejado UPDATE Sua_Tabela SET obs_cadcli = obs_cadcli_tmp; // elimina campo temporário ALTER TABLE Sua_Tabela DROP obs_cadcli_tmp; A partir da versão 6 do Intebase, com apenas um comando:ALTER TABLE Sua_Tabela ALTER COLUMN obs_cadcli TYPE BLOB SUB_TYPE 1 refertência: Borland Developer Network(link - Column Data type changes)
-
Adicione um separador à esquerda na barra e calcule a largura dele (width) no evento OnResize do form (acho que apenas neste evento é suficiente), tipo: ToolButton6.Width := (ToolBar1.Width -(ToolBar1.ButtonWidth *5)) div 2; onde ToolButton6 é o separador no exemplo. Lafey, daria para adicionar um ScrollBox (paleta Aditional) ao seu form e dentro dele colocar o Image (com align = alClient). No código teria algo assim:// onde há a abertura do arquivo de imagem procedure TForm1.Button1Click(Sender: TObject); begin if OpenPictureDialog1.Execute then begin Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName); // ajusta o scrollbox para o tamanho da imagem carregada ScrollBox1.HorzScrollBar.Range := Image1.Picture.Width; ScrollBox1.VertScrollBar.Range := Image1.Picture.Height; end; end; []s
-
Use um QRExpr e na propriedade expression colocar algo como: IF(DataSet.NOME_CAMPO = 'P', 'PARCIAL', IF(DataSet.NOME_CAMPO = 'A', 'ABERTO', '???')) []s
-
Isto não estaria apenas ocorrendo no ambiente de desenvolvimento? Tipo, se você executar o programa gerado pelo delphi (fora dele) provavelmente não ocorrerá o erro. Já testou?
-
É isso ai. Só com vontade conseguimos mudar, fazer, aprender,... Etamos ai, ou melhor aqui. ;) []s
-
É que minha resposta anterior não está 100%. Quando você usa ShowModal, a janela é mostrada e "fica num loop" até que você a feche (close) ou atribua um valor a ModalResult. Só então o fluxo do programa continua a ser executado a partir da linha posterior ao ShowModal. Já quando você utiliza simplesmente Show, a janela é apresentada e o fluxo do programa não é desviado para a mesma (não tem o tal loop); Assim a linha seguinte é logo executada - por isso seu form abre e fecha. Se cada vez que você fechar a janela você quizer que ela seja eliminada, então você pode utilizar o evento OnClose:procedure TForm4.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; end; Com esta ação ao chamar o procedimento Close ou clicar no X superior, a janela será eliminada da memória. Só que a variável permanecerá apontando para um endereço, agora, não mais válido. Então, se você utilizar apenas a variável definida na unit do form para mostrá-lo, acrescente isto ao evento OnDestroy:procedure TForm4.FormDestroy(Sender: TObject); begin Form4 := Nil; end; Se ouver alguma possibilidade de você reutilizar a janela, ou seja, apenas fechá-la mas não eliminá-la, então talvez o que deva ser modificado é a forma de criação da mesma:procedure TForm1.Button8Click(Sender: TObject); begin if not Assigned(Form4) then Form4 := TForm4.Create(Self); Form4.Show; end; Assim, a janela será criada apenas uma vez. Nas demais chamadas a mesma será apenas apresentada. Este caso servirá igualmente para esta situação e a anterior - sem risco de erros de acesso a memória. Acho que é isto
-
sponte, parece que você criou as classes mais ou menos assim: TContribuinte | +----------+----------+ | | TPessoa_Fisica TPessoa_Juridica Agora ficou mais claro. Como você está utilizando como classe base de listaContribuinte um TList, o valor retornado por listaContribuinte.items[indiceatual] é um ponteiro; No seu caso o endereço de uma instância da classe TPessoa_Fisica, logo realmente tratava-se de um type-cast, de modo a você tratar o endereço retornado como sendo o da classe citada. Acho que não tenho não. Apenas, tente não economizar tanto nas palavras o que é comum no chat pode ser ruim num forum - quanto mais detalhes (sem excessos), melhor. Eu particularmente, tenho dificuldades em entender um texto muito abreviado, sem as devidas pontuações. Algumas veze é confuso saber se a pessoa está questionando ou afirmando uma coisa. []s
-
mais ou menos isto. Acho que se você tem em mente o tipo de projeto que deseja desenvolver, e não sabe quase nada da linguagem, primeiro seria interessante procurar por algo (tutoriais de projetos) que faça mais ou menos o que você deseja. Assim, você vai começar a dar atenção às classes de objetos (componentes) que você precisará utilizar para o que você deseja fazer. Veja bem, não sei o nº certo de classes oferecidas pelo Delphi, mas tenha certeza que são muitas e nem todas são utilizadas num único projeto. Assim, se você primeiro resolver conhecer todas, linha por linha, vai demorar muito para você desenvolver alguma coisa. Eu entendo que você quer compreender do que se trata cada coisa no código, provavelmente porque é seu contato inicial com o mesmo. Então sugiro que dê uma olhada nestes link's: => Script Brasil - Apostilas => Apostilando.com (tem que se registrar - grátis) Neles, você encontra algumas apostilas para download. Comece com o básico sobre a linguagem, com ele você vai começar a entender as questões relacionadas a POO (Programação Orientada a Objetos), as definições das classes, métodos, atributos... Quando você programar em Delphi, poderá desenvolver projetos que envolvam abordagens um pouco diferentes umas das outras: desenvolvimento de aplicações, componentes, "plug-ins", mas a base de tudo será bem parecida. Se algum outro colega tiver mais alguma dica de tutoriais e apostilas dêem uma força (a grande maioria de nós também foi auto-didata) []s
-
Gelson, se você não encontrar opção melhor, dê uma olhada neste post. você pode utilizar a função para obter o player padrão para a extensão da mídea desejada e daí executá-lo. Se utilizar o exemplo, faça alguns testes, pois nos que eu fiz, quando utilizando nome de arquivos com espaços foi necessário adicionar áspas duplas para que o arquivo fosse corretamente iniciado. Ex.: ShellExecute(Handle, 'open', PChar(ExePath), '"M:\Video clip\Outcast - Hey ya-1.mpg"', nil, SW_SHOWNORMAL); Dê também uma olhada no help sobre o ShellExecute. Note que se você quizer que o player seja iniciado escondido, deve alterar o último parâmetro para SW_HIDE. []s
-
bom, não vai dar para explicar tudo.1) edit.text := => Isto indica que a propriedade Text do componente Edit receberá algum valor. E este valor deverá ser um string; 2) listaContribuinte.items[indiceatual] => Aqui você estará obtendo um item da lista ListaContribuinte. O índice para o item na lista é definido pelo valor de IndiceAtual; 3) Pessoa_fisica(listaContribuinte.items[indiceatual]).nome => Aqui a coisa já complica. O que é Pessoa_fisica? A forma como está escrito este trecho é um pouco estranho. Parece que é um type-cast do conteúdo retornado por items, mas como esta propriedade normalmente retorna um string, não dá para entender o uso do .nome, que aparentemente é um atributo. ???
-
WKC, neste post tem um link para uma apostila que, entre outras coisas, também fala sobre TUpdateSQL.
-
Marcos-rj, a diferença básica é que abrindo o form no modo modal, você não consegue acessar outra janela que esteja embaixo dela na sua aplicação - assim como ocorre com as caixas de diálogos padrão (que são modais). você tem que fechar esta janela para acessar outra. Não dá para pular de uma para a outra.
-
Se não me engano tem uma propriedade RequestLive que deve ser TRUE, mas acho que ainda assim, pode vir a depender do banco de dados utilizado.
-
Kindelis, a idéia é esta mesmo. Você apenas deve ter em mente que o que está aparecendo no DBGrid provém do DataSet ligado a ele. Assim, este é o "cara" que você deve utilizar para controlar o loop. Supondo que seja TabItemVendas - Ex.:... TabVendas.First; while not TabItemVendas.EOF do begin // aqui deve ser posicionada a tabela de estoque no item adequado TabEstoque.Edit; TabEstoqueQTD.Value := TabEstoqueQTD.Value +TabItemVendasQTD.Value; TabEstoque.Post; // após restituida a quantidade o item da venda pode ser eliminado TabItemVendas.Delete; end; ...Observe que o delete eliminará o registro atual e a TabItemVendas será prosicionada no registro que antes seria o próximo registro (por isso não utilizamos o Next), de modo que ao final da exclusão do último item vendido chegaremos ao EOF. Reforço que os itens vendidos visualizados no dbgrid vem de DBGrid.DataSource.DataSet (no ex. TabItemVendas). Assim, o delete neste dataset resultará no que você pretende. []s
-
você está lembrando de inicializar a variável do form com nil. Se é esta abordagem sugerida pelo Churc que você utilizou?
-
Thales, você está falando em smooth line (linha suave) ou anti-alias. Tem um código específico para linhas neste link. Mas se você estiver mexendo com mais recursos gráficos, que não apenas linhas, dê uma olhada neste link, é um artigo muito bom sobre o uso da biblioteca GDI+. O link indicado para o download da GDI+ está "furado", utilize este link Se utilizar outro sistema operacional anterior ao XP, a GDIPlus.dll pode ser baixada deste link. []s
-
sponte, está confuso. Dá para explicar melhor?
-
natalie, veja se o conteúdo desta apostila (não é minha) lhe ajuda --> link
-
Em outro forum, acompanhei alguns questionamentos como este e foram citados estes componentes: - DSPack link - VideoCap link []s