
Micheus
Veteranos-
Total de itens
3.189 -
Registro em
-
Última visita
Tudo que Micheus postou
-
tem sim Neste caso, acredito que você tenha que fazer uso da sua entrada auxiliar da placa de som. Tem placas de captura de vídeo e placas PCTV. No caso das PCTV algumas, inclusive, tem a entrada de áudio e S-Vídeo (é o caso desta da PixelView). Já esta da Pinnacle, não tem entrada de áudio. Eu tenho uma placa de Captura de Vídeo da Pinnacle (que já está fora de linha) que possui 2 entradas Fireware e 1 entrada proprietária (onde plugo uma interface que a acompanha) que permite a conexão de áudio stereo, vídeo-composto (amarela) e S-Video, sendo um conjunto destes para entrada e outro para saída. (eu utilizo para edição de vídeos caseiros) No caso desta placa Pinnacle, o principal inconveniente é que ela só funciona com o software deles. Não dá para instalar qualquer "capturador" de vídeos e tentar capturar imagem por esta placa - ela não estará disponível. (é comum com os produtos da Pinnacle - não sei se a versão para USB, também funciona assim) Então, acho que seria conveniente você levantar as placas que lhe possam interessar e avaliar as suas características. Normalmente a resolução será baseada no padrão NTSC ou outros que ela utilize, logo, em tela cheia a imagem deverá ficar um pouco prejudicada - caso isto seja importante para você. (veja o 4º parágrafo deste artigo - Entendendo a TV Digital - onde fala de resolução). Abraços
-
Já experimentou mudar no seu documento html o charset para outro conjunto de caracteres. Por ex., o texto html digitado num bloco de notas (usando os acentos e tal) se eu definir o conjunto de caracteres utf-8, ao abrir a página no navegador, vão mostrar "?" no lugar destes caracteres acentuados, mas se defino como iso-8859-1, mostra eles normalmente? <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> ... </head>
-
Sem dúvida José. Mais uma vez eu dei uma mosqueada no exemplo que lhe passei. :blush: Abraços
-
José, atente-se aos primeiros erros apontados em cada unit: Unit1.pas(170) e Unit2.pas(67) A "chuva" de erros é apenas um evento em cascata. Abraços
-
Novo Estagiário de Delphi -> Jhonas
tópico respondeu ao Beraldo de Micheus em Novidades e Anúncios Script Brasil
Bem vindo à equipe Jhonas. ;) -
Alterando Data E Hora De Um Arquivo
pergunta respondeu ao Micheus de Micheus em Tutoriais & Dicas - Delphi, Kylix
Não necessariamente. Depende de como foi programado o esquema de expiração pela data. -
Paleta BDE (Data Base) necessita instalar DBE administrator?
pergunta respondeu ao Erso de Micheus em Delphi, Kylix
Erso, esta dúvida seria em que situação: quando você instala a aplicação no cliente, por exemplo? -
José, seria isto mesmo. Apenas não esquecer de adicionar ScktComp no uses da unit1 (form principal). você chegou a testar?
-
Eder, apesar de o componente ser o "mesmo" ele não é exatamente aquele que acompanha o delphi7 ou qualquer outro. Esta sua dúvida é simples de tirar. Lembre-se que foi você quem importou o objeto OCX, e que possui o código fonte gerado. Assim, basta dar um olhada dentro dele para encontrar: procedure TWebBrowser.Navigate(const URL: WideString; var Flags, TargetFrameName, PostData, Headers: OleVariant); e como dá para ver, é um pouco diferente. experimente assim: procedure TForm1.Button7Click(Sender: TObject); var Flags, TargetFrameName, PostData, Headers: OleVariant; begin WebBrowser1.Navigate('www.terra.com.br', Flags, TargetFrameName, PostData, Headers); end; Abraços
-
Dataplex, qual o compilador C você está utilizando? De uma forma bastante simplista, basicamente, você deverá: - mostrar um texto ao usuário informando que ele deverá entrar com o texto; (use printf) - solicitar a entrada do texto; (use scanf) - processar o texto informado em um loop, desde o 1º caracter até o último, de modo a mostrar o substring do texto se movendo de um lado para outro. Para este procedimento, é importante saber quantas colunas terá este seu display virtual (o PC terá no máximo 80 colunas em modo caracter). depois de funcionar o básico, dá para enfeitar um pouco, adicionando uma moldura que represente o display. Abraços
-
(Resolvido) Cálculo de fatorial de duas matrizes em Pascal
pergunta respondeu ao ucastro de Micheus em Lógica de Programação
Fatal: Erro de sintaxe, "BEGIN" esperado mas "identificador PROGRAMA" achado. KaKarotto, você tem razão, é mesmo um errinho bobo. ucastro, se você levar em conta que toda a sintax da linguagem é em INGLÊS, vai perceber logo que você deu uma bobeada bem no início: excreveu PROGRAMA ao invés de PROGRAM. ;) Abraços -
(Resolvido) Ajuda no relatório de cheques
pergunta respondeu ao robinhocne de Micheus em Delphi, Kylix
Robinhocne, inicialmente você mencionou: Eu entenderia este "na public" como sendo na seção public da declaração da sua classe do form do relatório, até porque depois você diz: Isto posto, como você estaria iniciando VALOR1 antes de criar o seu FrmRelChequePre? ... Else With QrySomasLancados do Begin QrySomasLancados.Close; QrySomasLancados.Sql.Text :='Select sum(Valor)as "SOMA" From Lancamento where cheque is not null'; QrySomasLancados.Open; end; valor1 := QrySomasLancados.FieldByName('Soma').AsFloat; With TFrmRelChequePre.Create(Application) Do Try QuickRep1.Preview; Finally Free; end; -
é... :blush: Coisas do copiar/colar. Devia estar: TFormPrincipal = class(TForm) ... public ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket); quanto ao resto, você me facilitaria se passasse o nome das units e dos forms, assim eu poderia exemplificar com algo mais realista. Abraços
-
(Resolvido) Fazer atualização no Banco de dados sem interferir no
pergunta respondeu ao robinhocne de Micheus em Delphi, Kylix
Só uma forcinha... ;) SQL.Add(MScript.Lines.Text); ou SQL.AddStrings(MScript.Lines); -
Vou preferir passar alguns links sobre o assunto:- Conheça o Firebird em 2 minutos - Principais características e recursos do Interbase/Firebird ! (necessita se registrar)
-
etspaz, neste momento, sua dúvida diz mais respeito à Banco de Dados do que à Delphi. Assim, gostaria que você informasse qual o banco de dados está utilizando para mover este tópico para a área de Banco de Dados - será mais uma opção de auxílio. Abraços
-
Acho que ainda não... O componente TWebBrowser é praticamente uma interface para o objeto existente no Windows: Microsoft Internet Controls Faça assim: - Vá no menu Component->Install Activex Control...; - Localize Microsoft Internet Controls (Version x.x). Observe que aparecerão em Class names: TWebBrowser_V1 e TWebBrowser; - Em Palette Page, escolha a paleta onde você deseja colocar o componente (padrão é Activex); - Em Unit Dir Name escolha o local para armazenar o fonte da unit que o Delphi irá gerar; - Click em Intall... e na tela que aparece defina em que package você quer guardar o componente - se em uma existente (pode ser a DCLUSRxx.DPK) ou em uma nova e click OK. - Na caixa que aparece (Package ... will bw rebuild. Continue?), click em Yes. ao final, você já poderá fechar o source do pacote. Ao acessar a paleta destino, você verá dois componentes sendo cada um correspondente a uma das classes que foram importadas. Se não houver nenhum imprevisto no caminho, é só utilizar o componente TWebBrowser em sua aplicação. ;) Abraços
-
José, mas será que realmente é necessário que o componente socket fique neste form? Não seria mais prático mantê-lo no principal, já que existirá durante toda a aplicação e lá você acessará as informações? Mas, sendo necessário esta situação, há sim como você passar o evento para o forma principal. A forma que acredito seja a mais simples e de fácil compreensão seria criar o procedimento no seu form principal e chamá-lo do evento que está na outra unit. Vamos ver ser consigo explicar melhor. Supondo este form onde está o componente socket1, então você faria o seguinte: - copia o cabeçalho do procedimento que trata o evento para o seu form principal; - no form principal, você coloca todo o código que estava no evento que está na outra unit; - de volta à outra unit, recorta o código e cola no procedimento que você criou no form principal e coloca em seu lugar a chamada para aquele procedimento; No Form Principal: uses Windows, Messages, ..., Sockets; type TFormPrincipal = class(TForm) ... public TFormPrincipal.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket); end; ... implementation procedure TFormPrincipal.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket); var ReceivedCmd :String; begin ReceivedCmd := Socket.ReceiveText; Memo1.Lines.Add(Format('from: %s > %s', [Socket.RemoteAddress, ReceivedCmd])); end; ... No form de configuração onde está o componente: ... implementation uses uFormPrincipal; // a unit do form principal deve ser declarado na USES após o IMPLEMENTATION para // evitar o erro de compilação ref. à referência circular. Isto porque provavelmente // na unit do form principal, você faz referência à unit do form de configuração procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket); begin FormPrincipal.ClientSocket1Read(Sender, Socket); end; ... Veja se consegue compreender. Abraços
-
a questão de deixar a data em branco é um item a ser tratado. É claro que você não poderá fazer a consulta se a data não for válida. Vamos tentar clarear um pouco as coisas. Conforme as tabelas, a consulta para obter o total das vendas por vendedor ficaria deste modo: SELECT V.id_vendedor, sum(I.total) AS total_venda FROM vendas V, items_vendas I WHERE V.id_pedido = I.id_pedido GROUP BY V.id_vendedor Se queremos agrupar por data, então temos que acrescentá-la na cláusula GROUP BY, ficando assim: SELECT V.id_vendedor, V.vd_data, sum(I.total) AS total_venda FROM vendas V, items_vendas I WHERE V.id_pedido = I.id_pedido GROUP BY V.id_vendedor, V.vd_data Mas isto ainda não resulta no que se quer. Queremos agrupar apenas pelo MES e ANO - sem agrupar pelo dia. Supondo que desejamos o período de um ano (de 01/Jan/2007 a 31/Dez/2007), podemos escrever a consulta para o mês de Janeiro da seguinte forma: SELECT V.id_vendedor, sum(I.total) AS total_venda_JAN FROM vendas V, items_vendas I WHERE V.id_pedido = I.id_pedido AND extract(month from V.vd_data) = 1 /* Mês de janeiro */ AND extract(year from V.vd_data) = extract(year from :dat_inicio) /* ano do filtro */ GROUP BY V.id_vendedor agora temos todas as vendas do mês de janeiro agrupadas por vendedor. para fevereiro, seria similar: SELECT V.id_vendedor, sum(I.total) AS total_venda_FEV FROM vendas V, items_vendas I WHERE V.id_pedido = I.id_pedido AND extract(month from V.vd_data) = 2 /* Mês de fevereiro */ AND extract(year from V.vd_data) = extract(year from :dat_inicio) /* ano do filtro */ GROUP BY V.id_vendedor e assim por diante... Bom, tentando "corrigir" seu código (é meio difícil porque não tenho a base para testar - é tudo virtual), inclui alguns comentários, identei e acrescentei alguns espaços de modo a manter a consulta SQL visível - sem muita confusão. Numa seqüência deste tamanho (o que vai ficar) a compreensão dele fica muito prejudicada se você não puder colocar os olhos e enxergar logo onde as coisas estão. ;) Também fiz uso do with ... do, que é muito útil ao minimizar a repetição do nome das variáveis em várias linhas. procedure Tfrm_relatoriovendas.selectano; begin with ZQuery_vendas do begin Active:=False; SQL.Clear; SQL.Add('select nome_vendedor, total_jan'); // este sub-select tem o objetivo de buscar apenas uma ocorrência dos // vendedores que realizaram vendas no período sendo avaliado SQL.Add('from (select distinct id_vendedor '); SQL.Add( 'from vendas '); SQL.Add( 'where vd_data between :dat_inicio and :dat_fim) as cnsempregadovenda '); // essa parte traz o valor vendido Janeiro, do ano em dat_inicio, para // cada vendedor listado no sub-select anterior // esta sequencia deve ser repetida para os demais meses SQL.Add('left outer join(select id_vendedor as id_vendedor_jan, sum(total)total_jan '); SQL.Add( 'from items_vendas, vendas'); SQL.Add( 'where V.id_pedido = I.id_pedido '); SQL.Add( 'and extract(month from vd_data) = 1 '); SQL.Add( 'and extract(year from vd_data) = extract(year from :dat_inicio)'); SQL.Add( 'group by id_vendedor) as cnsvendajan on (cnsvendajan.id_vendedor_jan = csnvendedores.id_vendedor'); // este join tem como objetivo buscar os dados do vendefor na consulta // cnsempregadovenda, que a consulta que trouxe apenas os vendedores com // vendas no período. No caso você está apenas buscando nome_vendedor. SQL.Add('left join vendedores V on (V.id_vendedor = cnsempregadovenda.id_vendedor'); ParamByName('dat_inicio').AsDateTime := StrToDate(MaskEdit1.Text); ParamByName('dat_fim').AsDateTime := StrToDate(MaskEdit2.Text); Active:=True; end; end; Tente o código como está agora e dê um retorno (não sei se poderei verificar as mensagens amanhã, talvez só no domingo) Caso você utilize um período que fique fora do mesmo ano, tipo, quando começa em um ano e termina em outro, me avise. A codificação está preparada para trabalhar no mesmo ano. Da mesma forma, quando o período for bem variável (acho que é o caso) permitindo apenas alguns meses, será necessário alguns ajustes, já que estamos fixando o mês nas consultas - mas isto é o de menos. O importante é entender o espírito da coisa. Abraços
-
Experimenta o contrário. Nos 2º e 3º relatórios, no BeforePrint e BeforePreview chame o NewPage. Teste esta situação.
-
TicoO, esta parte: ParamByName('dataini').DataType:= ftDateTime; ParamByName('datafim').DataType:= ftDateTime; é desnecessária quando você utiliza a passagem do parâmetro com AsDateTime: ParamByName('dataini').AsDateTime := rToDate('28/01/2008'); DBValores... :wacko: Abraços
-
delphi- como diferenciar um socket.sendtext de outro socket.sendtext
pergunta respondeu ao slinkkkk de Micheus em Delphi, Kylix
Você chegou a ler o post#7 que eu indiquei naquele tópico? Chegou a baixar o exemplo e dar uma olhada nele? Aquele tópico basicamente vai tratar deste tipo de assunto. No Post#31, há um pouco mais de explicação sobre esta questão. Mas, basicamente, a sequencia que você envia é a que vai ser recebida. Assim, se você padroniza o envio, pode recuperar as informações da string recebida sem problemas. Dê uma olhada nos posts que citei e você verá que não tem nada de complicado. Abraços -
É faltou um exemplo junto dela. Mas se você olhar uns 2 posts abaixo tem um exemplo de como você iria utilizá-la. Ela faz basicamente o mesmo que a do Delphi7 faz. Caso você use o Delphi7 ou superior, basta incluir a unit SysUtils - não precisa escrever o código. Delphi syntax: type TReplaceFlags = set of (rfReplaceAll, rfIgnoreCase); function StringReplace(const S, OldPattern, NewPattern: string; Flags: TReplaceFlags): string; Retorna a string modificada S = Sua string de entrada a ser alterada OldPattern = Padrão antigo, ou seja, o que você quer procurar para substituir NewPattern = Novo padrão, ou seja, o texto a substituir o antigo Flags = pode ser um ou a combinação das duas opções. - rfReplaceAll = substitui todas as ocorrências. Omitido, substitui apenas a primeira - rfIgnoreCase = ignora diferenciação entre maiúsculas e minúsculas. Omitido, faz a busca pelo texto exata. Pegando um gancho no exemplo do Jhonas, seu uso seria ssim: S := 'Marcos+Dias+Peixoto+da+Silva'; S := StringReplace(S, '+', ' ', [rfReplaceAll]) É mais simples, mas serve especificamente para este caso. Também troca apenas caracter, não seqüência de texto.Acho sempre mais interessante usar algo abrangente, que possa ser utilizado em outros casos e flexível. E quando vier a migrar para Delphi7, basta remover a procedure de sua unit de utilidades - porque não mudará nada no código onde ela for utilizada. Fica a seu critério. Abraços
-
eu gostaria de saber como faço um codigo que retira este sinal de mais(+) deixando assim: Eder, você pode fazer uso da function StringReplace, que postei ainda outro dia para você neste post Abraços
-
Ademir, é este mesmo que você deve utilizar (NewPage), o Jhonas deve apenas ter se confundido, com a propriedade ForceNewPage. Mas o procedimento é basicamente este que ele lhe passou. Apenas acrescentaria, que se o avanço da página dever ocorrer apenas entre um relatório e outro, o evento mais adequado seria o AfterPrint - que ocorre depois que todo o relatório é impresso, então avançaria a página e iria imprimir o próximo relatório. Abraços