
Thales Pontes Martins
Membros-
Total de itens
453 -
Registro em
-
Última visita
Tudo que Thales Pontes Martins postou
-
Fala! Bom, a versão atual acho que é o Borland Developer Studio 2006, que não tenho certeza mas acho que vem inclusive com Delphi para Win64. Eu também tenho que aprender um banco, e optei por Postgre e em seguida por MySQL que são Free e por isso deverão ter mais preferencia no mercado. Até.
-
Como Eu Coloco Data Dentro De Um Status Bar ?
uma questão respondeu Thales Pontes Martins em Delphi, Kylix
Eu acho que você não me entendeu, desse jeito que eu falei é obrigado a funcionar, passo a passo faça o seguinte -> 1- Vá até a paleta System e escolha o componente Timer, seu ícone é um relógio de ponteiro, e coloque esse componente no form. 2- Selecione esse componente e aperte F11 para ver o Object Inspector dele. 3- Assegure-se de que a propriedade Interval dele esteja 1000 e a Enabled esteja True. 4- Exiba a guia de Eventos desse componente e crie um novo procedimento para o evento OnTimer. O único que existe se bem me lembro. O procedimento deverá estar mais ou menos assim -> Procedure Tfrm_cadfun.Timer1Timer(Sender : TObject); Begin status.Panels[0].Text:= FormatDateTime(' dddd ", " dd " de " mmmm " de " yyyy', Now); status.Panels[1].Text:= TimeToStr(time); end; 5- O procedimento do evento OnShow do Form deverá estar assim -> procedure Tfrm_cadfun.FormShow(Sender: TObject); begin status.Panels[2].Text := ' Faça o cadastro de seus Funcionários para ter mais controle no negócio '; end; Dessa maneira quando você exibir o form o relógio é obrigado a funcionar normalmente. Espero que funcione, qualquer coisa não deixe de me avisar. Aí cara acabei de testar aqui em casa e funcionou perfeitamente dessa maneira que eu citei. Se você quiser deixar os comandos que atualizam a hora também no OnShow do form é melhor, porque se não demora 1 segungo para aparecer a hora depois que você abre o form. Falou. -
Evitar Abrir Duas Janelas Iguais
pergunta respondeu ao Kindelis de Thales Pontes Martins em Delphi, Kylix
Que idiota que eu sou, na verdade oque você fez foi amesma coisa que eu postei aqui, só que no meu caso a variavel Form2 não estava declarada na mesma unit que o tipo TForm2, estava declarada na unit principal, por isso eu tive que fazer essa volta toda de passar o ponteiro como parametro. E no seu caso eu não lembrei que você estava fazendo da maneira normal. :ph34r: -
Como Eu Coloco Data Dentro De Um Status Bar ?
uma questão respondeu Thales Pontes Martins em Delphi, Kylix
porque você não coloca um TTimer no form e coloca esse código dentro do evento OnTimer dele. Coloque a propriedade Interval dele para 1000. e a Enabled para true. Se o seu programa for fazer algum procedimento demorado deverá fazer-lo em outro thread para que o relógio não pare. ;) -
ooooooo, Paulo, esquecí de dizer uma coisa: nesse seu comando { SystemParametersInfo( SPI_SETDESKWALLPAPER,0, Nil, SPIF_SENDWININICHANGE ); } -> você falou que não sabe oque significam os parametros, mas para trocar o papel de parede não precisa de mecher no registro, é só substituir o terceiro parametro de nil para um ponteiro para o caminho do novo papel de parede -> var st : string; begin st:='H:\Dados\Playboy\Adriana Lima.bmp'; //Todos os meus papéis de parede estão na pasta Playboy, hehehe! systemparametersinfo(SPI_SETDESKWALLPAPER,0,pointer(st),SPIF_SENDWININICHANGE); end; Aqui o segundo parametro não significa nada. No 3º Parametro não se pode colocar @st porque o tipo string já é um ponteiro, então essa expressão retornaria um ponteiro para o ponteiro, e oque se quer é um ponteiro para o texto. Falou!!!
-
hahaha, eu também não consegui ver da primeira vez porque estava entrando na pasta -> C:\Documents and Settings\Thales\Dados de aplicativos\Microsoft ao invés de C:\Documents and Settings\Thales\Configurações locais\Dados de aplicativos\Microsoft como o caminho é muito grande agente acaba resumindo um pouco, hahaha! é o seguinte, os parametros dessa função(SystemParametersInfo) dependem doque se está querendo fazer, oque é informado no primeiro parametro. SPI_SETDESKWALLPAPER -> mudar o papel de parede, constante igual a 20. SPI_GETDESKWALLPAPER -> pegar o caminho do papel de parede, constante igual a 115. essa constante não é declarada no delphi, por isso eu tive que colocar seu valor(115). bom, quando o primeiro parametro é pegar o papel de parede(115) os outros parametros tem o seguinte significado -> segundo parametro -> quantidade máxima de caracteres que pode ser gravada no endereço especificado no terceiro parametro. terceiro parametro -> endereço de uma variavel que poderá receber uma quantidade de caracteres especificada no segundo parametro. quarto parametro -> não faço a menor idéia, só copiei o que você escreveu primeiro. O Delphi 2006 tem uma explicação detalhada sobre todas as operações que se pode fazer com esse comando(SystemParametersInfo), se quiser posso te mandar.
-
Voce está fazendo da maneira correta. Não é possivel passar um JPG como papael de parede, tem que converter para bitmap e deixar num arquivo temporário. É exatamente oque o Windows faz. Aqui no meu o arquivo temporario é C:\Documents and Settings\Thales\Configurações locais\Dados de aplicativos\Microsoft\Wallpaper1.bmp. esse comando coloca o caminho do arquivo temp na variavel pc que é do tipo array [1..255] of char. SystemParametersInfo(115,255,@pc,SPIF_SENDWININICHANGE );
-
Evitar Abrir Duas Janelas Iguais
pergunta respondeu ao Kindelis de Thales Pontes Martins em Delphi, Kylix
Depois que o form é destruído a variável não é automaticamente igualada a nil, então a solução é a seguinte -> Passe o ponteiro como parametro no método create do form -> Type PForm = ^TForm; TForm2 = Class(TForm) . . . Public {Public declarations} _inst : PForm; constructor Create(AOwner : TComponent; inst : pointer); . . . implementation constructor TForm2.Create(AOwner : TComponent; inst : pointer); begin inherited Create(AOwner); _inst:=inst; show; end; Bom aí no form deve ter algum botão para fechar ele, então onde for pra fechar você coloca assim -> hide; _inst^:=nil; free; se for no botão fechar do form você coloca -> procedure TForm2.FormClose(sender : tobject; var action : TCloseAction); begin Action:=canone; hide; _inst^:=nil; free; end; aí quando você for chamar o form do programa principal você coloca -> if (Form2 = nil) then Form2:=TForm2.Create(Application, @Form2); -
você está querendo dizer que você cria os menus em runtime com -> TPopUpMenu.Create ou -> NewPopUpMenu ? Se você faz isso, você tem que criar apenas uma vez e armazenar em uma variável do tipo TPopUpMenu, claro. porque se cada vez que você clicar com o botão direito você chamar um desses métodos de criação, a classe anterior vai perder a referencia e a variável vai conter o endereço de uma nova classe TPopUpMenu que foi recém criada e portanto conterá todos os MenuItem's com propriedade checked igual a False.
-
Tem jeito de deixar os gráficos do canvas mais suaves, tipo quando eu desenho uma linha inclinada parece redimensionamento "nearest neighbor", não tem como deixar suave tipo a renderização das fontes TrueType? Entendem?
-
é isso aí oque vem depois do read pode ser uma váriavel do mesmo tipo que a propriedade ou uma função que retorne o mesmo tipo que a propriedade, pra no caso de ser preciso algum calculo para se achar o valor, ou ser preciso executar certas ações antes de se retornar o valor; oque vem depois do write pode ser também uma variável do mesmo tipo que a propriedade ou uma procedure que tenha apenas um parametro e que esse seja do mesmo tipo da propriedade. Tipo, se ao alterar uma propriedade não se pode apenas escrever em uma variável, passe o valor a uma procedure que ela saberá oque fazer. Aí você pode executar qualquer tipo de código quando for atribuido um valor a uma propriedade, como por exemplo a repintagem do componente se a mudança da propriedade representa mundança no que está sendo mostrado na tela, por exemplo a cor de um elemento; mudou a cor tem que repintar porque ela não vai mudar na tela sozinha. A mesma coisa acontece quando você muda a propriedade Caption de uma label ou do form, tem um método SetCaption que escreve tudo e atualiza tudo na tela.
-
E aí gente? Eu gostaria de saber se tem como saber quantos bytes de memória ram o meu programa está utilizando. É porque enquanto roda, meu programa faz uma série de criações e destruições de Classes e queria saber se está sobrando algum lixo pelo caminho. Depois pretendo utilizar o recurso para outros própositos também. Obrigado.
-
Como Fazer Aplicação No Systemtray
pergunta respondeu ao GameOver de Thales Pontes Martins em Delphi, Kylix
O Delphi 2006 vem com o componente TTrayIcon. é só você colocar um no form. Em tempo de execução, toda vez que você setar a propriedade visible dele para true ele aparece no tray. aí é só configurar aguns eventos e atribuir um popupmenu a ele. Se você não tiver o Delphi 2006 você pode baixar este componente em algum lugar, como no site do torrys por exemplo. Para o programa ir para o tray em vez de fechar coloque no evento OnClose do form principal procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin Action:=canone; hide; TrayIcon1.Visible:= true; end; aí você coloca um botão restaurar num TPopUpMenu associado ao TTrayIcon e no OnClick dele coloque TrayIcon1.Visible:=false; Show; e um botão fechar Application.Terminate -
Obrigado por responder, Micheus. Mas eu acho que não entendeu bem a minha pergunta. A respeito dos métodos de leitura e gravação de propriedades eu já sabia, no caso do TFont esses métodos pertenceriam a TCanvas. Eu perguntei se a própria classe que será copiada pode ter um método de atribuição dela mesma, tipo -> UmaClasse := OutraClasse; Onde UmaClasse e OutraClasse não são propriedades de um componente, eu apenas declarei elas soltas no meu programa. Entendeu? Por exemplo -> procedure Algo; var list1, list2 : TStrings; begin list1:=TStringList.Create; list2:=TStringList.Create; list1.add('Alguma Coisa'); list2.add('Outra Coisa'); list1:=list2; end; Oque irá acontecer quando eu der o comando list1:=list2; ? Fiz um teste aqui e acabei de constatar que nesse caso somente os ponteiros são igualados. Isso explica todos os problemas que tive certa vez ao fazer um programa que trabalhava muito com TStrings, porque eu achava que funcionava da mesma forma que variáveis do tipo registro, ou seja, quando você atribui com := os dados são copiados de uma variável para outra, aí se você mudar uma a outra continua igual... Mas com classes, se você atribuir da meneira mostrada -> list1:=list2; tudo que você mudar numa muda na outra também, porque elas passam a ser a mesma. Nesse caso o método mais apropriado é o assign, não é mesmo?
-
Mas e quanto as outras classes? então você está querendo dizer que na implementação de um classe eu posso implementar um método para ser executado quando houver a atribuição := ????? e se não houver esse método, aí ocorre a cópia dos ponteiros????
-
(Resolvido) Tranformar Richedit Em Um Bitmap
pergunta respondeu ao Erso de Thales Pontes Martins em Delphi, Kylix
Aí vai um código que transforma um RichEdit em Bmp mantendo a formatação de fonte exata. Adapte aí. procedure TForm1.Button1Click(Sender: TObject); var bmp : TBitmap; rec, rec2 : TRect; begin rec.Left:=Richedit1.left; rec.Top:=richedit1.Top; rec.Bottom:=richedit1.Top+richedit1.Height; rec.Right:=richedit1.Left+richedit1.Width; bmp:=TBitmap.Create; bmp.Height:=richedit1.Height; bmp.Width:=richedit1.Width; rec2.Top:=0; rec2.Left:=0; rec2.Right:=richedit1.Width; rec2.Bottom:=richedit1.Height; bmp.Canvas.CopyRect(rec2,Canvas,rec); bmp.SaveToFile('i:\rich.bmp'); bmp.Free; end; Na verdade copia qualquer componente ou qualquer parte do form. Nesse caso o meu form tinha um TRichEdit e um TButton. -
Eu acabei de responder o tópico "como transformar richedit em um bitmap", e eu disse para o rapaz igualar a propriedade Font do RichEdit e do Canvas -> Canvas.Font:=RichEdit1.Font Bom o tipo TFont é uma classe, portanto a expressão sizeof(Font) retorna 4, porque as classes são na verdade ponteiros para onde estão os dados, e ponteiros tem 4 bytes. Pergunta: Quando você dá o comando Canvas.Font:=RichEdit.Font, ele apenas copia o ponteiro sendo que Canvas.Font passará a acessar os mesmos dados que RichEdit.Font, ou ele não mexe nos ponteiros e sim copia todas as propriedades e campos de uma classe pra outra?
-
(Resolvido) Tranformar Richedit Em Um Bitmap
pergunta respondeu ao Erso de Thales Pontes Martins em Delphi, Kylix
Claro que dá, O Canvas tem uma propriedade Font, e o RichEdit tem também uma propriedade Font, iguale as duas, depois iguale a cor do fundo e tudo mais. -
(Resolvido) Tranformar Richedit Em Um Bitmap
pergunta respondeu ao Erso de Thales Pontes Martins em Delphi, Kylix
porque que você não tenta usar Bitmap.Canvas.textout(x,y,Richedit.lines[n]) Aí você vai ter que fazer um algoritmo pra ordenar isso dentro do bitmap, não é difícil. -
-- Censurado -- coloca o arquivo no mesmo diretório que o executável, aí para abrir o arquivo use var arquivo : integer arquivo:=fileopen(extractfiledir(paramstr(0))+'\nomedoarquivo',$42); e para ler useFileRead(arquivo,buffer,sizeof(buffer)); onde buffer é qualquer variável. Use fileseek para mudar o ponteiro do arquivofileseek(arquivo,offset,origem); onde offset é quantos bytes deseja movimentar e origem é 0 - do inicio do arquivo 1 - posição atual 2 - fim do arquivo se você disser de que tipo é o arquivo eu posso achar rotinas mais específicas.
-
escreva esse código e rode o programa. Dá pra criar quantas labels você quiser ou qualquer outro componente. unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; edt : array of Tlabel; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin setlength(edt,length(edt)+1); edt[length(edt)-1] := Tlabel.create(Form1); edt[length(edt)-1].name := 'label'+inttostr(length(edt)); //não podem existir duas edits //com o mesmo nome edt[length(edt)-1].width := 100; edt[length(edt)-1].height := 16; edt[length(edt)-1].top := length(edt)*edt[length(edt)-1].height; edt[length(edt)-1].left := 0; edt[length(edt)-1].parent := form1; end; end. Valeu pela dica Danilo, muito boa.
-
Tgraphiccontrol, Timagelist
pergunta respondeu ao Thales Pontes Martins de Thales Pontes Martins em Delphi, Kylix
Tem alguma coisa errada aí, num era pra aparecer retangulos brancos não. Eu não faço a menor idéia de como se cria um editor de propriedades, mas eu acho que se eu colocar uma propriedade do tipo tbitmap ele já abre um interfacezinha lá no object inspector pra eu escolher a imagem, não? estava pensando em colocar todos os bitmaps numa imagem só e passar pra propriedade, depois eu uso: Bitmap.canvas.copyrect(dest, bmp.canvas, source); onde dest e source são os TRect's e bitmap é o que eu vou adicionar na lista e bmp é o que contém todos. Só uma pergunta: eu to escrevendo o componente e debugando, aí eu instalo pra testar, aí se eu quiser mudar uma linhazinha e testar denovo eu vou precisar de instalar tudo denovo? Ou só mudando a unit já muda o componente instalado? -
procedure TForm1.image1click(sender: tobject); begin savedialog1.filename:='avg.exe'; // só um exemplo if savedialog1.execute then // execute será true se o usuario clicar em salvar e false se clicar em cancelar begin // coloque o código pra salvar o arquivo aqui // tipo : //image1.picture.savetofile(savedialog1.filename); end; end;
-
Tgraphiccontrol, Timagelist
pergunta respondeu ao Thales Pontes Martins de Thales Pontes Martins em Delphi, Kylix
Poderia ser em tempo de design, porque os bitmaps da lista não irão mudar... Mas comé que eu vou acessar o object inspector de uma classe que eu declarei ali dentro da minha classe, eu teria que ter colocado ela em algum form como componente, não é? Mas eu acho que já tenho a solução: O image editor que vem com o delphi 6 (não achei no 2006) tem um rescurso de criação de resource files... você coloca todos os bitmaps lá e cria o .res, depois você coloca na unit do componente {$RESOURCE Comp.res}, aí pra carregar o bitmap você usa bitmap.handle:=loadbitmap(hinstance,strpcopy(@chararray,'nome do bitmap')); onde chararray é do tipo: array[1..max] of char; me diga se estou certo. ou ainda é possivel colocar uma propriedade no componente do tipo tbitmap pra no tempo de design eu colocar o bitmap lá, a escolha do programador. Qualquer outra sugestão, aprecio. -
Estou fazendo um componente derivado de TGraphicControl, e este componente tem que desenhar uma série de bitmaps pré definidos, então eu declarei uma var. do tipo TImageList na classe para comportar os bitmaps (porque já tem os métodos de DragDrop e tudo mais...). Só que eu queria saber como eu faço para carregar os bitmaps lá, tipo, eu quero criar uma lista já com os bitmaps carregados pra poder desenha-los. Alquem sabe como posso fazer isso? Eu acho que tem a ver com os arquivos .res, tipo se a unit do meu componente é "Comp.pas" tem um arquivo "Comp.res" que armazenaria os bitmaps, só que eu não sei como eu faço isso. Obrigado.