Ir para conteúdo
Fórum Script Brasil

Capablanca

Membros
  • Total de itens

    295
  • Registro em

  • Última visita

Tudo que Capablanca postou

  1. Sugiro o seguinte: 1) DELPHI 7 - Cadastro e Estoque. Carlos Oliviero. Editora Érica; 2) DELPHI 7 - Relatórios e Ferramentas. Carlos Oliviero. Editora Érica; 3) DELPHI 7 e 8 - Vendas, Contas a Pagar e a Receber. Carlos Oliviero e William Pereira Alves. Editora Érica. Com estes livros vc. vai aprender muito. São claros e guiam o leitor passo a passo a como desenvolver o aplicativo do livro. Altamente recomendável.
  2. Olá Thomás, Recentemente eu teci diversos comentários sobre este assunto num outro TÓPICO. Dê uma olhada: http://scriptbrasil.com.br/forum/index.php?showtopic=27462 Abs.
  3. E tem mais: a única função do Moderador é MODERAR. MODERAR, segundo o Aurélio, significa REGRAR, REGULAR, REFREAR, TORNAR MENOS TENSO, ETC. O moderador exerce uma função ADMINISTRATIVA e não CONSULTIVA... Quando um moderador responde uma questão, ele não a responde na qualidade de moderador, mas de MEMBRO do fórum. Portanto amigo, nada de EXIGÊNCIAS. Quanto a sua questão em si, não sei responder.
  4. Olá colega, não tenho conhecimento sobre o assunto sobre o qual vc. está com dúvidas. Me parece que vc. está querendo ajuda sobre o desenvolvimento de aplicação para Palm, utilizando banco de dados. A título de sugestâo (que me parece bastante interessante), você conhece o livro "Desenvolvimento de Aplicações de Banco de Dados para Palm OS", do William Pereira Alves, Editora Érica? Parece interessante você dar uma "olhada" nele. Caso não queira comprar, pelo menos baixe o arquivo projeto do livro (é um exemplo de um sistema de vendas com banco de dados PDB)... Download: http://download.editoraerica.com.br/palmba...mbancodados.exe Descrição do livro: "Este livro tem o objetivo de levar aos profissionais os fundamentos do desenvolvimento de aplicações para Palm que manipulam informações armazenadas em bancos de dados. Ele está dividido em duas partes. Na primeira são apresentadas as características e recursos do Palm, descrição dos aplicativos e o processo de backup de dados com o PalmDesktop e HotSync, o ambiente de trabalho do PocketStudio, funcionamento do emulador de Palm OS (POSE - Palm OS Emulator) e o formato padrão de arquivos empregado no Palm OS. A segunda parte explica o desenvolvimento do projeto-exemplo de um sistema de vendas, formado por dois aplicativos: um escrito em Delphi, gerando arquivos para o Palm, e o outro rodando no Palm, responsável por registrar as vendas efetuadas pelos clientes. " Espero que ajude.
  5. Capablanca

    Quick Report

    Se você precisa de uma apostila em português, eu não conheço. Se você quer realmente aprender a usar o QuickReport (se vc. tiver o Delphi 7 é bem melhor você utilizar o RaveReports), é altamente recomendável você comprar o livro do Carlos Oliviero, "RELATÓRIOS & FERRAMENTAS", da Editora Érica. Com o Oliviero você aprende... Se fosse outro não diria o mesmo. Quanto ao Crystal, só conheço por ouvir falar (dizem que é muito bom). No entanto, não é uma opção que eu utilizaria. De acordo com uma revista americana especiliazada em Delphi, a ferramenta que mais os usuários usaram e, 2003 para relatórios foi: 1- ReportBuilder; 2- FastReport; 3- Rave Bex (Borland Edition Extended); 4- QuickReport Professional. Eu ficaria com o Rave versão extendida (Bex).
  6. Não há diferença em você acessar através de SQL. O exemplo que eu dei também utiliza o TRY, bem como a variável 'E'. Veja, esta variável 'E' recebe todas as informações da exceção gerada. A exceção carrega consigo uma série de informações pertinentes a ela, e estas informações estão sendo adicionadas à variável. Eu fiz um EXEMPLO com uma função chamada 'TrataErros'. Dê uma olhada e veja se ajuda em alguma coisa. Download: http://www.cordeirorodrigues.com.br/capabl.../forum/r_08.zip
  7. Pegue o componente/aplicativo NetView: http://www.torry.net/apps/utilities/networ...tview_v.2.3.zip Acho que não tem melhor componente/programa que este, pois, além de FREEWARE, você poderá alterar o código dele à vontade. Já vem pronto para usar. É só clicar e testar. O código fonte também está junto. Outros (free): http://www.torry.net/apps/utilities/networ...pstat_v.1.2.zip e http://www.torry.net/apps/utilities/networ...tstat_v.2.3.zip
  8. Já vi casos desastrosos quando se utiliza uma fonte que não possui no micro do usuário. Por esta razão, é sempre aconselhável utilizar as fontes-padrão (Arial, MS Sans Serif, Tahoma, Times New Roman, etc.). Caso você queira utilizar uma fonte totalmente diferente, você tem duas opções: 1) faça como o nosso colega já recomendou: disponibilize a fonte junto com o seu programa; 2) dependendo do caso concreto, é interessante criar uma imagem (por exemplo, no Photoshop) contendo com o texto na fonte que você quer. Depois é só colocar a imagem dentro de seu aplicativo (através do objeto IMAGE na guia ADDITIONAL). Abs.
  9. É Eros, eu também (novamente ) não consegui entender direito que o que vc. quer. Se for o que eu estou pensando, o pessoal já respondeu. Uma alternativa bastante interessante seria centralizar esta ação (bem como outras) dentro de um objeto ACTIONLIST.
  10. Pegando o gancho da dica do nosso colega: 1) Coloquei um objeto EDIT, um LABEL e um BUTTON; 2) Adicione o evento OnClick no objeto BUTTON; 3) Quando se clica no BUTTON, é pego o valor dentor do EDIT (Edit1, no caso) e o mesmo é atribuído à propriedade CAPTION do objeto LABEL. =================================================== unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; Label1: TLabel; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var Variavel: double; begin Variavel:= StrToFloat(Edit1.Text); Label1.Caption := 'R$ ' + FloatToSTrF(Variavel,ffNumber,12,2); end; end. =================================================== Abraços.
  11. Olá, Conforme mencionado, eu criei um exemplo completo (com os arquivos-fonte), utilizando um banco de dados em Access. Instalação: ======== 1) Baixe o EXEMPLO (arquivo zipado com fontes) no seguinte endereço: http://www.cordeirorodrigues.com.br/capabl.../forum/r_07.zip ; 2) Você precisa ter o Microsoft Jet instalado em sua máquina (com certeza deve ter). Caso não tenha, visite o seguinte endereço http://support.microsoft.com/default.aspx?scid=kb;pt;282010 ;: 3) A vinculação com o banco de dados é dinâmica (você não precisa recompilar o programa). Desta forma, dê um duplo-clique no arquvio "AccessADO.udl" e no campo "1. Selecione ou insira o nome de um banco de dados", localize o diretório onde você descompactou o arquivo ZIP e selecione o arquivo "MeuBD.mdb"; 4) Clique em "Testar Conexão". Se o caminho digitado estiver correto, aparecerá a mensagem "Teste de conexão concluído com êxito"; 5) Pronto. Pode testar o programa ou modificá-lo à vontade no Delphi que o banco de dados estará sempre vinculado à localização que você especificou. Observações: ========== 1) Geralmente, quando se quer utilizar este modelo que você está querendo fazer, é utilizado um DBCheckBox. No entanto, já que você quer utilizar um objeto 'DBComboBox' com algumas opções previamente definidas, para alcançar o resultado que você deseja, utilize em seu lugar um objeto 'DBLookUpComboBox'; 2) As propriedades principais do 'DBLookUpComboBox' são: - DataSource: corresponde ao 'DataSource' da sua tabela principal, que no seu caso corresponderia à tabela contendo o cadastro dos funcionários; - DataField: campo da sua tabela principal a ser preenchido (e posteriormente armazenado um valor nele); - ListSource: deve ser preenchido com um outro DataSource contendo uma lista de valores. Por esta razão, utilizei uma tabela auxiliar contendo um campo chamado opções, o qual tem dois registros contendo os valores 'Sim' e 'Não'... Se estes registros contivessem as palavras 'Amarelo', 'Azul' e 'Verde', estas seriam as opções as quais seriam listadas no objeto 'DBLookUpComboBox'; - ListField: campo da tabela auxiliar a ser exibido; - KeyField: chave primária da tabela auxiliar; Em síntese, o funcionamento é assim: O objeto 'DBLookUpComboBox' irá listar o conteúdo do campo 'opcoes' da 'TabelAuxiliar'. O conteúdo selecionado (no caso 'Sim' ou 'Não') será armazenado no campo preenchido na propriedade 'DataField' (campo este correspondente à sua tabela principal). Por ter muitos detalhes, achei necessário fazer o exemplo completo senão ficaria difícil o entendimento. Estude o exemplo e você irá entender melhor o funcionamento. Qualquer esclarecimento é só falar. Abraços.
  12. Daqui a pouco eu estou indo pra casa e faço o exemplo... Vou fazer um exemplo completo, inclusive com banco de dados, só que em ACCESS. Tudo bem? Pode ser em ACCESS?
  13. Oi, Eu estou sem o DELPHI no momento... Vou tentar criar um exemplo pra você. Qual o banco de dados que vc. está usando (só pra saber)?
  14. Não sei não. Não deve ser nada muito complicado. Se eu conseguir encontrar alguma coisa (ou ter alguma idéia) te falo.
  15. Não tenho não... Não se esqueça de colocar o diretório onde você instalou estes componentes dentro do LIBRARY. No menu, selecione TOOLS >> ENVIRONMENT >> LIBRARY e no campo LIBRARY PATH, digite ponto e vírgula ";" após o último diretório e a localização completa do diretório onde você instalou os componentes.
  16. Acho que achei o que você quer. Esquece aquele que eu recomendei. Eu encontrei dois componentes FREEWARE que encontram automaticamente a porta COM. Um deles, inclusive, tem um monitor das ligações (CONECTANDO, DESLIGANDO, etc.). O outro permite abrir a janela de diálogo contendo as configurações do MODEM que você está utilizando (semelhante ao discador UOL). Juntando os dois, acho que você consegue criar um SUPER DISCADOR. Primeiro Componente: ==================== http://www.torry.net/vcl/comms/tapi/d_tapi.zip Segundo Componente: =================== http://www.torry.net/vcl/comms/tapi/tapidial.zip Eles possuem até um exemplo pronto para ser usado. Esquece aquele primeiro que eu recomendei. Qualquer problema avisa.
  17. Uhhh, não vai não. Você poderia abrir uma caixa de diálogo pedindo para o usuário indicar a porta de comunicação que ele deseja utilizar (vai de COM1 a COM4). Simples. Com certeza deve haver algum outro componente que capture a porta automaticamente. No momento não sei qual e nem como implementar isso.
  18. Olá, 1) Pegue o componente 'TDialer' em http://www.torry.net/vcl/comms/dialup/dialer32.zip e instale em algum diretório; 2) Abra o Delphi; 3) No menu, selecione PROJECT - ADD TO PROJECT - e selecione a unit 'Dialer.pas' (a qual se encontra no diretório em que vc. instalou o componente); 4) Selecione sua UNIT (ou o seu form) novamente; 5) Aperte as teclas ALT + F11 e selecione a Unit 'Dialer'; 6) No seu FORM, adicione um botão; 7) No evento 'OnClick' do botão, digite o código abaixo de modo que o procedimento fique da seguinte forma: ================================================= procedure TForm1.Button1Click(Sender: TObject); var TempDialer : TDialer; begin TempDialer:=TDialer.Create(Self); with TempDialer do begin ComPort:=dpCom3; Confirm:=true; Method:=dmTone; NumberToDial:='1(222)333-4444'; Execute; Free; end; end; ================================================= Pronto. Você poderá configurar: - ComPort: a porta com a qual deseja trabalhar; - Method: tom ou pulso; - NumberToDial: o número do telefone a ser discado; Dica: Dê uma olhada em alguns componentes TAPI (Microsoft's Telephony API) em http://www.torry.net/pages.php?id=199. Algum deles poderá fornecer mais recursos. Abraços.
  19. Uma outra forma que parece que deu certo. Basta configurar a propriedade 'WindowState' do seu FORM para MAXIMIZED... Eu fiz o teste em 800x600 e depois fui para 1024x768 e a janela foi automaticamente maximizada.....
  20. SOLUÇÃO "LUSITANA" (com todo respeito aos portugueses)... Se você não deseja que o usuário possa reajustar o tamanho da janela (em outras palavras, que a janela esteja sempre maximazada), você poderá fazer o seguinte: 1) coloque um componente TIMER no seu FORM (digamos Form1); 2) Na propriedade interval do TIMER deixe 1000 (é igual a um segundo); 3) Dê um duplo-clique no evento OnTimer do objeto TIMER e digite o seguinte código entre o BEGIN e o END do procedimento: ======================== Form1.WindowState:=wsMaximized; ======================== As instruções acima fazem com que a cada segundo a janela Form1 é maximizada. Logo, se você tiver numa resolução de 800x600 e muda para uma maior, no próximo segundo a janela será ajustada no tamanho da resolução. Sinceramente, eu não gostei muito da solução... Se eu encontrar uma outra idéia eu posto aqui.
  21. Vixe, agora que eu percebi... O que eu respondi não é o que vc. quer... Desconsidere a resposta anterior.
  22. Oi Alessandro, Existem duas maneiras de conseguir este resultado: PRIMEIRA ================================== procedure TForm1.FormCreate(Sender: TObject); begin WindowState := wsMaximized; end; ================================== SEGUNDA ================================== procedure TForm1.FormCreate(Sender: TObject); begin Width := Screen.Width; Height := Screen.Height; Left := 0; Top := 0; end; ================================== Abs.
  23. Olá Eros, estou querendo entender sua questão mas não estou conseguindo (se alguém entender, avisa). Será que dá pra vc. explicar melhor (até mesmo enviar imagens das janelas)?
  24. Bem, deve-se manipular exceções com o o objetivo de tratar erros de execução e proteger recursos. Os comandos geralmente utilizados são TRY...EXCEPT e TRY...FINALLY. O TRY...EXCEPT você já está usando. o TRY...FINALLY funciona da seguinte maneira: todas as instruções devem ser colocadas dentro do bloco TRY e a instrução ou, as instruções que, em hipótese alguma, podem deixar de ser executadas, devem ser colocadas no bloco FINALLY. Em outros termos, não importa o que aconteça no bloco TRY, as instruções dentro do FINALLY sempre serão executadas. Sintaxe: ============== Try <instrução>; Finally <instrução>; end; ============== Bem, estes comentários iniciais certamente já são de seu conhecimento. As exceções que são geradas através de banco de dados são tratadas de forma um pouco distinta das exceções "normais". A principal diferença está na utilização da classe 'EDatabaseError', que é a classe mais alta das exceções de banco de dados do Delphi, ou seja, todas as exceções de banco de dados do Delphi são derivadas desta classe. Logo, teremos outras classes abaixo de EDatabaseError. Veja um exemplo: =================================== Try Table1.Post; Except On EDatabaseError do ShowMessage('Não foi possível gravar o registro!'); Raise; end; =================================== Obs.: A palavra reservada RAISE, utilizada no exemplo acima, de um modo geral, possui duas utilidades: 1) pode ser usada para gerar novamente uma exceção que já tenha sido manipulada, visto que, uma vez tratada, a exceção é destruída; 2) utilizada para gerar manualmente uma exceção, simulando uma condição de erro (v.g., "RAISE Exception.Create ('Mensagem para o usuário!');"). Voltando ao assunto, o grande problema de seu utilizar a classe de exceção 'EDatabaseError' é que ela não especifica que tipo de exceção ocorreu, somente retorna um erro genérico qualquer. Para contornar este problema, podemos utilizar a classe EDBEngineError para obter mais informações específicadas da exceção. A classe 'EDBEngineError' é descendente direto de 'EDatabaseError', mas possui algumas propriedades adicionais úteis para um tratamento mais refinado de exceções. Dentre elas, destaca-se o array ERRORS, o qual possui uma série de propriedades, dentre as quais: Algumas propriedades do ARRAY ERRORS: ============================ - ErrorCode: retorna o código do erro, quando for um erro de BDE (por isto que eu queria saber se vc. usava o não BDE); - Category: retorna a categoria do erro referenciada em ErrorCode; - SubCode: retorna o sub-código do erro. Especifica mais informações sobre o erro ocorrido; - NativeError: utilizado somente quando se está conectado a um servidor de banco de dados. Se o retorno do NativeError for igual a zero, então não é erro do servidor, caso contrário, o código do erro é retornado; - Message: Estando conectado a um servidor SQL, você retornará a mensagem do servidor, caso contrário, retornará a mensage do BDE. Exemplo: ============================================================= procedure TForm1.Button1Click(Sender: TObject); begin try table1.post; ShowMessage('Registro gravado com sucesso.'); table1.Refresh; except on E:EDBEngineError do begin if E.Errors[0].ErrorCode=9729 then Raise Exception.Create ('Violação da chave primária') else begin ShowMessage('Erro geral de gravação.' + E.Message); Table1.Cancel; end; end; end; end; ============================================================= A variável 'E' no código acima recebe todas as informações da exceção gerada, para posteriormente ser utilizada em nosso formulário de saída de mensagens. Por fim, vale a pena observar que existem alguns eventos dos componentes 'TDataSet' que são bastante interessantes e apropriados para manipulaçao de exceções, tais como, 'OnPostError', 'OnEditError' e 'OnDeleteError'. Um exemplo já foi dado pelo nosso colega ALESSANDRO acima. Espero ter mostrado uma "luz" para você. Abraços.
  25. Beleza... Até à noite eu posto alguns comentários aqui. Estou sem o Delphi no momento.
×
×
  • Criar Novo...