Ir para conteúdo
Fórum Script Brasil

robinhocne

Membros
  • Total de itens

    854
  • Registro em

  • Última visita

Tudo que robinhocne postou

  1. Fiz exatamente igual ao que você me passou mas dá erro nesse TabIndex:....
  2. Cara tá dando esse erro no TabIndex: Fiz desse jeito aqui e ai ele muda O nome do Caption de Observação para Alerta, mas não estou conseguindo tipo colocar a cor nesse caption de Observação e Alerta, Alguém saberia como ? procedure TFrmALunos.Timer1Timer(Sender: TObject); begin inherited; IF CheckBox1.Checked = TRUE THEN begin if ALERTA = true then begin Label1.Visible := true; Label1.Font.Color := clred; ALERTA := FALSE; (TabSheet1.Caption := 'Observação'); end else begin Label1.Font.Color := clYellow; ALERTA := true; (TabSheet1.Caption := 'Alerta'); end; end; end;
  3. Fiz dessa maneira.... Aqui eu fiz colocando um Label, mas gostaria de ajuda para poder fazer no caption da aba de obsercação: Coloquei um Timer procedure TFrmALunos.Timer1Timer(Sender: TObject); begin inherited; IF CheckBox1.Checked = TRUE THEN begin if ALERTA = true then begin Label1.Visible := true; Label1.Font.Color := clred; ALERTA := FALSE; end else begin Label1.Font.Color := clYellow; ALERTA := true; end; end; end; Deixei o Label como falso e depois o chekBox habilita se o usuário querer que fica piscando como alerta: procedure TFrmALunos.CheckBox1Click(Sender: TObject); begin inherited; if CheckBox1.Checked = true then begin timer1.Enabled := true; ALERTA := TRUE; end else begin timer1.Enabled := false; Label1.Visible := false; end; end; Aguardo ajudas.
  4. Olá pessoal, estava querendo facilitar na informação para o usuário, e tenho uma aba de Observações no cadastro de alunos, e gostaria de saber se tem como se o campo de observações for preenchido se tem como a aba ficar tipo em outra cor ou piscando. mas é assim se o usuário quiser que fica assim ele clica no ChekBox para ficar como alerta. TPageControl (TTabSheet8) aba de lançamentos TMemo (MemObs) para as observações TChekBox (ChekObs) para deixar em alerta. Então seria assim se o Usuário quizesse que a aba ficasse em alerta piscando ou em outra cor clica no ChekObs, se não ai fica normal! Gostaria de saber se tem como fazer isso ou se alguém tem alguma ideia melhor sempre é bem vinda e analizada com atenção. Aguardo resposta.
  5. O Patch é uma chave de registro para você registrar o seu programa no Windows e serve para conectar o banco de dados (chaves) O Pesquisa é porque eu uso uma função para fazer as pesquisas: function consultaregistros (ptabela, pcampos, pcondicao :string) : boolean; var instrucaosql :string; begin instrucaosql := 'select ' + pcampos + ' from ' + ptabela; if (pcondicao<>'') then begin instrucaosql := instrucaosql+' where ' + pcondicao; end; //showmessage (instrucaosql); with dtmiza.qryiza do begin close; sql.Clear; sql.add (instrucaosql); open; end; result := (not dtmiza.qryiza.IsEmpty); end; E o Enumero: function enumero (numero:string) : boolean; var resultado : boolean; begin resultado := true; try strtofloat (numero); except resultado := false; end; result := resultado; end;
  6. Esse é um arquivo chaves, tipo o arquivo patch, esse é o de registro do windows, então ele você vai clicar com o botão direito e editar do jeito que o seu programa necessita, primeiro é o caminho do registro aquele mesmo que tem no formulário de splash e o outro é do caminho do banco de dados, mude conforme o seu necessário. Registros Agora vou lhe passar arquivos .pas para você implementar em seu programa, agora é om você, pois estou lhe passando algumas coisas de criptografia! que é muito util. Pas Esse aqui é o form de cadastro da liberação. Liberação Implemente agora do jeito que seu programa necessita
  7. Micheus, fiz oque você me pediu mas ainda nada, então lhe manda o exemplo que estamos fazendo: Exemplo do Programa
  8. Sim exatamente, mas nada funciona, nem demonstra nada, Não teria que colocar algo para salvar? Ou eu poderia mandar novamente um exemplo com o que estamos fazendo para você vizualizar melhor?
  9. Sim tem algumas coisas que você vai ter colocar de acordo com seu projeto, mas isso você tem que fazer: E essa na Private: private vReg : TRegistry; vApp : TRegistry; vLog : String; iLog : TBitMap; Calma que tem muita coisas ainda para fazer, é que estou meio apurado e assim que dá eu vou colocando mais coisas.
  10. Cara essa parte do banco de dados não fui eu que desenvolvi, então vamos aqui no meu fiz um teste e por enquanto não deu nada. Sobre esse assunto, você quando for instalar o seu projeto você primeiro vai ter que rodar esse programinha de estações pois ele vai ter que cadastrar o serial do pc, pois se alguém for querer instalar ele em outro pc não vai dar!
  11. Esse é o programinha que vai cadastrar a estação, quer dizer o pc! Estações E isso você vai fazer no seu programa: DECLARAR uma variavel chamada vAut do tipo boleana no formulario principal (junto com o vCab, vCpo) e duas outras chamadas vSer e vEst do tipo string // isso vai no arquivo de funcoes // incluir na clausula uses da interface do funcoes.pas a unidade REGISTRY Function VerificaEstacao( pNEs, pSHD : String ) : Boolean; var nPro, nCPr, nHDS, nPa1, nPa2, nSer : String; i : Integer; nRes : Extended; vAut : Boolean; begin vAut := True; if ( not Pesquisa( 'fatEst', 'estSta', 'WHERE estCod=' + pNEs ) ) then begin //Mensagem( 'Estação não registrada!' ); vAut := False; Exit; end; { else begin if ( LeDados( 'estSta' ) >= 1 ) then begin Mensagem( 'Problemas com a conexão. A operação será abortada!' ); vAut := False; Exit; end; end; } if ( not Pesquisa( 'fatCf2', 'cfgCp2', 'WHERE cfgCp1=' + #39 + Codifica( pNEs ) + #39 ) ) then begin //Mensagem( 'Estação não registrada!' ); vAut := False; Exit; end else begin if not VerificaSerial( pSHD, DeCodifica( LeDados( 'cfgCp2' ) ) ) then begin //Mensagem( 'Estação não registrada!' ); vAut := False; sSta := 3; end; end; VerificaEstacao := vAut; end; function VerificaSerial( pSHD, pSEs : String ) : Boolean; var nPro, nCPr, nHDS, nPa1, nPa2, nSer : String; i : Integer; nRes : Extended; vReg : TRegistry; vAut : Boolean; begin vAut := True; vReg := TRegistry.Create; vReg.RootKey := HKEY_LOCAL_MACHINE; // le a chave ProductID vReg.OpenKey( 'SOFTWARE\Microsoft\Windows\CurrentVersion', False ); nPro := vReg.ReadString( 'ProductID' ); // remove todos os caracteres não numericos da chave do produto nCPr := ''; for i := 1 to Length( nPro ) do begin if ENumero( Copy( nPro, i, 1 ) ) then nCPr := nCPr + Copy( nPro, i, 1 ); end; // remove todos os caracteres não numericos do serial do HD nHDS := ''; for i := 1 to Length( pSHD ) do begin if ENumero( Copy( pSHD, i, 1 ) ) then nHDS := nHDS + Copy( pSHD, i, 1 ); end; // calcula o serial do programa nRes := ( StrToFloat( nCPr ) * StrToFloat( nCPr ) ) + StrToFloat( nHDS ); nRes := nRes / ( StrToFloat( nHDS ) * 2 ); i := Pos( ',', FloatToStr( nRes ) ); // verifica se foi encontrada alguma virgula no numero definido if ( i > 0 ) then begin nPa1 := Copy( FloatToStr( nRes ), 01, ( i - 1 ) ); nPa2 := Copy( FloatToStr( nRes ), ( i + 1 ), ( Length( FloatToStr( nRes ) ) - i ) ); end; if Length( nPa1 ) > Length( nPa2 ) then nSer := nPa1 else nSer := nPa2; // compara o serial encontrado, com o que esta gravado no registro da estacao if ( pSEs <> nSer ) then begin // Mensagem( 'Cópia ilegal!' ); vAut := False; end; VerificaSerial := vAut; end; function VerificaLicenca : Boolean; var nCon : Integer; nDtE, nDtL : TDate; vAut : Boolean; begin Result := True; vAut := True; // le os dados da tabela de configuracao if ( not Pesquisa( 'fatCf2', 'cfgCp5', 'WHERE cfgCp1=' + #39 + Codifica( vEst ) + #39 ) ) then begin vAut := False; sSta := 3; Exit; end; if ( not Pesquisa( 'fatEst', 'estDUC, estHUC, estSta', 'WHERE estCod=' + vEst ) ) then begin //Mensagem( 'Estação não registrada!' ); vAut := False; sSta := 3; Exit; end; if ( sSta <> 2 ) then begin // le os dados da tabela de estacoes nDtE := LeDados( 'estDUC' ); //nHor := LeDados( 'estHUC' ); // le os dados da configuracao if ( not Pesquisa( 'fatCf2', 'cfgCp3', 'WHERE cfgCp1=' + #39 + Codifica( vEst ) + #39 ) ) then begin //Mensagem( 'Estação não registrada!' ); vAut := False; sSta := 3; Exit; end else begin nDtL := StrToDate( DeCodifica( LeDados( 'cfgCp3' ) ) ); end; // se faltar 5 dias ou menos para expirar o prazo, avisa ao usuario if ( ( Trunc( nDtL - Date() ) <= 5 ) and ( Trunc( nDtL - Date() ) > 0 ) and ( ( SysUtils.Time()-vHra ) >= StrToTime( '1:00:00' ) ) ) then begin Mensagem( DeCodifica( LM_EXPIRACAO ) + ' ' + IntToStr( Trunc( nDtL - Date() ) ) ); vHra := SysUtils.Time(); end; // verifica se a data limite é maior que a data atual if ( nDtL < Date() ) then begin // a licenca expirou with TfrmLibSof.Create( Application ) do try ShowModal; finally Free; end; end; // verifica se a data da ultima execucao é menor ou igual a data atual if ( nDtE > Date() ) then begin // o usuario alterou a data/hora do sistema vAut := False; sSta := 3; Exit; end; end else begin vAut := False; sSta := 3; end; VerificaLicenca := vAut; end; procedure Revisa; var vLet, vAlf : String; i : Integer; begin vAlf := 'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'; vLet := ''; for i := 1 to 3 do vLet := vLet + vAlf[ Random( Length( vAlf ) ) + 1 ]; // se retornar determinadas letras, mostra a mensagem e trava o programa. if ( ( Pos( 'A', vLet ) > 0 ) or ( Pos( 'D', vLet ) > 0 ) or ( Pos( 'X', vLet ) > 0 ) or ( Pos( 'P', vLet ) > 0 ) or ( Pos( 'K', vLet ) > 0 ) or ( Pos( 'Y', vLet ) > 0 ) or ( Pos( 'I', vLet ) > 0 ) or ( Pos( 'H', vLet ) > 0 ) or ( Pos( '8', vLet ) > 0 ) or ( Pos( '3', vLet ) > 0 ) or ( Pos( '0', vLet ) > 0 ) ) then begin if ( not VerificaEstacao( vEst, vSer ) ) or ( not VerificaLicenca ) or ( sSta >= 2 ) then begin Mensagem( DeCodifica( LM_APLIC_NAO_LIB ) ); DesconectaEstacao; frmPrincipal.dbaTMg.Connected := False; Application.Terminate; end; end; end; // NO FORMULARIO DE SPLASH // abre a chave do software vApp.OpenKey( 'SOFTWARE\AQUI COLOQUE O NOME DE SEU SOFTWARE', False ); // numero da estacao de trabalho vEst := vApp.ReadString( 'WorkStation' ); // atualiza os dados do componente TDiskCaps dskSer.ExamineDrive; if ( VerificaEstacao( vEst, dskSer.DiskSerial ) ) then VerificaLicenca; // vSer := dskSer.DiskSerial; // exibe a mensagem de prazo de licenca do software Pesquisa( 'fatCf2', 'cfgCp3', '' ); panSta.Caption := 'Sua licença expira em ' + DeCodifica( LeDados( 'cfgCp3' ) ) + '.';
  12. Sim, eu expressei errado, mas é assim, na tabela de alunos eu tenho a aba de lancamento, que nela tem o grid que é vuzualizado esses dados, mas nela mesmo eu queria colocar para dar baixar na promissoria, nesse caso entrando np cadastro de alunos e dando baixa por lá mesmo, pois esse cadastro de alunos por enquanto são só os dados dos alunos que eu movimento!
  13. Cara o negocio é muito instenso, mas vou passando aos poucos para você e ai você vai ter que colocar de acordo com o seu programa e banco de dados, pois utilizo o firebird 2.0.3. 1ª Etapa Instala esse componente no delphi: DiskCaps Esse componente ele retorna os dado que estão gravados no seu banco de dados e verifica a chave do do seu programa no Windows. E faça essas tabelas no banco de dados: Me informa se no seu Projeto você tem uma unit de Funcoes para o seu projeto? E se você tem algum aruivo de Incialização, tipo uma janela Splash?
  14. Ok. Mas então corrigindo e perguntando: Nesse codigo não era isso que estava errado mas sim no SQL.Add('SET DTPGTO = :DtPgto'); que eu tinha deixado assim SQL.Add('SET DTPGTO = :Tipo');! Mas então aqui eu adicionei o campo TxtDtPgto (MaskEdit) ligando com o campo DtPgto da tabela de Lancamento, mas uma duvida, esse procedimento que estamos fazendo é na tabela de alunos, como eu salvo uma data que não é da tabela de alunos. Ixi estou me confudindo todo. Pois arrumei e rodo o programa, seleciona a linha da parcela, clico no radiobutton (RdbBaixa) e coloco uma data e clico no botão baixar, mas não acontece nada.
  15. Mas Micheus, então quer dizer que vou acrescentar um campo de Data, no caso fiz TxtDtPg (MaskEdit), para o usuário fornecer a data, mas no caso a coluna "Tipo" seria para que quando baixado ele setasse para 1 e assim contasse como entrada no caixa. Bom queria algumas sugestões suas sobre isso. Pois fiz mudando para as datas e dá esse erro:
  16. Amigo que banco de dados você usa e delphi? Pois no meu utilizo um que quando expira a chave re liberação ele pede quando inicia o programa ou mesmo assim em uso do mesmo, e utilizo um outro programinha para cadastrar a estação no caso o pc que se o usuario instalar e querer copiar os dados em outro pc ele dá erro, falando que o mesmo não pode ser utilizado no pc.
  17. Ok, Micheus entendi suas explicações. Bom para indicar que minha parcela foi baixada acrescentei um campo na tabela de praticas com o nome de DtPgto (data de pagamento), então quando a parcela baixada ela vai mostrar no grid a data de pagamento e aparecer em verde e quando estiver vencinda em Vermelho. Então essa linha SQL.Add('SET Tipo = :Tipo');, ficou assim SQL.Add('SET DTPGTO = :Tipo');. Mas está dando esse erro:
  18. Bom, troquei do jeito que você me informou, mas deu esse erro: eu queria duas explicações, primeira: SQL.Add('SET baixado = :Tipo'); No caso dá o erro aqui no Baixado, mas me explica essa intrução para eu poder entender. E segunda: E mais essas duas linhas:
  19. Bom, eu seleciono a parcela para baixar e clico no RadioButtons, e ai no botão baixar mas dá esse erro: dados do botão atualizado: procedure Tfrmalunos.SpbBaixarClick(Sender: TObject); begin with DtmIza.UpAluLan do begin SQL.Clear; SQL.Add('UPDATE Lancamento'); // tabela que terá o campo atualizado SQL.Add('SET baixado = :Tipo'); // campo a ser atualizado com valor -> parâmetro SQL.Add('WHERE Codigo = :Codigo and Vencimento = :Vencimento'); ParambyName('Codigo').AsInteger := DtmIza.UpAluLan.FieldByName('Aluno').AsInteger; ParambyName('Vencimento').AsDateTime := DtmIza.UpAluLan.FieldByName('Vencimento').AsDateTime; if RdbBaixa.Checked then ParambyName('Tipo').AsInteger := 1 else ParamByname('Tipo').AsInteger := 0; ExecSQL; // instrução UPDATE é executa com este método, não o Open; end; end;
  20. Sim. Voce só precisa de um datasource ligado a este dataset se for utilizá-lo para alguma coisa. Não é o seu caso. Voce vai utilizar este dataset UpAluLan apenas para executar uma instrução SQL (UPDATE) - não vai retornar nada que precise ser mostrado em um DBGrid, por exemplo. até eu! :blink: O IBDataSet foi um papo lá do início, era uma das alternativas (1ª) e se você ler denovo o post#6, verá que faz tempo que estamos falando da 2ª opção (uso de um IBQuery). Não é mesmo?! Há sim, você esta certo! Então concretizando o que eu entendi: Vou ter relacionado hà isso: >Uma IbQuery (QryAluLan) ligado com um DataSource (DtsAluLan) e um DbGrid (DbgLan)ligando no meu DataSource (DtsAluLan) para me mostrar os dados.Ok! e >Uma IbQuery (UpAluLan) não ligado a nada, seria para executar a instrução para baixar a aprcela.Ok! Mas faço assim: procedure Tfrmalunos.SpbBaixarClick(Sender: TObject); begin with DtmIza.UpAluLan do begin SQL.Clear; SQL.Add('UPDATE Lancamento'); // tabela que terá o campo atualizado SQL.Add('SET baixado = :Tipo'); // campo a ser atualizado com valor -> parâmetro SQL.Add('WHERE Codigo = :Codigo and Vencimento = :Vencimento'); ParambyName('Codigo').AsInteger := DtmIza.DtsAluLan.FieldByName('Aluno').AsInteger; ParambyName('Vencimento').AsDateTime := DtmIza.DtsAluLan.FieldByName('Vencimento').AsDateTime; if RdbBaixa.Checked then ParambyName('Tipo').AsInteger := 1 else ParamByname('Tipo').AsInteger := 0; ExecSQL; // instrução UPDATE é executa com este método, não o Open; end; end; Ai ele dá aquele mesmo erro:
  21. Vixe digo eu. :o Sugestão, utilize nomes mais claros para seus componentes. Por exemplo, para um datasource utilize as iniciais DS; para dataset utilize Dst; Eu costumo prefixar com Qry os datasets do tipo TIBQuery, Tab os do tipo TIBTable e Dst os do tipo TIBDataSet, ... e por aí vai. Vamos denovo, ao "espírito da coisa": - de onde vem os dados que são mostrados no seu DBGrid? vem do UpAluLan ou do QryAluLan? Pelas minhas contas vem de QryAluLan! - para mostrar estes dados de QryAluLan no DBGrid você precisa de um DataSource no meio, não é? Pelas minhas contas poderia/deveria ser o seu DtsAluLan! então, você terá no seu DBGrid, na propriedade DataSource, o componente DtsAluLan selecionado. Por sua vez, você terá no seu componente DtsAluLan, na propriedade DataSet, o componente QryAluLan selecinado. Pronto! Agora o seu DBGrid estará mostrando os dados que vem da sua consulta QryAluLan. O componente UpAluLan só será utilizado para executar a instrução de UPDATE - você não ligará ele a coisa alguma. Então, não precisa de um DataSource para ele. Pelas minhas contas o tal DsAluLan! Exatamente, para a amostra de dados no meu DbGrid eu utilizo o QryAluLan ligando com o DtsAluLan, para a mostra de dados no grid, aqui acho que Ok! Aqui O componente UpAluLan só será utilizado... , então eu vou ter uma IbQuery (UpAluLan) e não vou ter um DataSource! Mas sim um IbDataSet? estou confuso?!?!?
  22. quando usando componentes data-aware padrões, você sempre vai ter: - no componente data-aware, a propriedade DataSource apontando para um componente TDataSource; - no componente datasource, a propriedade DataSet apontando para um componente dataset tipo Query ou Table (no seu caso TIBQuery ou TIBTable); - e nestes dataset estarão os campos (fields) então: - se DsAluLan é um DataSource; - se DtsAluLan é um DataSet; - e se DBGrid é um componente data-aware.... você vai ter: - a propriedade DataSource do seu DBGrid apontando para DsAluLan; - a propriedade DataSet do seu DsAluLan apontando para DstAluLan; e por fim, se DstAluLan é seu dataset, o método ParamByName só pode se aplicar sobre ele. Então, a linha que acusa erro deve ficar: ... ParambyName('Vencimento').AsDateTime := DtmIza.DstAluLan.FieldByName('Vencimento').AsDateTime; ... Ixi, Micheus fiz errado. o DtsAluLan eu tinha colocado um componente DataSource: Deixa eu ver se eu entendi e por favor me corrige: Porque eu fiz desse tipo, coloquei assim: >DsAluLan (DataSource) ligando com a IbQuery (UpAluLan) >DtsAluLan (DataSource) ligando com a IbQuery (QryAluLan) >DbgLan (DbGrid) ligando com o DtsAluLan para mostrar os dados Então eu devo ter: >DsAluLan (DataSource) ligando com a IbQuery (UpAluLan) >DtsAluLan (DataSet) ?Eu ligarei com qual? >DbgLan (DbGrid) ?Eu ligarei com qual?
  23. se você não entender o "espírito da coisa" vai ficar complicado... este: DtmIza.DsAluLan.FieldByName('Vencimento').AsDateTime; a que me refiro, pode estar errado, mas a idéia é obter o campo Vencimento do dataset ligado ao seu DBGrid. Se ele não se chama DsAluLan ou se não está no datamodule DtmIza, daí é com você. O importante é que você saiba que FieldByName é um método de um componente tipo dataset (seja Query, Table,...) e não de um TDataSource ou outra coisa. ;) Micheus, O DsAluLan eu ligaria com o DbGrid ou o DtsAluLan que mostra os dados, pois o resto esta certo!?
  24. Há entendi Micheus, então eu vou usar uma Query para a busca dos dados e outra que seria a (UpAluLan) para baixar, com os seguintes dados no botão Baixar: procedure Tfrmalunos.SpbBaixarClick(Sender: TObject); begin with DtmIza.UpAluLan do begin SQL.Clear; SQL.Add('UPDATE Lancamento'); // tabela que terá o campo atualizado SQL.Add('SET baixado = :Tipo'); // campo a ser atualizado com valor -> parâmetro SQL.Add('WHERE Codigo = :Codigo, Aluno, Tipo, Parcela, Valor, Vencimento, Emissao'); // campo(s) a ser(em) filtrado(s) p/ identificar o registro // campo da tabela receberá o valor 0 ou 1, conforme o seu radiobox if RdbBaixa.Checked then ParambyName('Tipo').AsInteger := 1 else ParamByname('Tipo').AsInteger := 0; ExecSQL; // instrução UPDATE é executa com este método, não o Open; end; end; Os , Aluno, Tipo, Parcela, Valor, Vencimento, Emissao, que você tinha perguntado anteriormente são os outros campos da tabela de Lancamentos. ?Mas umas e muitas duvidas? Bom no DbGrid eu busco os dados, Ok. Ai teria que selecionar a linha do grid - da parcela, ela toda para baixar? Ai teria que clicar no radiobox que coloquei para selecionar para baixar? E ai teria sim clicava no botão baixar para baixar a promissória? Obrigado e até mais.
×
×
  • Criar Novo...