s3c
Membros-
Total de itens
817 -
Registro em
-
Última visita
Sobre s3c
s3c's Achievements
0
Reputação
-
Colegas, a função SHBrowseForFolder permite selecionar somente pastas ou pastas e arquivos. Churc, como seria a seleção de pastas e arquivos pelo TOpenDialog ? Isso pouparia código.
-
Existe a função SHBrowseForFolder da api shell32.dll
-
Form Secundário Minimizando Na Barra De Tarefas
pergunta respondeu ao Paulo Nobre de s3c em Delphi, Kylix
Como estão as propriedades: BorderIcons e BorderStyle ? -
Acho que esse While tem um pequeno furo. Se você tiver dois níveis 3 seguidos, o segundo não será excluído; sem contar que se você tiver níveis 4 em diante, sua variável i estará totalmente incompatível com o tvp.Items.Count. Acho que seria melhor você excluir através de um for na ordem inversa.
-
Não seria: Trunc(SQRT(N)) + 1; ?
-
É, se ele abre mas não fecha, também pode ser algum outro código IOCTL para DVD.
-
Você pode utilizar uma query para acessar esse nome na tabela, ou dar o Post dentro de um try/except. Table.Eof = final do cursor ou final da tabela ou um Table.Next após o último registro lido.
-
Acho que tanto faz, no meu caso utilizo SendBuf, colocando os dados num buffer linear e contínuo de memória. No recebimento você não possui o ReceiveStream, logo terá que receber pelo ReceiveBuf e esta função lhe retorna quantos bytes foram lidos. portanto é sempre bom fazer um loop de leitura até que todo o buffer seja lido. Uma dica é você enviar na frente o tamanho do buffer que virá a seguir num campo Integer(4 Bytes). Quando lê, você executa um ReceiveBuf com 4 e carrega o campo Inteiro. Depois você entra no loop de leitura comparando a soma lida com esse campo.
-
O SizeOf(MyRecord) retorna 8 bytes não importando o que tiver na String. Na verdade você está movendo o ponteiro da string(4 bytes) + o campo Integer(4 bytes). O SizeOf(MyStream) retorna 4 bytes por ser um ponteiro. O SendBuf de MyStream deveria ser MyStream.Memory^ porque não é o objeto que você vai mandar e sim o conteúdo armazenado na propriedade Memory dele.
-
Pode ser que ele não esteja liberando o Handle alocado; se não for isso, realmente não sei o que possa ser. Tente assim: Abrir: const IOCTL_Storage_Eject_Media = $002D4808; var hDevice:THandle; dRet:DWord; begin HDevice := CreateFile(PChar('\\.\G:'), Generic_Read, File_Share_Read, nil, Open_Existing, 0, 0); DeviceIoControl(hDevice, IOCTL_Storage_Eject_Media, nil, 0, nil, 0, dRet, nil); CloseHandle(hDevice); end; Fechar:const IOCTL_Storage_Load_Media = $002D480C; var hDevice:THandle; dRet:DWord; begin HDevice := CreateFile(PChar('\\.\G:'), Generic_Read, File_Share_Read, nil, Open_Existing, 0, 0); DeviceIoControl(hDevice, IOCTL_Storage_Load_Media, nil, 0, nil, 0, dRet, nil); CloseHandle(hDevice); end;
-
Paulo, retire Generic_Write, deixe somente Generic_Read; após CreateFile coloque: ShowMessage(SysErrorMessage(GetLastError));Com a bandeja aberta, chame o programa e execute somente o botão para fechar, veja qual a mensagem e clique em Ok.
-
Você consegue abrir pelo Shell.Application ou pelo DeviceIoControl ?
-
Não tenho muita experiência com ADO, pois só trabalhei uns 3 meses, mas pelo que pude notar essa tecnologia utiliza OLE Variant e tem que ficar sempre convertendo um Variant para seu tipo de dado original, caindo assim sua performance(motivo da minha desistência pelo ADO). Nele você possui Parameters.ParamValues que retorna um Variant, e Parameters.ParamByName que retorna um TParameter que possui a propriedade Value(Variant). Ambos os casos retornam Variant e a conversão deve ser feita.
-
Olá,s3c, O número que aparece é o 4294967295 Isto indica um Handle inválido e ao que parece CreateFile não está entendendo sua unidade g:, logo DeviceIoControl não funcionará nem para abrir, nem para fechar; assim como Shell.Application não entende ParseName('g:\').Outra sugestão seria retornar a letra do Drive(se é que existe neste caso) utilizando WMI.
-
Olá Paulo, após o CreateFile coloque: ShowMessage(IntToStr(hDevice)); E poste o número que aparece.