Ir para conteúdo
Fórum Script Brasil

Micheus

Veteranos
  • Total de itens

    3.189
  • Registro em

  • Última visita

Tudo que Micheus postou

  1. Vivendo&Aprendendo, se você puder utilizar directx, baixe este componente - DSMixer (tem um demo, é só abrir um arquivo de música para ver o que ele pode fazer). Voce vai ver que tem umas coisas legais para incrementar seu player.Nesta consulta no Torry's tem outros, na maioria com sources - quem sabe você junta um pouco de tudo e faz algo bem legal. ;)
  2. Eder, você mesmo respondeu a pergunta quando colocou esta frase: "porem quando tenho que editar este cadastro...ai ele diz que a placa já esta cadastrada" Percebeu?! Logo, quando estiver em modo edição, você não precisa fazer a verificação, apenas na inclusão - pelo menos, o lógico é que você não possa alterar a placa depois de cadastrada, apenas os outros campos. Altere seu teste para: If (DataSet.State = dsInsert) and Query1.Locate('placa',DBEdit2.text,[]) then
  3. gatinha, habilite a propriedade OwnerDraw do seu PageControl e escreva o código abaixo no evento OnDrawTab do mesmo: procedure TForm3.PageControl1DrawTab(Control: TCustomTabControl; TabIndex: Integer; const Rect: TRect; Active: Boolean); begin with Control as TPageControl do begin if Active then Canvas.Font.Style := Canvas.Font.Style +[fsBold] // habilita negrito else Canvas.Font.Style := Canvas.Font.Style -[fsBold]; // desabilita negrito Canvas.TextRect(Rect, Rect.Left +3, Rect.Top +3, Pages[TabIndex].Caption); end; end;
  4. O processo é o mesmo que o mencionado anteriormente: cria a guia, define seu parent, cria os componentes a inserir na guia, definindo a mesma como seu parent: procedure TForm3.BtnAddSheetClick(Sender: TObject); var TabSheet :TTabSheet; begin TabSheet := TTabSheet.Create(Self); TabSheet.Name := 'TabSheet'+IntToStr(PageControl1.PageCount +1); // garante nome único TabSheet.Caption := 'TabSheet '+IntToStr(PageControl1.PageCount +1); // efetiva a inserção no componente PageControl (equivale a setar o Parent no outro componente) TabSheet.PageControl := PageControl1; with TDBGrid.Create(self) do begin Parent := TabSheet; Name := 'DBGrid2'; Top := 8; Left := 8; Width := TabSheet.Width - 16; Height := TabSheet.Height - 16; end; end; Outras propriedades a serem inicializadas dependem da necessidade - se necessário consulte o help sobre o componente em questão.
  5. deio, você utiliza o mesmo método aplicado a qualquer componente - Create. A questão, no caso dos componentes visuais (os descendentes de TWinControl), é que você tem que ajustar a propriedade Parent para apontar para o componente visual que mostrará o mesmo. Segue um ex.: procedure TForm2.Button2Click(Sender: TObject); begin TabbedNotebook1.Pages.Append('Aba '+IntToStr(TabbedNotebook1.Pages.Count)); with TDBGrid.Create(self) do begin Parent := TWinControl(TabbedNotebook1.Pages.Objects[TabbedNotebook1.Pages.Count -1]); Name := 'DBGrid1'; // *** este nome deve ser único Top := 8; Left := 8; Width := TabbedNotebook1.Width - 16; Height := TabbedNotebook1.Height - 16; end; end; Uma perguntinha... Porque você está utilizando o TabbedNoteBook (lá do Windows 3.1 - 16bits)? Acho que seria mais apropriado você utilizar as versões mais recentes TabControl ou PageControl (Windows - 32bits), com muito mais recursos (propriedades, metodos e eventos). Abraços
  6. deio,dei uma pesquisada e encontrei alguma coisa no site do Projeto JEDI - downloadVeja o que você consegue.
  7. serginho_pv, isso ocorre porque você não deixa sua aplicação encerrar quando o Windows tenta fechá-la. Voce tem completo controle sobre impedir ou não seu fechamento mas com base na variável interna que você utiliza.Voce precisará monitorar uma outra mensagem que é enviada à aplicação quando o Windows deseja fechá-la, seja por um reinício, log-off ou desligamento. Essa mensagem não foi disponibilizada em forma de evento do form de modo que você tem que criar um tratador para ele. Na verdade existem duas mensagens que estão associadas a este evento do Windows: WM_QUERYENDSESSION e WM_ENDSESSION. Os nomes falam por si só. Mas na prática, você precisará monitorar apenas WM_ENDSESSION. type TForm1 = class(TForm) ... private FPodeFechar: boolean; procedure WMEndSession(var Message :TMessage); message WM_ENDSESSION; ... end; ... procedure TForm1.WMEndSession(var Message :TMessage); begin FPodeFechar := BOOL(Message.WParam); Message.Result := 0; end; Quando o Windows enviar a mensagem para encerramento da sessão a sua aplicação, você atribuirá a sua variável de controle se o form pode ou não ser fechado. Message.WParam é um flag que indica se a sessão está ou não sendo encerrada (veja help). Teste! Acredito que funcione - de qualquer modo o caminho é por ai. Abraços
  8. Ok, vou acender um holofote :D var HasChecked :Boolean; begin ... if (DBRadioGroupCondicaoPagamento.ItemIndex = 1) then begin HasChecked := False; for Idx := 0 to CLBpgto.Items.Count -1 do HasChecked := HasChecked or CLBpgto.Checked[idx]; if not HasChecked then begin ShowMessage('Voce escolheu pagamento a prazo, favor preencher os meses'); CLBpgto.SetFocus; // posiciona o cursor Abort; // não grava e continua editando end; end; end; Prontinho, agora, apenas se todos os checkbox estiverem desmarcados é que a mensagem será processada.
  9. deio, dá uma espiada neste meu tutorial e veja a parte que fala sobre o evento WM_MOUSEWHEEL, tem o código e exe para download. Dá uma olhada que já vai dar para você começar. Para utilizar as configurações definidas no Windows tem que fazer alterações, mas como está já funciona.
  10. alguém poderia me ajudar como fazer esta consulta com este campo desta maneira? Eder, o indivíduo que define um nome de campo desta forma deve ser um iluminado. :D Faz assim que deve funcionar: Observe as aspas duplas (") delimitando o identificador do campo. Abraços
  11. Antonio Jose, no que diz respeito a trabalhar itens marcado num DBGrid, tudo o que eu comentei é válido - você terá que trabalhar com SelectedRows e BookMarks.Vou colocar aqui apenas a função para copiar os itens já selecionados para a área de transferência, viabilizando que sejam colados no Excel ou mesmo para o Word, onde selecionando o texto colado, bastará utilizar a opção Tabelas->Converter->Texto para Tabela para ter novamente os dados no formato de grid. É uma função independente de Form, logo pode ser colocada em unit de utilidades. Lembrar que deve ser incluída a unit ClipBrd, bem como DBGrids (se necessário) na cláusula uses da mesma. procedure DBGridToClipBoard(DBGrid :TDBGrid; PastHeader :Boolean); var StrToCopy :string; Idx, IdxCol :Integer; BookMark, SavedBookMark :TBookMark; begin if DBGrid.SelectedRows.Count = 0 then Exit; StrToCopy := ''; if PastHeader then begin StrToCopy := DBGrid.Columns[0].Title.Caption; for IdxCol := 1 to DBGrid.Columns.Count -1 do StrToCopy := format('%s'#9'%s', [StrToCopy, DBGrid.Columns[IdxCol].Title.Caption]); StrToCopy := StrToCopy +#13#10; end; with DBGrid.DataSource.DataSet do begin SavedBookMark := GetBookmark; DisableControls; for Idx := 0 to DBGrid.SelectedRows.Count -1 do begin GotoBookMark(Pointer(DBGrid.SelectedRows[Idx])); StrToCopy := StrToCopy +DBGrid.Columns[0].Field.AsString; for IdxCol := 1 to DBGrid.Columns.Count -1 do StrToCopy := Format('%s'#9'%s', [StrToCopy, DBGrid.Columns[IdxCol].Field.AsString]); StrToCopy := StrToCopy +#13#10; end; ClipBoard.Clear; ClipBoard.SetTextBuf(PAnsiChar(StrToCopy)); GotoBookMark(SavedBookMark); FreeBookMark(SavedBookMark); EnableControls; end; end; Para usar:begin ... DBGridToClipBoard(DBGrid1, True); // True - copia o nome das colunas; False - não copia ... end; Abraços
  12. vms, a questão de carregar as fotos através dos botões é simples, basta qie você utilize o método LoadFromFile(nome_arquivo.bmp) da propriedade Picture do seu componente TImage (ex. Image1.Picture.LoadFromFile(nome_arquivo.bmp)) Já que a observação dirá respeito a imagem apresentada, uma sugestão simplista que eu daria é utilizar um arquivo texto com uma pré-formatação, onde aparece o nome da imagem seguido do texto da observação. Isso funcionaria como uma configuração, de modo que novas imagens possam ser facilmente incluídas ou, mesmo, removidas sem que tenha que mexer no código. Eu carregaria este arquivo em um TStringList (via método LoadFromFile) de modo que as linhas lidas, se tornando um item na lista, definiram a seqüência em que as as fotos deveriam aparecer. Uma variável índice controla o item na lista a ser processado (os botões avançam ou retrocedem ele), de modo que para apresentar a imagem e a observação, o nome da foto a ser carregada seria extraído do início da string no item selecionado e a observação viria do resto da string. Será que serve? Abraços
  13. Não seria bem no Datamodule. Se entendi direito, você tem dois ALIAS definidos no BDE e quer fazer uma consulta que envolva uma tabela de cada ALIAS. Não seria isto? Se for, e considerando que você utiliza o PARADOX e, ainda, eu não estiver enganado, basta que você coloque na cláusula FROM de seu SELECT o nome do ALIAS antecedendo a tabela seguido de ":". Por ex.: SELECT E.NomeEmpresa, F.NomeFuncionario FROM ALIAS_1:TBEmpresa E, ALIAS_2:TBFuncionario F WHERE F.CodEmpresa = E.CodEmpresa Experimenta isso no Database Desktop, antes de tentar implementar. Abraços
  14. Dê mais informações pra ver se o pessoal ajuda... Essas imagens, você carrega de um diretório ou vão vir de um banco? Estas observações estarão vinculadas especificamente a cada foto, ou não tem qualquer ligação? Elas virão de um arquivo texto ou de um banco de dados?
  15. Micheus

    Dbgrid

    Crie um campo calculado neste dataset, do tipo adequado ao que você precisa, e no evento OnCalcFields você faz processamento conforme quer e coloca neste campo. (se tiver dúvida de como se cria um, dê uma olhada neste meu post, bem no final aonde aparece "Datamodule:")
  16. Micheus

    Arquivo .ini

    É tá mesmo faltando um tutorial passo-a-passo para isso, mas dá uma olhada neste post (acompanha ele e os dois seguintes) - acho que já vai dar para a saída... Abraços
  17. Micheus

    Contador No Dbgrid

    deio, vou por o link para aquela documentação do componente TDBF que você está utilizando e que acho que você pode não baixado ainda - http://ufpr.dl.sourceforge.net/sourceforge/tdbf/tdbf.pdf Então, dá uma olhada lá em: 5.5 Why does RecordCount return too many records? (muita atenção ao que é dito aqui) 7.3 PhysicalRecNo -> vai explicar sobre o uso de PhysicalRecNo e RecNo (indicadores da posição atual) 7.7 ExactRecordCount -> (a quantidade real de registros, observe que pode ser muito lento) * observe a questão do uso ou não de índices, mencionado nos tópicos Aparentemente você poderá fazer seu contador. A questão é se ele mostrará os valores corretos ou não. Para mostrar no seu DBGrid o contador (x de y) crie um campo calculado do tipo string de tamanho suficiente para armazenar o texto (se tiver dúvida de como se cria um, dê uma olhada neste meu post, bem no final aonde aparece "Datamodule:") No evento OnCalcFields você vai montar o texto, a ser atribuído ao campo calculado, com o número do registro atual (PhysicalRecNo ou RecNo) concatenando ao número total de registros (ExactRecordCount ou RecordCount). O total de registros seria conveniente achar um mecanismo que minimizasse sua obtenção, porque pode tornar a visualização do DBGrid lenta. Daqui para frente é com você, porque, pelas observações das propriedades que citei, você é quem vai poder testar e verificar qual utilizar para obter a informação correta. Abraços
  18. "portas dos funfos..." essa foi boa Churc :) Só completando o que você sugeriu, parece-me que o componente QRYfuturo tem outra aplicação no programa que não apenas ser utilizado para obter o MAX ou, por algum outro motivo, ela tem fields adicionados em design-time que não correspondem ao esperado. Se a instrução utilizada (select max...) fosse adicionada em design-time, a adição dos fields deste TQuery resultaria apenas no field de nome Ordem - não é o caso. Dê uma verificada mcsmarmcs. Abraços
  19. Pois é, o que eu sabia em termos de experiência (local onde fiz uns bicos) é que o NET DIR configurado no BDE das máquinas deve apontar para um drive de rede (ou path). A não utilização deste método está sujeito a efeitos colaterais (não lembro quais exatamente). Veja o que o help diz sobre NET DIR (em BDE Administrator, guia Configuration, selecione drive PARADOX e tecle F1 em NET DIR): "The directory location of the Paradox network control file PDOXUSRS.NET. The active NET DIR parameter is stored in the Paradox section of the BDE configuration file and has precedence over any other NET DIR parameters that may be stored in older 16-bit configuration files, or in the System Init section of the current configuration file, or in the Registry. These other NET DIR entries will have no effect. To access a Paradox table on a network drive, the active NETDIR parameter in the Paradox section of the BDE configuration file must point to a network drive." Talvez seja justamente o caso de configurar todas as máquinas na rede para apontar para o mesmo local (um path de rede) Abraços
  20. mcsmarmcs, hipótese improvável.A sintax para uso do MAX, da forma proposta (apenas ele na cláusula SELECT), e exatamente esta para 99,99% dos bancos de dados. Apenas se houvessem outros campos, juntamente com a função de agregação - MAX, é que você deveria utilizar a sintax completa do GROUP BY. Veja documentação do MySQL (link), logo no início, na tabela tem um link para a função MAX() nesta condição. O ideal seria você colocar aqui a mensagem exata que você recebe. Bem como a parte do código em que você monta a instrução. Abraços
  21. Este tópico foi movido para Sistemas Operacionais > Microsoft Windows Mas em todos os casos, vai dando uma olhada neste tópico
  22. Erso, este procedimento (utilizar um TMemoryStream - intermediário) resolve o "bug" que há no componente TQRRichEdit que ao ser associado a um TRichEdit, herda também sua cor (a do fundo) - assim se a cor de fundo do RichEdit é clWindow, ao visualizar, o texto o fundo da área aparecerá nesta cor, independente de você ter configurado com clWhite a cor do TQRRichEdit. Se isto não for um problema, e seguindo sua sugestão de utilizar outro form para alojar o QuickReport (digamos, FrmPreviewRTF), então bastaria apenas criar um procedimento neste form em que você recebe o TRichEdit do editor e no corpo do procedimento atribui o mesmo a propriedade ParentRichEdit do TQRRichEdit. Na visualização a área do texto terá a cor da do fundo do RichEdit do editor, mas na impressão este fundo não será impresso - fica "branco". No evento OnClick do botão preview na tela do editor // estou também supondo que o FrmPreviewRTF será criado em tempo de execução procedure TEditor.BtnPreviewClick(Sender :TObject); begin FrmPreviewRTF := TFrmPreviewRTF.Create(Self); try FrmPreviewRTF.PreviewRTF(RichEdit1); finally FrmPreviewRTF.Free; end; end; Procedimento no form TFrmPreviewRTF para visualização do textotype TFrmPreviewRTF = class(TForm) ... public procedure PreviewRTF(RichEdit :TRichEdit); end; ... procedure TFrmPreviewRTF.PreviewRTF(RichEdit :TRichEdit); begin QRRichText1.ParentRichEdit := RichEdit; QuickRep1.Preview; end; Isabela, algumas dicas com relação a construção do preview no QuickReport.: - Adicione uma banda detalhe sem preocupar-se com sua altura - pode ser mínima; - Coloque o TQRRichEdit nela e o importante é que você ajuste a largura; A altura, pode deixar mínima, mas habilite a propriedade AutoStretch (True); - Se você vai configurar margens e similares, você pode alterar esses parâmetros no quick sem problemas, mas lembre-se de mudar a largura do TQRRichEdit de acordo com a largura da banda detalhe (para evitar cortes ou erros na formatação); Boa sorte.
  23. Seja bem vindo. Gostaria, então, de convidâ-lo a registrar-se no forum, para os próximos contatos (de preferência, com um nick curto :D) - segue o Formulário de Registro Não há problemas em continuar com ADO, já que está seguindo a orientação de seu professor. A paleta ADO tem os componentes para acesso ao banco, a questão colocada anteriormente por mim, diz respeito a forma de entrada de dados: trocar os TEdit's (paleta Standard) por TDBEdit's (paleta Data Controls).Sugiro que você dê uma olhada de apostilas (tem um link aqui no forum). Dê uma olhada também no tópico Tutoriais & Dicas, pode ser que você ache algo que lhe ajude. A questão de existirem diferentes componentes de acesso ao banco (BDE, ADO, ...) não deve ser entendido como um problema, porque os conceitos utilizados na aplicação deles é basicamente o mesmo: viabilizar a Incluisão, Alteração, Excluisão e Visualização dos dados em um banco. Das particularidades, você vai tirando as dúvidas aos poucos. Abraços
  24. mcsmarmcs, você pode fazer uma consulta nesta tabela pegando o MAX do campo e somando 1. QryNumOrdem.SQL.Clear; QryNumOrdem.SQL.Add('select MAX(ordem) ordem from nome_tabela'); QryNumOrdem.Open; Edit1.Text := IntToStr(QryNumOrdem.FieldByName('ordem').AsInteger +1); Mas, se este campo é incrementado automaticamente pelo banco, esse procedimento não é garantia de que será o valor que seu registro receberá ao ser gravado. Vamos supor que dois usuários, cadastrando um novo item na tabela, ao mesmo tempo obtenham o código 1000 para mostrar em sua interface. O corre é que na hora que a informação for gravada, o primeiro que gravar irá receber o código 1000 (atribuído pelo banco) e o registro gravado pelo próximo usuário receberá o código 1001 (atribuído pelo banco) - o que é diferente do esperado (1000). Abraços
  25. Isto é correto, eles são criados para controle do "banco". Eventualmente, pode ocorrer de estes arquivos "sobreviverem" após a desconexão de todos os usuários e vir a gerar problema - daí é excluir na mão. Estes arquivos não tem a ver com com o acesso às pastas do servidor - é só gerenciamento do "banco". Uma coisa importante, se bem me lembro (e dei uma pesquisada para não chutar), é que nas configurações do BDE de todas as máquinas da rede o caminho em NET DIR tem que ser o mesmo - apontar para a unidade de rede onde você coloca o banco.Dá uma olhada na resposta a este post que encontrei sobre esta questão (link - forum UniDev) Abraços
×
×
  • Criar Novo...