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. Paulo, valeu pelos exemplos aí. E com a paralela também dá pra fazer com esse componente?
  2. Quando é executado o método Close no Form principal, a aplicação é terminada. Então seria conveniente usar o método Hide, que apenas esconde o form. Quanto ao Form2, esse sim pode ser fechado e liberado da memória. Para isso seria conveniente retirá-lo da lista de Forms auto-criáveis e criá-lo apenas no momento de abertura. Abraço;
  3. Geovani, tenta agora -> function CopyDir(sc, ds : string) : TStringList; var List : TStringList; function vldir(dr : string) : boolean; begin result:=((trim(dr) <> '..') and (trim(dr) <> '.')); end; procedure Search(sor, des : string); var Rec : TSearchRec; s,d : string; __cancel : BOOL; begin __Cancel := false; ForceDirectories(des); if (FindFirst(sor+'\*.*',faReadOnly or faanyfile or favolumeid or faHidden or faSysFile or faDirectory or faArchive,rec)<>0) then begin FindClose(rec); exit; end; while true do begin if ((rec.Attr and fadirectory)<>0) then begin if vldir(rec.Name) then Search(sor+'\'+rec.name,des+'\'+rec.Name) end else begin s:=sor+'\'+rec.name; d:=des+'\'+rec.name; if (cardinal(CopyFileEx(PAnsiChar(s),PAnsiChar(d),0,0,@__cancel,1)) = 0) then List.Add(s); end; if (FindNext(rec) <> 0) then begin FindClose(rec); break; end; end; end; begin if (sc[length(sc)] = '\') then delete(sc,length(sc),1); if (ds[length(ds)] = '\') then delete(ds,length(ds),1); if not(directoryexists(sc)) then begin result:=nil; exit; end; List:=TStringList.Create; Search(sc,ds); result:=list; end;
  4. Essa função não pode ser chamada com nome de arquivo porque foi escrita pra copiar pastas inteiras. Testei várias vezes aqui e em todas funcionou perfeitamente. então você quer copiar dados de um computador pro outro, aí pode ser que a função CopyFile não funcione, vou tentar adaptar com CopyFileEx. É, essa função tem uma limitação quanto ao tamanho do nome do arquivo, a CopyFileEx não. Meu email thalespo@terra.com.br
  5. Opa, qualquer coisa que quiserem mandar pro meu email será bem vinda. Tenho muita curiosidade de saber como funciona, e exemplos da utilização dessas bibliotecas seriam interessantes. Opa, valeu. Se quiser mandar ou postar exemplos de utilização, a comunidade agradece. thalespo@terra.com.br
  6. Paulo Bergo, você poderia postar aqui ou mandar por email uma dessas rotinas para comunicação com a porta serial, por favor? Também estou precisando. Valeu. thalespo@terra.com.br
  7. Ou seja, pra funcionar com tipo boolean e imitar o que ele faz com BOOL teria que ser-> if (byte(b2) <> 0) and b1 then begin . . . end;
  8. Opa, acho que deu erro porque você forneceu diretório inexixtente como fonte, aí ele retorna nil. Tente filtrar -> var errolog : TStringList; begin errolog:=copydir(sc, ds); if (errolog <> nil) then begin memo1.addstrings(errolog); memo1.lines.savetofile(logfile); errolog.free; end; end; abraço.
  9. É, aquilo que eu falei não tem nada a ver não. Eu não sei como se faz.
  10. TDBGrid.Columns[ coluna ].Items [ linha ] . AsString; ou AsInteger, ou AsFloat... Abraço.
  11. você disse aceder, eu entedí acender. :blink:
  12. Acho que você pode usar o evento desse tópico, e usar o método DrawCell para desenhar a célula. abraço.
  13. Acho que perguntas sobre banco de dados deveriam ser feitas no fórum de banco de dados.
  14. Claro que não foi você, senão não seria como o compilador faz, seria o seu jeito. Eu quis dizer que foi você quem leu o código, entendeu, e explicou seu funcionamento para nós. Estaria claro se você dissesse que com variável boolean o operador and faz um and lógico no byte o que resultaria em zero, e que com variável BOOL primeiro ele converte qualquer coisa acima de 0 pra 1 e faz o and lógico, por isso funciona. Disputa? Mas que disputa? A que você está se referindo? Cuidado pro tópico não virar flood.
  15. Não me digam que vocês entenderam esse assembly que o Micheus escreveu.
  16. Claro porque qualquer valor acima de 0 será considerado true. Mas o que acontecerá se você fizer um and lógico entre 8 e 1, veja -> 00000001 and 00001000 == 00000000 ou seja, false. Certo? A propósito, muito bom o título do seu tópico. Só de ler já da pra saber do que se trata.
  17. Só lembrando de uma coisa: Eu não sei como é que funciona o SHFileOperation mas esse que escreví funciona assim, por exemplo, se SC e DS forem isso -> C:\Delphi D:\Programas nesse caso ele não vai criar uma pasta Delphi dentro de Programas, e sim criar uma pasta Programas, caso não exista e copiar o conteúdo de Delphi para lá. Para criar uma Pasta Delphi dentro de Programas tem que ser assim -> C:\Delphi D:\Programas\Delphi Aí sim a pasta Delphi dentro de Programas vai ser igual a Delphi do c:. A rotina cria todos os diretórios que forem necessários para copiar a pasta, nesse caso se não existir o diretório Programas ele o cría também.
  18. Quando escreví aquele comentário não me referia ao evento OnTimer, mas sim ao evento de um botão. E nesse procedimento não é chamado ele próprio mais é chamado um outro(ProccesMessages) que por sua vez o chama. Ou seja, o efeito é exatamente o mesmo que o de uma recursão. Exatamente. Falo isso porque eu estava lá, eu ví o que acontece.
  19. opa Com certeza é orientado a objeto, mas lá não existem class, somente object. A diferença é que tipos class são ponteiros, e é preciso alocar memória e inicializar um objeto e depois colocar o endereço nesse ponteiro, exemplo: var List : TStringList; begin List := TStringList.Create; . . . nesse caso o construtor create cria o objeto na memória e coloca o endereço no ponteiro List. E no Turbo Pascal 7 existem os objetos-> type TClockView = object(TView) a, b, c : integer; procedure Update; . . . nesse caso quando você declara uma var desse tipo, não está declarando um ponteiro, mas sim alocando todo o registro, não sendo necessário o construtor. Para usar de maneira semelhante as classes você pode usar um contrutor e usar a função new para alocar para o ponteiro -> type PClockView = ^TClockView; TClockView = object(TView) a, b, c : integer; constructor create(Rect : TRect); destructor destroy; procedure Update; . . . var Clock : PClockView; begin Clock:=new(PClockView,Create(r)); Clock^.Update; . . . Assim é como se o ponteiro Clock fosse uma classe. Não acredito. Se você tiver a versão completa do Turbo Pascal 7 verá que é muito boa. Se quiser posso te enviar por email. Básicamente se interceptam menssagens pelo teclado no Turbo Pascal pela função ReadKey que retira uma tecla do buffer do teclado. O buffer do DOS tem tamanho máximo de 15 bytes e é uma referencia circular que se encontra no endereço $0040:$001E. O byte em $0040:$001A aponta para o início dessa fila e o byte em $0040:001C aponta para a posição livre no final da fila. Então para limpar o buffer é só fazer -> mem[$0040:$001A]:=mem[$0040:001C]; Certo? Qualquer dúvida fala aí.
  20. É impossivel ele pular essa parte do código, só se você tiver colocado como comentário, porque não tem nenhum IF que teste a execução apenas dessa parte do código. Comentários : Na parte que captura Gif Tela Toda, você não precisa colocar o comando GetWindowRect(GetForegroundWindow,rt); porque esse comando põe o retangulo da janela ativa no retangulo RT, o que não é preciso porque se está capturando a tela toda. O comando BitmapToGif(Bitmap, Gif); só é executado quando é Tela Toda, por que? E que parametro é esse Bitmap? não seria BitmapToGif(Image1.Picture.Bitmap, Gif); Não conheço esse comando porque não faz parte do Delphi. E quando é Gif Janela Ativa você só está criando o Gif e salvando ele. Esqueceu de assinalar o Image1.picture.bitmap e depois salvar.
  21. Eu recebí as 2 MP's que respondem a mesma menssagem. E não se preocupe com flood não, os moderadores aqui são gente boa. Além do mais o banco de dados não vai se sobrecarregar com um floodzinho ou outro. O máximo que pode acontecer é eles zerarem o seu número de posts e bloquearem o seu acesso ao fórum por 2 anos. :lol:
  22. Aí, essas MP's estão doidonas, aehh! Eu recebi duas repostas mais ou menos parecidas a uma mesma MP que enviei a você. Não entendí nada. E já mandei outra MP que você ainda não deve ter lido respondendo a essas.
  23. tente isso -> . . JPEG := TJPEGImage.Create; //Depois você carrega o bitmap do Image pelo Clipboard: Image1.Picture.Bitmap.LoadFromClipboardFormat(CF_BitMap,Clipboard.GetAsHandle(CF_BitMap),0); GetCursorPos(Pt); GetWindowRect(GetForegroundWindow,Rt); DrawIconEx(image1.picture.bitmap.canvas.Handle,pt.x-rt.left,pt.y-rt.top,GetCursor,0,0,0,0,DI_NORMAL or DI_DEFAULTSIZE); //Depois você assinala o JPEG a partir do Bitmap: JPEG.Assign(Image1.Picture.Bitmap); //Depois você salva o JPEG: JPEG.SaveToFile(FileName); JPEG.Free; . . Isso porque você primeiro tem que desenhar no bitmap e depois converter pra jpeg e salvar.
×
×
  • Criar Novo...