clipboard e memoria, difícil
Oi gente,
Estou tentando fazer um aplicativo que em certos momentos copia o conteudo do clipboard para outro espaço alocado em memoria.
Tudo acontece bem enquanto eu copio TEXTO para o clipboard, entretanto quando eu copio conteudo de BITMAP eu estou tendo problemas... Explicando o problema:
//situação 1 (ok)
{Primeiro obtem handle do clipboard e depois captura ponteiro para o Handle do clipboard se o conteudo for texto, funciona bem}
HandleClipObj:= ClipBoard.GetAsHandle(CF_TEXT);
PtrClipObj:= GlobalLock(HandleClipObj);
//situação 2 (erro)
{O problema está aqui, se o conteudo for BITMAP, o handle para bitmap funciona, GetAsHandle retorna Handle valido, entretanto GlobalLock falha ao tentar retornar um ponteiro válido para o handle recem obtido, retorna nil ou 0}
HandleClipObj:= ClipBoard.GetAsHandle(CF_BITMAP);
PtrClipObj:= GlobalLock(HandleClipObj);
Pra mim é fundamentallll eu obter um ponteiro válido para o handle, pois com ele eu vou fazer uma operação mais adiante de cópia de conteúdo de memória (CopyMemory). Este ponteiro é na verdade o endereço para o primeiro Byte de memória do conteúdo armazenado no clipboard.
POR FAVOR ALGUEM SABE POR QUE VALORES DE BITMAP FAZEM O GlobalLock FALHAR, OU TEM ALGUMA SUGESTAO PARA EU OBTER O PONTEIRO PARA MEMORIA DO CLIPBOARD? :?:
Estou tentando fazer um aplicativo que em certos momentos copia o conteudo do clipboard para outro espaço alocado em memoria.
Tudo acontece bem enquanto eu copio TEXTO para o clipboard, entretanto quando eu copio conteudo de BITMAP eu estou tendo problemas... Explicando o problema:
//situação 1 (ok)
{Primeiro obtem handle do clipboard e depois captura ponteiro para o Handle do clipboard se o conteudo for texto, funciona bem}
HandleClipObj:= ClipBoard.GetAsHandle(CF_TEXT);
PtrClipObj:= GlobalLock(HandleClipObj);
//situação 2 (erro)
{O problema está aqui, se o conteudo for BITMAP, o handle para bitmap funciona, GetAsHandle retorna Handle valido, entretanto GlobalLock falha ao tentar retornar um ponteiro válido para o handle recem obtido, retorna nil ou 0}
HandleClipObj:= ClipBoard.GetAsHandle(CF_BITMAP);
PtrClipObj:= GlobalLock(HandleClipObj);
Pra mim é fundamentallll eu obter um ponteiro válido para o handle, pois com ele eu vou fazer uma operação mais adiante de cópia de conteúdo de memória (CopyMemory). Este ponteiro é na verdade o endereço para o primeiro Byte de memória do conteúdo armazenado no clipboard.
POR FAVOR ALGUEM SABE POR QUE VALORES DE BITMAP FAZEM O GlobalLock FALHAR, OU TEM ALGUMA SUGESTAO PARA EU OBTER O PONTEIRO PARA MEMORIA DO CLIPBOARD? :?:
Imaia
Curtidas 0