Ir para conteúdo
Fórum Script Brasil

Jhonas

Monitores
  • Total de itens

    9.657
  • Registro em

Tudo que Jhonas postou

  1. coloca ai o codigo onde o programa salva o nome do cliente.
  2. Jhonas

    Componente Dbadvgrid

    lista ai quais os eventos deste componente ... pra poder te dar uma força.
  3. Fonte ActiveDelphi ... OBS este codigo com um pouco de imaginação pode ser a base de um jogo da memoria. unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, jpeg, ExtCtrls, StdCtrls, Buttons; type TForm1 = class(TForm) Image1: TImage; Image2: TImage; BitBtn1: TBitBtn; procedure BitBtn1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.BitBtn1Click(Sender: TObject); var Img1, Img2: TStream; I: integer; Dif: boolean; Ch1, Ch2: char; begin // cria dois stream´s Img1 := TMemoryStream.Create; Img2 := TMemoryStream.Create; // copia o conteúdo dos bitmaps para os stream´s Image1.Picture.Bitmap.SaveToStream(Img1); Image2.Picture.Bitmap.SaveToStream(Img2); // verifica se são diferentes no tamanho e depois no conteúdo Dif := (Img1.Size <> Img2.Size); I := 0; Img1.Position := 0; Img2.Position := 0; //se você quiser comparar já pelo tamanho da imagem coloca um if q nem passa pelo looping //verificando o conteudo da imagem.. // if not dif then while not Dif and (I < Img1.Size) do begin Img1.Read(Ch1, 1); Img2.Read(Ch2, 1); if Ch1 <> Ch2 then begin // verifica se existe diferenca na mesma posiçao, isso significa q as imagens já são diferentes Dif := (Ch1 <> Ch2); break; //sai da repeticao end; Inc(I); end; // libera os strem´s da memória Img1.Free; Img2.Free; // exibe mensagens de acordo com o resultado if Dif then Showmessage('As imagens são diferentes.') else Showmessage('As imagens são iguais.'); end; end.
  4. No evento OnDrawColumnCell do dbgrid use: if (Column.Field.FieldName = 'Qtdfinal_estoque') then begin if dm.ZTpecas.FieldByName('Qtdfinal_estoque').value <= 10 then begin DBGrid1.Canvas.Font.Color:= clRed; DBGrid1.Canvas.FillRect(Rect); DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State); end else begin DBGrid1.Canvas.Font.Color:= clBlack; DBGrid1.Canvas.FillRect(Rect); DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State); end; end; OBS: Todos os registros do campo 'Qtdfinal' que forem menor ou igual a 10 ficarão em cor vermelha e os demais em preto
  5. a) Pelo que entendi do seu codigo voce esta contabilizando as aulas como sendo data e hora, ou seja, uma data e uma hora conta como sendo 1 aula. B) voce definiu TxtMoto: TEdit; TxtCarro: TEdit; mas não achei a definição de TxtExtCarro e TXTExtMoto c) como voce procura pelo componente usando " TEdit( FindComponent( 'ed_'..." não achei onde voce trabalha com o TxtMoto e o TxtCarro. d) entretanto nesta parte do codigo, acho que voce pode fazer o que está querendo ( após ser marcado as 15 aulas ai contasse como aulas extras e registrasse no outro edit.) procedure Tfrmpraticas.ConsultaAula; Begin With QryPra do Begin Close; Sql.Clear; Sql.Add ('Select P.Aluno, P.Instrutor, P.Data, P.Horario, P.Categoria, P.Aluno From Praticas P,' +'Instrutores I Where P.Aluno=' + txtcod.Text + 'AND P.Status=1 AND I.Codigo=P.Instrutor ORDER BY P.Data, P.Horario'); Open; end; if QryPra.recordcount <= 15 then begin // quantidade de aulas menor ou igual a 15 end else begin // quantidade de aulas maior que 15 end; end; Nesta rotina voce pode implementar o resto do codigo para fazer o que esta querendo, é mais ou menos isto ?
  6. Neste endereço tem informações interessantes a este respeito, de uma pesquisada: http://www.techzonept.com/archive/index.php/t-55099.html
  7. Então da uma olhada neste codigo... ele verifica as USBs http://www.sabereletronica.com.br/download...9/usb_teste.zip
  8. voce atribui o numero de aulas do aluno no txtCod.Text ? onde esta a procedure ConsultaAula ? onde esta o registro das aulas que o aluno já fez ? voce pode me explicar a sua lógica no programa ?
  9. Se voce estiver utilizando os componentes DSPack no evento oncreate do form voce pode usar: procedure TVideoForm.FormCreate(Sender: TObject); var i: integer; Device: TMenuItem; begin SysDev:= TSysDevEnum.Create(CLSID_VideoInputDeviceCategory); if SysDev.CountFilters > 0 then for i := 0 to SysDev.CountFilters - 1 do begin Device := TMenuItem.Create(Devices); Device.Caption := SysDev.Filters[i].FriendlyName; Device.Tag := i; Device.OnClick := OnSelectDevice; Devices.Add(Device); end; if (FilterGraph.Active = false) and (Device.Caption = '') then begin showmessage('WEBCAM desconectada!'); VideoForm.Close; end; end; OBS: Se a webcam estiver conectada o Device.Caption não ficara vazio e o FilterGraph estará ativo
  10. robinho ... acho que voce esta gastando codigo de graça, a criação de labels e edits voce esta fazendo do jeito mais dificil .... (voce esta criando 7 edits em tempo de execução e definindo suas propriedades) ... porque voce não utiliza os componentes da paleta do delphi e atribui as propriedades diretamente no componente ? A parte do codigo onde voce atribui as aulas não esta neste codigo ... É isto mesmo que voce está querendo ?
  11. A unica maneira que eu conheço é atraves de skins, e neste caso, voce poderia usar: estilo windows xp WinXPBlue.skn WinXPGreen.skn WinXPSilver.skn estilo windows vista VistaLight.skn Vista.skn Vista2.skn estilo office OfficeXP.skn Office2007_Remix.skn Office2007_Dark.skn Office2007.skn obs: já existem posts a este respeito no forum.
  12. Antes de mais nada, verifque as configurações regionais do seu windows, e veja como esta definida a data, pois isto interfere no resultado.
  13. Existem algumas maneiras: voce pode bloquear registros duplicados no proprio banco de dados ou pode durante a entrada de dados fazer uma verificação no arquivo se o registro já existe, ex: AtestaX_IB.First; if AtestaX_IB.Locate('EMPRESA',trim(Edit1.text),[loPartialKey]) then begin showmessage('Este registro já existe!'); exit; end else begin showmessage('Registro valido!'); // restante do codigo para inclusão do registro end; OBS: Neste caso vai verificar se o nome da empresa já existe, se existir da mensagem e sai fora da procedure, se não, inclui o novo registro. Ou ainda usar uma instrução SQL com passagem de parametro que ficaria mais eficaz SELECT * FROM CADASTRO WHERE EMPRESA = :NEMP // parametro que vai receber o nome da empresa ORDER BY EMPRESA Fica muito mais rapido, e se o recordcount for > 0 significa que o registro já existe, se for = 0 , o registro não existe e pode ser incluido.
  14. Colega ... um comando for dentro de um timer fará com que esse for seja reiniciado toda a vez a cada segundo, voce até poderia parar o timer com o comando < Timer1.Enabled := false; > e esperar a resposta da placa no evento OnRxChar do ComPort, entretanto ao habilitar o timer novamente a variavel i do for seria 1 novamente, e neste caso, a variavel teria que ser declarada fora do timer. vou exemplificar: unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls; type TForm1 = class(TForm) Timer1: TTimer; procedure Timer1Timer(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; placas : integer = 0; cont : integer = 0; implementation {$R *.DFM} procedure TForm1.Timer1Timer(Sender: TObject); begin //Controle para enviar o Pacote a todas as placas cont:= cont + 1; if cont > placas then //Placas contem o numero total de placas cadastradas begin Timer1.Enabled := false; exit; end; //Carrega a variavel com o Numero da Placa Numero := dtmdispenser.sdsplacaenviaCODIGO.AsInteger; //Envia os Bytes do Pacote pela serial Comdispenser.Write(Inicio,1); Comdispenser.Write(Inicio2,1); Comdispenser.Write(Tamanho,1); Comdispenser.Write(Numero,1); Comdispenser.Write(Funcao,1); Comdispenser.Write(Ordem,1); Comdispenser.Write(CRC,1); Comdispenser.Write(Fim,1); Comdispenser.Write(Fim2,1); //pega o proximo resgitro dtmdispenser.sdsplacaenvia.Next; //AQUI EU PRECISO FICAR ESPERANDO QUE CHEGUE UM PACOTE NA COMPORT PARA DEPOIS DE CHEGAR Timer1.Enabled := false; End; end; OBS: no evento OnRxChar do ComPort, assim que a resposta for obtida então voce aciona o timer novamente para a proxima leitura < Timer1.Enabled := true; > Vale lembrar que a propriedade interval do timer deve ser um valor que permita o envio das informações, acho que de 3 a 5 segundos , ou seja , o interval deve estar entre 3000 e 5000. Em função do exemplo voce deve fazer a modificação no seu codigo.
  15. Ai vai a dica: unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; OpenDialog1: TOpenDialog; Label1: TLabel; Label2: TLabel; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} function TamArquivo(Arquivo: string): Integer; begin with TFileStream.Create(Arquivo, fmOpenRead or fmShareExclusive) do try Result := Size; finally Free; end; end; procedure TForm1.Button1Click(Sender: TObject); var tamanho : real; begin if OpenDialog1.Execute then begin tamanho := TamArquivo(OpenDialog1.FileName); tamanho := (tamanho / 1024); Label1.Caption:= 'Nome do Arquivo = ' + copy(OpenDialog1.FileName,pos('\',OpenDialog1.FileName)+1,20); Label2.Caption:= 'Tamanho do Arquivo = ' + format('%n',[tamanho]) + ' Kb'; end; end; end. Obs: O valor do tamanho do arquivo que voce vai ver no windows é arredondado.
  16. { A impressora Epson LX-300 dispõe de um comando que justifica o texto. Este recurso é interessante, pois com ele podemos continuar a enviar os comandos de formatação de caracteres como condensado, negrito, italico, expandido, etc. Para o exemplo abaixo: - Coloque um botão no form; - Altere o evento OnClick deste botão como abaixo: } procedure TForm1.Button1Click(Sender: TObject); const cJustif = #27#97#51; cEject = #12; { Tamanho da fonte } c10cpi = #18; c12cpi = #27#77; c17cpi = #15; cIExpandido = #14; cFExpandido = #20; { Formatação da fonte } cINegrito = #27#71; cFNegrito = #27#72; cIItalico = #27#52; cFItalico = #27#53; var Texto: string; F: TextFile; begin Texto := c10cpi + 'Este e um teste para impressora Epson LX 300. ' + 'O objetivo e imprimir texto justificado sem deixar ' + 'de usar formatacao, tais como: ' + cINegrito + 'Negrito, ' + cFNegrito + cIItalico + 'Italico, ' + cFItalico + c17cpi + 'Condensado (17cpi), ' + c10cpi + c12cpi + '12 cpi, ' + c10cpi + cIExpandido + 'Expandido.' + cFExpandido + ' Este e apenas um exemplo, mas voce podera adapta-lo ' + 'a sua realidade conforme a necessidade.'; AssignFile(F, 'LPT1'); Rewrite(F); try WriteLn(F, cJustif, Texto); WriteLn(F, cEject); finally CloseFile(F); end; end; Observações Modifique o codigo para voce usar quando imprimir com o FortesReport, ou seja, use os comandos de justificação e tamanho e formatação de fontes de texto antes de enviar o comando de impressão. -------------------------------------------------------------------------------------------------------------------------- Inclua na seção uses: Printers { Coloque este código no OnClick de um botão } with Printer.Fonts do if IndexOf('Draft 10cpi') >= 0 then ShowMessage('A impressora possui a fonte.') else ShowMessage('A impressora NÃO possui a fonte.'); Observações Isto pode ser útil quando queremos usar fonte da impressora quando for uma matricial ou fonte do Windows quando for uma Jato de Tinta ou Laser.
  17. Posta a parte do codigo em que voce marca aulas praticas ... ai tento te dar uma força.
  18. Passeando na Net , pesquisando sobre um outro assuto, me deparei com o que voce esta querendo, um componente ShockwaveFlash que possui os eventos : FOnMouseDown: TMouseEvent; FOnMouseUp: TMouseEvent; FOnMouseMove: TMouseMoveEvent; FOnClick: TNotifyEvent; fLockMouseClick: boolean; WasDown: boolean; FOleObject: IOleObject; Para download do componente: http://www.delphiflash.com/codepas/flashax.zip Para visualizar o codigo fonte: http://www.delphiflash.com/library-play-swf-from-stream.php
  19. Jhonas

    Duvida Quickreport

    Voce pode baixar a apostila de quick report neste endereço para ter uma ideia de como montar o relatorio http://www.apostilando.com/download.php?co...ategoria=Delphi http://www.univel.br/pamplona/quickreport.zip
  20. Corrigindo: FrmMenuPrin.StatusBar1.Panels[2].Text:='Usuario: '+FrmLogin.EdtApelido.Text + ' - '+ Dm.Tab_Usuarios.UsuDepto.AsString; OBS: o operador perdido foi o '+' que ficou faltando
  21. Complementando a informação do Micheus, neste endereço esta mais simplificado a questão do cupom fiscal http://www.presence.com.br/site/pagina_tef...099,00124,00129
  22. Vai ma dica: PROCURAR COMPUTADORES DA REDE procedure FindComputers(Workgroup: string; aResList: TStrings); var eNumHandle : THandle; WorkgroupRS : TNetResource; Buf : array[1..500] of TNetResource; BufSize : DWORD; Entries : DWORD; Result : integer; sComputer: String; begin if not Assigned(aResList) then Exit; aResList.Clear; WorkGroup := Workgroup + #0; FillChar(WorkGroupRS, SizeOf(WorkGroupRS), 0); with WorkgroupRS do begin dwScope := 2; dwType := 3; dwDisplayType := 1; dwUsage := 1; lpRemoteName := @Workgroup[1]; end; WNetOpenEnum(Resource_GlobalNet, ResourceType_Any, 0, @WorkgroupRS, ENumHandle); repeat Entries := 1; BufSize := SizeOf(Buf); Result := WNetENumResource(ENumHandle, Entries, @Buf, BufSize); if (result = NO_Error) and (Entries = 1) then begin sComputer:= StrPas(Buf[1].lpRemoteName); aResList.Add(Copy(sComputer, 3, Length(sComputer)-2)); end; until (Entries <> 1) or (Result <> NO_Error); WNetCloseENum(ENumHandle); end;
  23. Micheus .. concordo com voce, mas entendi que ele quer o nome da janela em foco ( ativa ) é isto ? e pelo codigo que ele postou , dexei pra ele mostar apenas um nome. Só se entendi errado ...
  24. O problema vem do objeto de Impressora. Antes da chamada Executar, Printer.PrintIndex é corretamente fixo. O print dialog seta a impressora para um índice inválido quando você clica em " ok " para imprimir. É por isso que acontece o erro:( "Printer index out of range".) Índice da " impressora fora do alcance ". voce pode corrigir de duas maneiras: QuickRep.PrinterSettings.PrinterIndex := Printer.PrinterIndex; QuickRep.PrinterSettings.ApplySettings(QuickRep.Printer); ou ainda pode fazer desta maneira usando o PrintDialog: with PrintDialog1 do begin PrintDialog1.FromPage := 1; PrintDialog1.ToPage := QuickRep.PageNumber; PrintDialog1.MaxPage := QuickRep.PageNumber; if Execute = true then begin QuickRep.PrinterSettings.FirstPage := FromPage; QuickRep.PrinterSettings.LastPage := ToPage; QuickRep.PrinterSettings.Copies := Copies; QuickRep.PrinterSettings.PrinterIndex := Printer.PrinterIndex; QuickRep.PrinterSettings.ApplySettings(QuickRep.Printer); end; end;
  25. Ai vai a dica: unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Label1: TLabel; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); var H: HWND; WindowName: Array[0..255] of Char; ClassName: Array[0..255] of Char; begin H := GetForegroundWindow; GetWindowText(H, WindowName, SizeOf(WindowName)); GetClassName(H, ClassName, SizeOf(ClassName)); Label1.Caption := 'Nome-> '+WindowName+' / Classe-> '+ClassName; end; end.
×
×
  • Criar Novo...