Ir para conteúdo
Fórum Script Brasil

s3c

Membros
  • Total de itens

    817
  • Registro em

  • Última visita

Tudo que s3c postou

  1. s3c

    Propriedade Tag

    Se não for mantido o endereço inicial do buffer alocado, ao final, você não conseguirá liberar corretamente esta área de memória, visto que este será o endereço que você passará para o Freemem.você pode notar que foi dado um Inc após a alocação de memória e antes do FreeMem é dado um Dec, restaurando assim o ponteiro original.
  2. s3c

    Formato Hora

    try StrToTime(Campo.Text); // Hora ok except // Hora inválida end;
  3. s3c

    Propriedade Tag

    procedure TForm1.Button1Click(Sender: TObject); Const Fim_do_Mes_12 :Byte = 31; var b32 :^Byte; begin b32 := @Fim_do_Mes_12; b32^ := 32; Sim, é a mesma coisa; só declarei um PChar para melhor entendimento.GetMem(InfoBuf, SizeOf(TInfo) *2); // aloca espaço para dois registros PtrInfo := InfoBuf; // inicializa apontador PtrInfo^.Nome := 'Nome 1'; Inc(PtrInfo); PtrInfo^.Nome := 'Nome 2'; StrMsg := ''; PtrInfo := InfoBuf; StrMsg := 'Nome: '+ PtrInfo^.Nome +#10; Inc(PtrInfo); StrMsg := StrMsg +'Nome: '+ PtrInfo^.Nome; FreeMem(InfoBuf); ShowMessage(StrMsg); Neste caso, acho que InfoBuf é desnecessário, podendo-se alocar memória diretamente em PtrIfo:GetMem(PtrInfo, SizeOf(TInfo) *2); // aloca espaço para dois registros PtrInfo^.Nome := 'Nome 1'; StrMsg := 'Nome: '+ PtrInfo^.Nome +#10; Inc(PtrInfo); PtrInfo^.Nome := 'Nome 2'; StrMsg := StrMsg +'Nome: '+ PtrInfo^.Nome; Dec(PtrInfo); FreeMem(PtrInfo); ShowMessage(StrMsg);Quanto a ponteiros para estrturas, são muito úteis na passagem de parâmetros onde não é necessária a cópia de toda a estrutura, mas somente o ponteiro dela(4bytes) e com isso o parãmetro se torna var naturalmente. Já a utilização de ponteiros de type record dentro de um método são úteis quando a estrutura não é conhecida e tem que ser preenchida através de um array de informações dos tipos de campos; neste caso é melhor declarar um type packed record onde a utilização de memória se dá exatamente conforme os tipos dos campos.
  4. s3c

    Propriedade Tag

    Acredito que "ponteiros" nessa parte da apostila se referia aos endereços de memória de variáveis e não objetos(embora sejam ponteiros também). Por ex, teoricamente você não pode alterar o valor de uma constprocedure TForm1.Button1Click(Sender: TObject); Const Fim_do_Mes_12:Byte = 31; begin Fim_do_Mes_12 := 32; // Gera erro de compilação end; Mas se fizer assim:procedure TForm1.Button1Click(Sender: TObject); Const Fim_do_Mes_12:Byte = 31; var p:PChar; b32:Byte; begin p := @Fim_do_Mes_12; b32 := 32; Move(b32, p^, 1); ShowMessage(IntToStr(Fim_do_Mes_12)); end;você alterou o valor de uma const sem o Delphi saber, utilizando o endereço de memória(ponteiro) da constante.
  5. s3c

    Propriedade Tag

    Ponteiros são referências a endereços de memória; por ex, quando você instancia um objeto, na realidade o nome desse objeto é um ponteiro ou um endereço de memória. Os Windows 98/Me/2000/2003/XP são sistemas de 32 bits, então os endereços de memória também são 32 bits e é por isso que você pode armazenar ponteiros nas propriedades Tag dos componentes: procedure TForm1.Button1Click(Sender: TObject); var SL:TStringList; begin SL := TStringList.Create; Form1.Tag := Integer(SL); end; procedure TForm1.FormDestroy(Sender: TObject); begin if Form1.Tag <> 0 then TStringList(Form1.Tag).Free; end;Nesse exemplo Form1.Tag armazena o endereço de um objeto.
  6. s3c

    Propriedade Tag

    Vale lembrar que não necessariamente se coloca números em Tag; você também pode colocar ponteiros para referenciar objetos.
  7. s3c

    Propriedade Tag

    Tag é uma propriedade integer(4 bytes) que os componentes disponibilizam para armazenar informações. É uma propriedade segura que eles nunca a utilizam; então você pode colocar nela qualquer informação de 32 bits.
  8. Sugiro que você utilize uma Query: Query.SQL.Text := 'Alter Table Nome_da_Tabela Alter Column Nome_do_Campo Type Varchar (60)'; Query.ExecSQL;
  9. s3c

    Tabela Paradox

    Certo, mas tudo o que você faz com Paradox, pode fazer com Interbase sem exceções, além do que Paradox é extremamente inferior ao Interbase.
  10. s3c

    Tabela Paradox

    Paradox é famoso por bugs e constantes perdas de índices. Sugiro que você mude para o Interbase6 Open Source; pode baixá-lo em: ftp://ftpc.borland.com/pub/interbase/devs....0.1-server.ZIP
  11. s3c

    Mudar Cursor

    Se não tiver outra maneira, a dll de funções hook poderia estar no .exe como um arquivo de recursos.
  12. WinExec('cmd /k ipconfig /All > teste.txt', SW_Hide);
  13. s3c

    Mudar Cursor

    Acho que o primeiro problema não é capturar o mouse fora da aplicação e sim capturar a tecla F3 fora da aplicação.Particularmente só conheço uma maneira de se fazer; com funções Hook (SetWindowsHookEx com idHook = WH_KeyBoard, CallNextHookEx e UnhookWindowsHookEx). Essas hooks devem ser globais e portanto precisam estar rodando numa dll. Espero que algum colega do fórum conheça uma maneira mais simples de capturar teclas fora da aplicação.
  14. s3c

    Caminho Do Arquivo

    Eu solucionaria dessa forma: s := extractfilepath(application.exename); While s[Length(s)] <> '\' do SetLength(s, Length(s)-1);Talvez possa existir alguma função que já volte um nível, mas eu não conheço.
  15. s3c

    Mudar Cursor

    Tente utilizar uma variável boolean: var bF3:Boolean; procedure TForm1.FormCreate(Sender: TObject); begin bF3 := false; end; procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (key = VK_F3) and not bF3 then begin bF3 := true; SetSystemCursor(LoadCursor(0, IDC_Cross), OCR_Normal); end; end; procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (key = VK_F3) and bF3 then begin bF3 := false; SetSystemCursor(LoadCursor(0, IDC_Cross), OCR_Normal); end; end;Mas o formulário tem que estar em foco no onKeyDown e onKeyUp
  16. você pode utilizar a função RoundTo: uses Math; var f:Double; begin f := RoundTo(35.95 * 0.85, -2); end;
  17. s3c

    Mudar Cursor

    Pode parecer estranho mas para voltar o cursor é o mesmo comando. Não conseguí entender muito bem, mas pelo que ví, a função SetSystemCursor destroi o cursor que ela ativa e quando você aplica o mesmo comando, como o cursor não existe mais, ela volta ao cursor anterior.
  18. s3c

    Mudar Cursor

    Tente utilizar: SetSystemCursor(LoadCursor(0, IDC_Cross), OCR_Normal);Para mudar e voltar o cursor.
  19. Clicando com o botão direito do mouse na unit, existe a opção Read Only, mas é só clicar nela novamente que ele destrava. Já se você for mudar a propriedade do arquivo para Read Only pelo Explorer, você consegue mexer no código mas não consegue salvar.
  20. s3c

    Registerhotkey

    Olá Paulo, acho que é por ordem alfabética. Tente colocar seu programa antes do Winkey.
  21. Seria bom você postar o código.
  22. s3c

    Registerhotkey

    Como é o Windows quem registra a tecla, o primeiro processo que registrou tem a prioridade; os outros processos não podem registrar uma tecla já registrada. Vale ressaltar que quando você registra uma tecla, ela fica sem efeito nos outros aplicativos; por ex, se você registra a tecla 'a'($41) e abre o bloco de notas e digita 'a', ela não vai aparecer.
  23. s3c

    Tirando Duvidas

    Esse erro quer dizer que ele não achou UfrmConsProcCrianca2.dcu. Coloque o caminho de UfrmConsProcCrianca2.pas no path do projeto p/ gerar o .dcu
  24. s3c

    'lixo' Na String

    Bom, você deve estar com um problema no seu Delphi, porque o ShowMessage só é dado na posição 1.000.001; ou seja; todos os caracteres de 1 a 1.000.000 estão na string com a letra 'a'. E a posição 1.000.001 contém o caracter #0(null terminated string).
  25. s3c

    'lixo' Na String

    Acho que não. veja este código:var i:Integer; s:string; begin s := ''; for i := 1 to 1000000 do s := s + 'a'; for i := 1 to 1000001 do if s[i] <> 'a' then ShowMessage(inttostr(i)); end;O primeiro for preenche uma string 1.000.000 de vezes com a letra 'a'. O segundo for checa a letra 'a' 1.000.001 vezes e só dá o ShowMessage no elemento 1.000.001 que é o #0(término da string).
×
×
  • Criar Novo...