Ir para conteúdo
Fórum Script Brasil

Thales Pontes Martins

Membros
  • Total de itens

    453
  • Registro em

  • Última visita

Tudo que Thales Pontes Martins postou

  1. Opa, eu descobrí que ao desenhar uma imagem, se você apenas substituir um pixel do fundo pelo pixel da imagem que você quer desenhar, ele fica normal, mas se ao invés disso você subtrair do pixel do fundo o inverso do pixel da imagem, ela fica SEMI-TRANSPARENTE!!! :) E não precisa nem ter máscara porque nesse caso a cor branca não influencia. E se fizer um AND lógico também funciona. :) Então se Pegarmos os pixels de um bitmap e fizermos essa operação bit a bit neles, uma imagem vai ser desenhada SEMI-TRANSPARENTE na outra!! :) . Só que eu não sei como fazer isso, teremos que achar o endereço de memória onde estão esses pixels. Me ajudem aí por favor!!!! Valeu!!!
  2. Opa, sempre existe uma solução, dei uma modificada no meu velho TDragOperation e consegui modificar a imagem durante a operação DragDrop. Mais agora tá faltando eu saber desenhar a imagem SEMI-TRANSPARENTE!!!. alguém aí sabe como fazer, se tem algum método no ImageList que faz isso, pra ficar que nem o ImageList.ShowDragImage;? Ou se não tiver no ImageList, se tem algum outro componente que faça isso??????? Qualquer sugestão é bem vinda. :wacko:
  3. É, não tem jeito, já apaguei .dcu, já apaguei .pas, já botei .pas em todos os lugares e não mudou nada, fica como se eu não tivesse mexido no código. Desisto. Obrigado Micheus e s3c pela consideração.
  4. Bom, já que se acabaram as idéias, eu vou dizer uma e vocês dizem se funciona: Dei uma olhada no código fonte do TImageList <- TDragImageList <- TCustomImageList. Essa é a hierarquia. E no TCustomImageList tem um campo private FBitmap, que armazena o ponteiro para o próprio objeto Bitmap. O que que vocês acham de eu mudar o código: pegar esse campo e declarar na interface protected, e depois eu ir no TDragImageList e mudar o método create dela: Acrescentar um parametro que vai ser a variável que vai receber esse valor do FBitmap? Assim quando eu criar o objeto eu posso guardar a referencia pra esse bitmap pra ter acesso a ele. Não sei nem se vai funcionar, porque certa vez precisei de mudar o código fonte dessas units do Delphi e não aconteceu nada, foi como se eu não tivesse mudado nada.
  5. Acho que o poder subiu a cabeça de vocês. Não podem nem ficar milionários que já acham que são melhores do que os outros. Rico é assim, quanto mais tem mais quer, não basta serem bilionários e ainda querem dominar o mundo.
  6. Opa, s3c, desse jeito eu conseguí ler e escrever no Bitmap, só que quando eu desenhava nele, não era atualizado no Bitmap do ImageList, somente no meu, o que nos leva a crer que nesse caso é feita uma cópia :( .
  7. Eu já vi vários coders por aí na net que deram exemplos sobre esse comando(GetImageBitmap) e todos disseram: "É, tentei várias vezes e não conseguí nem ler nem escrever no bitmap, não consegui transformá-lo em um objeto TBitmap normal que pudesse manipular.". Então eu acho que agente não está sabendo pegar esse handle e transformá-lo em um obejeto TBitmap normal que se pode manipular. Talvez esteja faltando agente colocar também um handle no Canvas desse Bitmap, ou pegar algum Device Context, se lá. É mais ou menos isso que estou fazendo, eu tenho um vetor de pontos tridimensionais (X, Y, Z : Extended) que formam os polígonos, aí eu tenho uma função que projeta esses pontos num plano mediante fornecimento de uma camera (H, V : Extended), que na verdade é um angulo de inclinação horizontal, e um vertical. Tá meio errada ainda, tem que dar uma lapidada.
  8. Ahh, lembrei de mais uma coisa. A imagem tem que ser mudada durante um operação de drag, tipo eu chamo BeginDrag, aí eu chamo dragmove, mudo a imagem, chamo dragmove denovo, mudo a imagem, chamo dragmove denovo................................ Será que com seu método funciona? Eu estou querendo desenhar uma imagem se mexendo(dessa vez eu quero o blend, por isso usei ImageList, hehe) e enquanto ela se mexe, o angulo dela também muda, então eu tenho que recalcular a posição dos pontos e redesenhar a imagem para o próximo dragmove. Por isso eu queria atualizar ele diretamente na memória onde está alocado, tipo pra ele nem saber que eu a modifiquei. A imagem é formada somente por algums poligonos e linhas(TCanvas.Polygon e TCanvas.LineTo). Valeu.
  9. Bem, aí eu não sei, mas eu pretendo desenhar uma imagem nova umas 60 vezes por segundo, e ainda tem que sobrar tempo de processador. Por isso disse que quanto mais leve melhor. Vai ver também eu estou tendo uma noção errada de quanto processador isso vai consumir, vai ver eu uso esse seu método e quando eu for ver o task manager tá 0% de consumo de processador :unsure: . Vou continuar tentando, se não conseguir vou usar o método proposto por você. Se descobrir qualquer coisa posta aí, por favor.
  10. Opa, descobri que quando eu faço bmp.handle:=ImageList.GetImageBitmap; e depois bmp.savetofile();, ele salva o arquivo com a imagem corretamente, mas se eu tentar desenhar alguma coisa nele ou tentar desenhar ele no form, aí não faz nada.
  11. É, é, é, é... Se não achar outra alternativa vou ter que fazer assim mesmo, mas você concorda que se eu desenhar diretamente no Bitmap do ImageList o programa ficará mais rápido? E nesse caso estou precisando de uma coisa leve, quanto mais melhor. O que não aceito é o fato de não conseguir usar o método GetImageBitmap, que deve servir pra alguma coisa, senão não existiria, concorda? E pelo que eu lí na Ajuda do Delphi, esse método serve justamente pra isso que eu quero fazer.
  12. Lá vai eu denovo com os ImageList's da vida. É o seguinte, eu tenho um ImageList com uma imagem e uma máscara para ela; Agora eu estou precisando de modificar essa imagem dentro do ImageList sem ter que limpar e adicionar outra. Pois bem, eu lí que na verdade o ImageList armazena todas as imagems um um único Bitmap grandão. e lí também que o método TImageList.GetImageBitmap retorna o handle desse Bitmap grandão. Então eu estou pegando esse handle e colocando num objeto TBitmap pra ver se eu consigo desenhar alguma coisa lá -> bmp.Handle:=ImageList.GetImageBitmap;. Só que eu não estou conseguindo ler nem escrever nada lá, todas as operações que eu faço depois com esse bitmap resultam em nada. alguém sabe como poderia ser feito isso? Obrigado.
  13. Agente ganha alguma coisa pra ser moderador ou monitor???? Se não, porque então as pessoas querem ser um?
  14. Opa, valeu Graymalkin. Eu me lembro de ter visto esse pontilhado ná página de um tópico e na lista de tópicos do fórum Delphi. E quanto a esse fórum que você disse que perguntou, agente não tem acesso a ele, né? É só para os moderadores?
  15. É, eu também acho que é quando a pessoa está escrevendo num tópico, mas as vezes eu vejo isso e depois o usuário sai sem ter escrito nada, será que ele estava escrevendo e desistiu?
  16. Sim está errado, depois do FindFirst tem que adicionar a lista o primeiro nome que ele acha, o FindNext retorna apartir do segundo. Tanto a maneira que o Graymalkim falou quanto a minha estão certas. Eu uso o Internet Explorer mesmo, e sempre vejo isso. Obreigado
  17. O rapá, depois da linha FindFirst(PastaPesquisa+'\*.*', 0, Busca); va tem que adicionar Lista.Add(Busca.Name);. Mas e quanto as pastas . e ..? Não aparecem aí não? você não tem que testar pra ver se é arquivo e não pasta? Lá em baixo da página onde está escrito: "4 usuários estão acessando o fórum" "3 mebros: Thales Pontes Martins, Graymalkim" Aí vamos supor que o seu nome esteja sublinhado com pontilhado ao invés de linha contínua, o que significa?
  18. Já que o Paulo começou esse assunto de curiosidades, eu gortaria de saber o que significa quando o nome de um usuário que está acessando o fórum está subpontilhado, ou seja sublinhado com pontilhado?
  19. Não sei se você chegou a usar aquela rotina que eu postei no tópico Escolher Um Arquivo Aleatório, mas aquela rotina funciona justamente para pegar a lista de arquivos de uma pasta e passar pra um TStringList. Agora, para fazer um arquivo da pasta inicializar não inicializar aí tem que apagar ele daquela pasta mesmo. Pelo que entendí você gostaria que o usuário pudesse marcar ou desmarcar um programa da lista, né? Nesse caso acho que quando o usuario desmaracar um item, você terá que move-lo dessa pasta para outra. A lista deverá listar o conteúdo dessas duas pastas, os que estiverem marcados são da pasta inicializar, e os que não estiverem são da pasta de backup. Aí quando o cara marcar algum você deverá mover da pasta de backup para a inicializar denovo. Ou ainda, quando o cara desmarcar algum o seu programa pode mudar a extensão do arquivo para que o mesmo não seja exevutado, tipo: de 'Calc.lnk' para 'Calc._nk'. Ou de 'Excel.exe' para 'Excel._xe'.
  20. É isso na maioria das vezes é prática de má programação. É claro que esse foi um exemplo idiota, mas na programação pesada muitas vezes ocorre de se deixar passar algum ponteiro sem liberar. Eu mesmo estava escrevendo um programa que estava funcionando tudo legal, aí eu pensei que num estava acontecendo leak nenhum, mas quando eu resolví colocar um GetHeapStatus lá, eu percebi que a cada vez que eu fazia um DragDrop a Heap.TotalAllocated aumentava em 1KB, aí eu dei uma revisada no código e ví que tinha esquecido de liberar algums ponteiros. Aí ficou tudo certo. Agora, ele disse que não percebeu nenhum leak, mas eu não sei o que ele fez pra verificar que realmente não tinha nenhum leak. Vai ver ele só deu uma olhada assim... é num tem nada não....
  21. Memory leaks é quando você destrói um objeto que não vai ser mais usado e sobra alguma memória ainda alocada mais que perdeu a referencia e não é mais vista pelo seu programa. E aquela parte não poderá ser usada por outro programa porque ainda é considerada como alocada pelo sistema operacional. Tipo se você tem um objeto-> Objeto = Class(TObject); private bmp, foto : TBitmap; public procedure Create; override; procedure Destroy; override; end; implementation procedure Objeto.Create; begin inherited Create; bmp:=TBitmap.Create; Foto:=TBitmap.Create; end; procedure Objeto.Destroy; begin bmp.Destroy; inherited Destroy; end; nesse caso ocorrerá um leak porque o objeto foto ainda existirá na memória já que não foi destruido, e perderá completamente a referencia pelo programa que não poderá acessa-lo. E o objeto ficará alocado não deixando que outros programas usem aquela memória.
  22. Deixa ver se entendí, você quer usar um TFindDialog pra achar uma string num memo? Bom, o TFindDialog não procura nada, eu acho, ele só le a string que o cara quer achar. Então você teria que implementar um algoritmo pra achar: você teria que sair varrendo todas as strings letra por letra, aonde você encontrasse uma letra que fosse igual a primeira da string que o cara quer achar e ainda restasse letras suficientes para completar a string você verificava se oque seguia era a string procurada. Se não fosse case sensitive aí você teria que fazer um uppercase em ambas e comparar. Ficaria mais ou menos alguma coisa um pouco parecida com isto-> function sc(cond: boolean; vt, vf : char) : char; begin if (cond) then result:=vt else result:=vf; end; function find(list : TStrings; st: string; lin, col : integer; cases : boolean) : TPoint; var muito : string; ch : char; begin if not(cases) then st:=uppercase(st); ch:=st[1]; dec(lin); while (lin < list.count-1) do begin inc(lin); dec(col); while (col <= (length(list[lin])-length(st))+1) do begin inc(col); if (sc(cases,list[lin][col],upcase(list[lin][col])) = ch) then begin muito:=copy(list[lin],col,length(st)); if not(cases) then muito:=uppercase(muito); if (muito = st) then begin result.x:=col; result.y:=lin; exit; end; end; end; end; showmessage('String não encontrada'); end; Não sei se está certo porque não testei, dá uma debugada aí. Declarei uma variável que eram as letras M e T e o forum substituiu por muito.
  23. Bom, outro teste é criar e destruir varias vezes um form com um componente deste e mostrar a situação da memória com a função GetHeapStatus. Se a cada destruição a memória voltar ao estado anterior é porque não tem erro. Mas é sempre bom colocar um Free por via das duvidas, porque se o objeto já tiver sido destruído a função não ocasiona um erro, só não faz nada.
×
×
  • Criar Novo...