
s3c
Membros-
Total de itens
817 -
Registro em
-
Última visita
Tudo que s3c postou
-
Bom, aí vai da maneira de cada um programar; no meu caso, faz mais de 5 anos que não utilizo o componente TTable e nunca sentí a falta dele.
-
Ah sim, é porque após o ShellExecute é dado o FindWindow e como ShellExecute retorna imediatamente, FindWindow falha porque a janela ainda não está criada. O Sleep(1000) é muito tempo, veja se funciona assim: var h1,h2:THandle; sKey,sValue:String; i:Integer; begin sKey := '\HKEY_LOCAL_MACHINE\SOFTWARE\Borland\BLW32'; sValue := 'BLAPIPATH'; WinExec('Regedt32.exe', SW_Hide); h1 := 0; While h1 = 0 do h1 := FindWindow('RegEdit_RegEdit', nil); h2 := 0; While h2 = 0 do h2 := FindWindowEx(h1, 0, 'SysTreeView32', nil); for i := 1 to 30 do SendMessage(H2, WM_KeyDown, VK_Left, 0); for i := 1 to Length(sKey) do if sKey[i] = '\' then SendMessage(H2, WM_KeyDown, VK_Right, 0) else SendMessage(H2, WM_Char, Ord(sKey[i]), 0); h2 := 0; While h2 = 0 do h2 := FindWindowEx(h1, 0, 'SysListView32', nil); ShowWindow(h1, SW_Show); SetForegroundWindow(h2); Sleep(100); SendMessage(h2, WM_KeyDown, VK_Home, 0); for i := 1 to Length(sValue) do SendMessage(h2, WM_Char, Ord(sValue[i]), 0); end;
-
Após abrir o Regedit: var h1,h2:THandle; sKey,sValue:String; i:Integer; begin sKey := '\HKEY_LOCAL_MACHINE\SOFTWARE\Borland\BLW32'; sValue := 'BLAPIPATH'; h1 := FindWindow('RegEdit_RegEdit', nil); h2 := FindWindowEx(h1, 0, 'SysTreeView32', nil); SetForegroundWindow(H2); Windows.SetFocus(H2); for i := 1 to 30 do SendMessage(H2, WM_KeyDown, VK_Left, 0); for i := 1 to Length(sKey) do if sKey[i] = '\' then SendMessage(H2, WM_KeyDown, VK_Right, 0) else SendMessage(H2, WM_Char, Ord(sKey[i]), 0); Sleep(100); h2 := FindWindowEx(h1, 0, 'SysListView32', nil); SetForegroundWindow(h2); Windows.SetFocus(h2); SendMessage(h2, WM_KeyDown, VK_Home, 0); for i := 1 to Length(sValue) do SendMessage(h2, WM_Char, Ord(sValue[i]), 0); end;
-
Isso é uma otimização que a maioria dos Bancos fazem. É mais rápido utilizar espaço já alocado do que ter que alocar um novo espaço em disco para depois inserir um registro. Se quiser que ele diminua, faça um backup e depois restaure.
-
Mas é relativamente simples; qual a chave e o valor que você quer focar ?
-
Olá Paulo, dando uma olhada nesse exemplo: 1-Acha a janela do Regedit pelo FindWindow. 2-Acha a janela esquerda do Treeview pelo FindWindowEx. 3-Simula o pressionamento da seta esquerda(<-) 30 vezes pelo SendMessage para ir no início. 4-Vai até a chave desejada pelo SendMessage com WM_Char ou VK_Right. 5-Acha e foca a janela do Listview da direita. 6-Foca o valor desejado pelo SendMessage com WM_Char. Ou seja, não precisa atualizar o valor de LastKey porque no primeiro passo ele fecha todas a chaves indo para My Computer.
-
Seria bom postar um exemplo prático de como você utiliza elas. Com TQuery você tem o Locate e Order By, além de poder executar comandos SQL diretamente no Banco; coisas que com TTable você fica muito limitada ao componente.
-
Tente adicionar pelo Regedit: var Reg:TRegistry; begin Reg := TRegistry.Create; Reg.RootKey := HKEY_LOCAL_MACHINE; if Reg.OpenKey('\System\CurrentControlSet\Services\SharedAccess\Parameters', false) and Reg.OpenKey('FirewallPolicy\StandardProfile\GloballyOpenPorts\List', false) then Reg.WriteString('3252:TCP', '3252:TCP:*:Enabled:Seu Programa'); Reg.Free; end;
-
Esse erro é porque o primeiro parâmetro de Locate é uma String que contém os nomes dos campos da sua tabela separados por ";", então: Tabela.Fields[1] retorna um objeto TField que não possui FieldbyName, daí o erro.Se fizer: Tabela.FieldbyName('Nome do Campo'), também retornará um TField. Em outras palavras, ambos os casos retornam um objeto e não uma string.
-
"Delphi a bíblia" é muito bom; tem uma excelente parte sobre Banco de Dados.
-
var sLinha:String; begin Label_Id.Caption := Copy(sLinha, 1, 2); Label_Frase.Caption := Copy(sLinha, 3, Length(sLinha)-2); Label_Id.Color := clGreen; end;
-
Não, textos não vão servir. Esses componentes possuem as funções SendBuf e ReceiveBuf que é o que você deve utilizar para arquivos. Note que ReceiveBuf retorna a quantidade de bytes lidos que nem sempre é o que você enviou; então você terá que fazer um loop de leitura até receber todo o conteúdo.
-
Thales Sempre pensei que qualquer exceção sem tratamento fosse igual a um Exit. Não é isso ? Sim, se você ler Connected ele somente retorna o status(true/false); se você setar Connected é a mesma coisa que fazer: IBContrSMS.Open VDLR Bom, ai vai de cada projeto. Quando ele não entra como serviço, coloca um ícone na task e você facilmente consegue ver suas propriedades. Utilizo conexões em redes mas é de outra forma; espero que algum colega possa lhe ajudar sobre isso.
-
Quer dizer que em sistemas NT/XP, a Kernel32.dll você consegue carregar pelo LoadLibrary, mas o GetProcAddress falha porque essa função não existe lá.
-
Não, ele fica tentando até 25 vezes. Se quiser abortar na primeira vez, ele já está fazendo com o código que ele postou. Não, a propriedade é do objeto TIBDatabase; daria erro se o objeto não estivesse instanciado.
-
Bom, eu não conheço outra função mas vale lembrar que RegisterServiceProcess só funciona em Windows 9x/Me; por isso no caso de rodar em NT/XP, seria bom checar o retorno de GetProcAddress <> nil.
-
Veja: TServerSocket e TClientSocket
-
Sim, dessa forma o programa esperaria o Banco entrar no ar e as exceções não seriam lançadas. Ps: Seria bom colocar um contador no caso do Banco não iniciar. var iVezes:Byte; begin iVezes := 0; While not IBContrSMS.Connected and (iVezes < 25) do begin try IBContrSMS.Open; except Inc(iVezes); Sleep(400); end; end; if not IBContrSMS.Connected then IBContrSMS.Open; // Força a exceção para ver o erro end;
-
Sim você pode pegá-lo no try/except.
-
Este erro: Unavailable Database ocorre comigo também quando o Banco não está no ar e o programa tenta a conexão. Se o Banco entra como serviço e o programa está no autorun, parece que o programa entra antes que o serviço. Aproveitando, alguém saberia a sequência de execuções na inicialização do Windows ? Seria: Run no regedit, Startup, Services ?
-
A informação fica nos 4 bytes anteriores: var iTam_Aloc:Integer; begin iTam_Aloc := (PInteger(Integer(p)-4)^ and not 3); end;Com a Borlndmm.dll do D6, ele aloca o próximo divisível de 4 + 4 bytes e não sendo inferior a 12 bytes. Os dois bits da direita(bitwise and not 3) são utilizados por ele. Com a Borlndmm.dll do Turbo Delphi, isso mudou; a informação continua lá para alocações ± maiores que 2KB, para as menores não sei como ele faz.
-
Acho que o Interbase deve estar entrando como um serviço. Se for isso, vá no Interbase Manager, dê Stop no Banco, desflegue a caixa: Run Interbase as a service, clique em Startup Mode [Automatic], dê Start no Banco. Vá no autorun do regedit e deverá parecer: Interbase Guardian. Coloque seu programa abaixo dele.
-
Bom, então como o GetWindowDC perde os controles-filhos, acho que você terá chamá-lo e liberá-lo a cada vez.
-
Bom, aí teria que ver nas classes do Delphi como ele faz; eu realmente não sei.Mas se você utiliza GetDC com o Handle do Form, porque não utilizar o próprio Form.Canvas.Handle ? Não funcionaria ? Daí você não se preocupa em alocar e desalocar.