
Micheus
Veteranos-
Total de itens
3.189 -
Registro em
-
Última visita
Tudo que Micheus postou
-
robinhocne, você me deu um nó nas idéias. :D Se eu entendi (e não tenho certeza disto), você quer fazer a mesma consulta SQL que você utiliza para trazer os dados para o DBGridA e DBGridB, porém ao invés de o SELECT ser sobre a tabela Praticas, seria sobre o resultado retornado por sua procedure STPCSLAUL. Será que acertei? :huh: Bom, se for isto, não há nada mais simples do que trocar o nome Praticas por STPCSLAUL nas suas consultas, bem como o nome dos respectivos campos: With DtmIza.QryAluPraB do Begin Close; Sql.Clear; Sql.Add ('Select P.pAlu, P.pIns, P.pDat, P.pHor, P.pCat, P.pAlu'); Sql.Add ('From stpCslAul(' + txtcod.Text + ') P, Instrutores I'); Sql.Add ('Where P.pAlu = ' + TxtMat.Text); Sql.Add (' AND P.Categoria = ''B'''); Sql.Add (' AND I.Codigo = P.Instrutor'); Sql.Add ('ORDER BY P.pDat, P.pHor'); Open; end; o "P.Status=1" sai da cláusula WHERE da consulta, porque você já o filtrou na sua procedure. Em teoria seria isto. Mas você tem que conferir. Caso, nesta condição, você não queira passar o parâmetro para a função, então você vai ter que ver um meio de resolver isto. Dicas: - tente não economizar muito no nome das procedures, parâmetros e variáveis. Só olhando para o nome da procedure não daria para adivinhar o que ela faz, não é verdade?! Ou, então, coloque um comentário no início indicando a que se propõe a mesma. - Principalmente, nesta aplicação que você está dando (utilizá-la em consulta - retornando várias linhas), facilitaria muito se você tivesse utilizado os mesmos nomes dos campos obtidos da tabela. Na sua consulta, iria bastar apenas trocar o nome da tabela de Práticas para o da procedure; - quando alterando o código dinamicamente, o uso de várias linhas com SQL.Add, pode resultar numa melhor disposição das instruções SQL de modo a facilitar a visualização da mesma. Não parece que a leitura da instrução SQL do exemplo que postei fica mais fácil? Inclusive, se você observar, na sua consulta aparece P.Aluno duas vezes. Isto é proposital ou foi por acaso mesmo (eu mantive na "conversão") Abraços
-
Valdecir, pode ficar zangado comigo. Eu esqueci de parametrizá-la. :ph34r: Já atualizei o anexo no post#20. Voce pode baixá-lo e proceder como indicado lá. Também substituí os fontes do código no post#14, ficando no relatório dois IBQuery, cada qual com uma versão da consulta, sendo que a que está vinculada ao QuickReport é IBQuery2. Abraços
-
Como Gravar Arquivos Avi Ou Mpeg Pequenos
pergunta respondeu ao helena.dm de Micheus em Delphi, Kylix
paulobergo, acho que finalmente encontrei uma pista sobre esta questão. O problema é tempo para estudar, converter o programa (c++) e executar os passos na configuração citados neste artigo: Preview and Record with MPEG2 Capture device Dê uma conferida no executável que está lá (demo project). Se o resultado for positivo, acho que valeria a pena trabalhar na conversão. Para gravar no formato WMV, achei este outro artigo, nas mesmas condições: Video File Saving in Windows Media Video Format for the DirectX.Capture Class Library Abraços -
Walter, a única estrutura que vejo é utilizando um if..then testando uma variável que você pode ter adicionado no registro do windows numa primeira execução.
-
Acho que para isto, você poderia utilizar uma chave no registro, ou mesmo um arquivo ".ini". Sumir com parte do código do seu executável, não vai dar não.
-
Walter, não sei não, mas parece que ele está mesmo começando. Tipo instalou o Delphi e quer saber como faz... A propósito, é bem verdade que apertar o F9 irá compilar seu programa, mas também irá executá-lo ("rodá-lo"), já que esta é a função da tecla F9 (Run | Executar). Compilar é apenas uma das etapas envolvidas para obtenção do programa executável: - Compilar -> Compilador (ref. Wikipedia - ver fluxograma à direita) - Linkar -> Linker (ref. Wikipedia) Mas, voltando a compilação, para a simples compilação das units alteradas, envolvidas em seu projeto, um simples CTRL+F9 (Build | apenas compila mesmo). Já que quiser forçar a compilação de "todas" as units envolvidas no seu projeto, então a combinação é ALT+P (acessa menu Project) e B (atalho para Build All | compila "todas" units) Na linha dos atalhos para execução, além de F9 (Run | executa o programa compilado), temos ainda: - F4 (Run to cursor | executa até a posição do cursor) a execução faz uma pausa quando passar pelo código onde o cursor está posicionado; (Para continuar, temos quaisquer destas opções que estou citando) - F7 (Trace into | executa passo-a-passo) a execução é feita "linha-a-linha" e se houver uma chamada a uma procedure ou function, o código da mesma é acessado e lá continua (caso tenhamos o código fonte da unit onde a mesma está declarada. Caso contrário pode ser utilizado Shift+F7 - Trace to next source line); - F8 (Step over | executa passo-a-passo) porém, diferente de F7, na presença de procedures ou funtions não são acessados os códigos fonte das mesmas (elas são simplesmente executadas); Se o colega Rullyan realmente está começando e não tem idéia de como mexer com a IDE do Delphi, recomendo ler algum livro ou mesmo apostila sobre o assunto. Há inúmeras pela net. Nas seção de Apostilas Gratuitas tem alguma coisa, mas vai depender de que versão de Delphi você "está falando". Abraços
-
Atualiza Horario Impressora Bematch Pelo Delphi
pergunta respondeu ao Carlinhos de Micheus em Delphi, Kylix
Tinha pensado que você estava falando de mini-impressora, não impressora fiscal. :ph34r: Neste Manual de Operação e Programação da MP-20 FI II, início da pg. 37 cita algo, mas o ajuste máximo seria em 5minutos em relação ao relógio interno. Também, no mesmo manual tem a seguinte nota na pg. 64, no capítulo "Roteiro Básico para Desenvolvimento do Aplicativo": "Abertura do ECF" ... 3. Verificar se a data atual do ECF (ESC 23H 17H), e compará-la com a do micro, se existir uma diferença além de um limite tolerável (por exemplo 30 min.) solicite intervenção técnica no equipamento ou acerto da hora do micro. No mais, acho que o jeito é utilizar o Suporte ao Desenvolvedor da Bematech. Abraços -
troque a cor da "caneta":Grid.Canvas.Pen.Color := clBlack; // por exemplo
-
Atualiza Horario Impressora Bematch Pelo Delphi
pergunta respondeu ao Carlinhos de Micheus em Delphi, Kylix
e ela tem relógio interno? :huh: Que modelo que é? Já deu uma olhada no manual, ou no site da Bematech? -
schaukoski, a sugestão é você desabilitar ela (goVertline) na propriedade Options do StringGrid e desenhar onde for necessário utilizando o lance do MoveTo-LineTo.
-
por este último post, parece que não ajudei nada. Voce conseguiu achar o referido arquivo, ou um similar (depende da versão do Office)? Se achou, como eu disse, lá você encontra estas respostas e vai testando. Teria visto que existe o método AutoFit (tipo aquele duplo-clique que você dá no excel), que existe outro chamado MergeCells. É questão de ir dando uma procurada e testar. São comandos pouco utilizados e possivelmente, alguém terá que fazer isto para lhe mostrar como fazer. Se você encontra estas referências, fica fácil fazer uma busca no Google. Por ex. se você colocar na busca: "MergeCells Delphi" (sem as áspas) vai chegar a resultados como este: link (o primeiro da lista) se colocar: "AutoFit Delphi" (sem as áspas) vai chegar este outro: link Abraços
-
schaukoski, funciona sim! Foi mancada minha. :ph34r: Veja que eu coloquei duas vezes MoveTo. Mas tem que ser MoveTo e LineTo. ... if aRow = (grid.RowCount-1) then begin Grid.Canvas.MoveTo(Rect.Left, Rect.Top); Grid.Canvas.LineTo(Rect.Right +1, Rect.Top); end; se você está desenhando o texto, você tem que posicioná-lo: var Dx :Integer; begin ... // Dx = posição para deslocar da esquerda Dx := ((Rect.Right -Rect.Left) -Grid.Canvas.TextWidth(Grid.Cells[ACol, ARow])) div 2; Grid.Canvas.TextRect(Rect, Rect.Left +Dx, Rect.Top +1, Grid.Cells[ACol, ARow]); ... end; Abraços p.s. Olha a bagunça com os posts. <_<
-
(Resolvido) Dúvida/problema Com Criação De Campo Calculado Com Db
pergunta respondeu ao Alisson de Micheus em Delphi, Kylix
Alisson, a dica foi em função desta sua observação: Qual o banco de dados que você está utilizando? Cursor em apenas uma direção pode ser limitação do banco. Mas acho que a solução adequada, poderia ser você criar parâmetros para estes campos no Rave. Depois você os passa pelo Delphi. Veja como fazer neste link (ref. Ramos da Informática) Manual do Rave 5 (ref. Nevrona) -
(Resolvido) Dúvida/problema Com Criação De Campo Calculado Com Db
pergunta respondeu ao Alisson de Micheus em Delphi, Kylix
Alisson, campos calculados só podem ser manipulados no evento OnCalcFields do dataset aonde você os declarou. Supondo que você está querendo acrescentar os dois campos ao seu dataset, então você teria que escrever o evento OnCalcFields mais ou menos assim: procedure TModulo.SQL_DatasCalcFields(DataSet: TDataSet); begin DataSet.FieldByName('Data_Inicial').AsDateTime := <aqui a data inicial>; DataSet.FieldByName('Data_Final').AsDateTime := <aqui a data final>; end; -
vms, você apenas deu uma cochilada. rsrsrs begin if dm.TBCerta.Text= 'A' then FAcerto.showmodal; else FErro.showmodal; end; Não utilizou o ELSE.
-
tux_boy, a dica é utilizar o arquivo de ajuda do VBA do Excel. Com ele você descobre exatamente as classes e propriedades que vai precisar utilizar para manipular qualquer coisa na planilha. ;) Localize a pasta de instalação dos arquivos de ajuda do Microsoft Office: C:\Arquivos de programas\Microsoft Office\Office\1046 Nela você localiza algo parecido com: VBAXL9.CHM (VBA para eXceLl 9 - Office 2000, no meu caso) Quando você abre o arquivo, ele vai para a tela "Objetos do Microsoft Excel". Nesta tela tem uma espécie de "organograma" das classes. Observe que você utiliza o método Add da classe WorkBooks para criar uma pasta de trabalho vazia (uma WorkSheet). Então, seguindo esta lógica, no arquivo de help você estará visualizando e deverá clicar na propriedade WorkSheets, que é uma coleção (lista) de WorkSheet (o que realmente nos interessa). Veja que na descrição da propriedade há uma referência para WorkSheet - clique nela. Agora estamos em condições de acessar as informações (propriedades e métodos) de uma WorkSheet. Acesse o link para Propriedades e selecione na lista: Propriedade Cells. Na nova tela que aparece, você encontrará um link para Exemplos e, acessando, terá exemplo de como alterar a fonte, tamanho, cor...; Também encontra na descrição, a informação que Cells retorna um objeto Range. Explorando o help sobre Range, você vai conseguir acessar informações sobre Propriedades e Métodos desta classe que é a que lhe interessa. Veja os exemplos, que são mostrados. Em Propriedades, você encontrará as que dizem respeito ao alinamento (HorizontalAlignment, VerticalAlignment), Formula, valor (Value), borda (Borders) e Interior (cor interna = Interior.Color = cor_rgb) Com estas informações, é só explorar as necessidades. É uma questão de sair testando. ;) Veja se adicionar isto ao programa, funciona: ... Excel.Cells[1,1].Interior.Color := clRed; // ** <==== esta linha Excel.Cells[1,1] := Edit1.Text; ...
-
experimente esta alteração: procedure TFormCFinanceiro.GridDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); begin if (aRow = (grid.RowCount-1)) and not (gdFocused in State) then Grid.Canvas.Font.Style := [fsbold]; Grid.Canvas.FillRect(Rect); Grid.Canvas.TextRect(Rect, Rect.Left +2, Rect.Top +2, Grid.Cells[aCol, aRow]); if aRow = (grid.RowCount-1) then begin Grid.Canvas.MoveTo(Rect.Left, Rect.Top); Grid.Canvas.MoveTo(Rect.Right +1, Rect.Top); end; end;
-
Acho que deve ser aquele lance de não suportar select em sub-selects. Lá no post#13 eu postei o tal tutorial, e mencionei esta possibilidade. Lá tinha um link para uma avaliação (Estatistica de resultado de uma consulta SQL) em que a 2ª coluna é uma forma alternativa a este tipo de consulta. Então, abra a propriedade SQL da consulta e substitua o código pelo que está em anexo. Cosulta_Completa_Alternativa.txt
-
(Resolvido) Impressão Do Quick Report - Urgente
pergunta respondeu ao Mocota de Micheus em Delphi, Kylix
Mocota, talvez você possa tentar verificar o posicionamento no seu dataset no evento BeforePrint. Se já atingiu o fim do arquivo, e ainda assim uma nova página vai ser impressa, então você não imprime a banda. Tente colocar este código no evento BeforePrint da banda rbColumnHeader: procedure TRelatorio.QRBand1BeforePrint(Sender: TQRCustomBand; var PrintBand: Boolean); begin PrintBand := not QuickRep1.DataSet.Eof; // imprime se não for fim do arquivo end; Veja se resolve. -
Pirambu!, você não disse o que "está pegando" nesta questão outra vez, já que aparentemente o teríamos resolvido. Esclareça melhor o problema atual.
-
Walter Gazzarrini Neto, por questão de organização (já que são assuntos bem diferentes), sugiro que abra um tópico específico para tirar as dúvidas sobre relatórios. Ok?!
-
Alocar Varios Arquivos De Audio Para Gravação
pergunta respondeu ao Mairena de Micheus em Delphi, Kylix
respondendo.... Imagine uma placa de som com oito entradas de microfone. Isso é possivel porem com de custo alto. Imaginemos agora abrir oito arquivos para gravar cada um dos oito canais. Em video isso é facil pois podemos criar um varios arquivos e gravar os frames em qualquer arquivo aberto. porem o audio é gravado em strems e somente podemos alocar um arquivo. por essa razão procuro alguma forma de gravar oito conversas simultaneas de telefones. Bom, acho que não me expliquei direito. O que eu quis dizer é que para efeitos de dispositivo no Windows, você terá apenas uma entrada de microfone, logo quando utilizamos recursos (pode ser DirectSound) para gravar de um determinado dispositivo, neste caso teremos apenas 1 dispositivo microfone, o que pelo que entendo conterá (normalmente) 1 áudio, com 2 canais (estério - se assim estiver configurado). Baseado neste "conhecimento", e meu pouco conhecimento em eletrônica, é que lhe perguntei, como é que você quer gravar 8 áudios, se supostamente teremos no máximo 2? Eu estou entendendo que você precisaria de um demultiplexador na placa de som ou, tratando binariamente os dados recebidos pela placa, um "demultiplexador lógico". O que você me diz? Abraços Como que esses 8 canais que você multiplexou vão chegar para o sistema, se dentro OK... Vamos ver se eu consigo explicar melhor. Os sinais chegam ao sistema pela entrada do mic ou aux. porem eles chegam multiplexados em oito pacotes de audio. Como o controle do multiplex é feito pelo programa é possivel gravar esses pacotes em seus respectivos arquivos. Imagine uma chave de onda igual aquelas de radios antigos que trocava a faixa do mesmo. essa chave imaginaria para entender o multiplex possui 1 polo por 8 posições sendo as oito posições as entradas de audio sendo o polo a saida para a entrada de mic ou aux da placa de som agora suponhamos que voce seje um super homem e vai virar essa chave a uma velocidade 2 ou tres vezes maior que a frequencia de audio. O resultado é: Posição 1 sinal canal 1 "Audio 1" Posição 2 sinal canal 2 "Audio 2" Posição 3 sinal canal 3 "Audio 3" Posição 4 sinal canal 4 "Audio 4" Posição 5 sinal canal 5 "Audio 5" Posição 6 sinal canal 6 "Audio 6" Posição 7 sinal canal 7 "Audio 7" Posição 8 sinal canal 8 "Audio 8" Observe que a frequencia de chaveamento e 2 ou tres vezes maior que a frequencia de audio portanto e inaudivel, não interfirindo na gravação. Agora vamos ao inicio do problema como alocar oito arquivos de gravação. OBS essas informações de contem inicialmente sinais DTMF que devem ser decodificados pelo programa. Mairena.... Seguem os questionamentos que fiz e respostas da que a colega Mairena, para que com estas explicações, quem sabe, algum colega possa ajudá-la. _________________ Até então, eu havia entendido que você estaria fazendo algo como uso de modulação por amplitude ou frequência de sinal - algo assim (não lembro mais o termo certo) - neste processo de multiplexação. Tem também esta parte que você não tinha mencionado: a aplicação será responsável por chavear qual o canal a ser aquisitado. Assim, já teria dado para imaginar que os oito canais poderiam não estar entrando juntos ("sobrepostos") ou misturados via MIC. :) Mas não me parece algo fácil de implementar. Vejamos: - se o programa controla o chaveamento (ainda faltaria explicar como: via porta paralela, por ex.); - se ele tiver como saber que o chaveamento foi realizado. então, em teoria, daria para ler os dados separados para cada canal. Mas, correndo o risco de que, por algum pequeno atraso no processamento, alguma informação seja perdida ou mesmo misturada (o início de um canal ficar gravado no final do anterior) - uma pequena fração, é verdade, mas acho que poderia ocorrer. Montar esta informação em um arquivo de áudio também acho que daria para resolver. Só que daí, ainda entra a questão: "essas informações de contem inicialmente sinais DTMF que devem ser decodificados pelo programa" - isto me parece um problema. Já deixou de ser apenas "gravar oito canais de áudio" :huh: Acho que você está buscando fazer uma solução similar a este Gravador Telefônico Digital. Observe que ele tem hardware dedicado. Boa sorte. -
maxm.ro, acho que você economizou um pouco na informação, mas pela linha que você postou e por supostamente entender que você está utilizando a nomenclatura de classes começando com "T", então parece-me que o problema é justamente você não estar utilizando o objeto (classe instanciada) mas sim a classe. Exemplificando: Parece que o seu form de cadastro tem como nome na definição da classe => TFCadastro; Assim, o objeto instanciado deve provavelmente, estar definido na unit e se chamar => FCadastro; Deste modo, o problema está em utilizar a linha: TFCadastro.ConsultaClientes(Edit1.TExt); quando deveria ser: FCadastro.ConsultaClientes(Edit1.TExt); Confira aí.
-
Não conheço não, mas o InnoSetup tem "bom conceito na praça" ;) E o link do Google que postei, traz ("apenas") vários tutoriais de como criar uma instalação. Dê uma olhada.
-
schaukoski, dá uma olhada neste exemplo - post. E também tem este outro post seu com resposta, já que o princípio é exatamente o mesmo. Abraços