Jak wysłać jakąś grafieprzy użyciu thgg. Zrobiłem sobie fajny programik wykorzystując thgg ale chciałbym jeszcze móc wysyłać obrazki? Jak to zrobić?
0
0
W komponencie jeszcze nie ma tej funkcji - poczytaj opis protokołu i może coś wymyślisz.. ja na razie nie zabierałem się za to.
Image: TMemoryStream;
//...
{ TODO : Dopisać i naprawić funkcję wysyłania obrazków }
procedure THGG.SendImage(Recipient: Integer; FileName: string);
var
Output_Message: TOutput_Message;
Offset_MSGRichText: TOffset_MSGRichText;
Offset_MSGRichTextFormat: TOffset_MSGRichTextFormat;
begin
if (Recipient <= 0) or (not FileExists(FileName)) then
Exit;
Image.LoadFromFile(FileName);
Output_Message.Header.PacketType := C_OUTPUT_MESSAGE;
Output_Message.Header.PacketLength := 12 + Length('Image' + #0) + SizeOf(Offset_MSGRichText) + 13;
Output_Message.GGNumber := Recipient;
Output_Message.Sequential := 0;
Output_Message.MsgClass := C_MSG_CLASS_CHAT;
Move(('Image' + #0)[1], Output_Message.Msg[1], Length('Image' + #0));
Offset_MSGRichText.Flag := #2;
Offset_MSGRichText.PacketLength := 13;
Offset_MSGRichTextFormat.Position := 2;
Offset_MSGRichTextFormat.Font := C_FORMAT_IMAGE;
Offset_MSGRichTextFormat.Image.Unknown := $109;
Offset_MSGRichTextFormat.Image.Size := Image.Size;
Offset_MSGRichTextFormat.Image.CRC32 := GetCRC32(Image);
if Logged then
begin
WriteBuffer(Output_Message, 20 + Length('Image' + #0));
WriteBuffer(Offset_MSGRichText, SizeOf(Offset_MSGRichText));
WriteBuffer(Offset_MSGRichTextFormat, 36);
end;
end;
Jeszcze taka funkcja:
function GetCRC32(MemoryStream: TMemoryStream): Cardinal;
var
i, j: Word;
r: Cardinal;
CRC32Array: PCRC32;
Buffer: Byte;
begin
New(CRC32Array);
for i := 0 to 255 do
begin
r := i;
for j := 8 downto 1 do
if (r and 1) > 0 then
r := (r shr 1) xor $EDB88320
else
r := r shr 1;
CRC32Array[i] := r;
end;
Result := $FFFFFFFF;
MemoryStream.Seek(0, soFromBeginning);
while MemoryStream.Size <> MemoryStream.Position do
begin
MemoryStream.Read(Buffer, 1);
Result := CRC32Array[Byte(Result xor Cardinal(Buffer))] xor ((Result shr 8) and $00FFFFFF);
end;
Result := Result xor $FFFFFFFF;
Dispose(CRC32Array);
end;
Stałe masz w komponencie .. - może uda Ci się dopisać brakujące funkcje i obsługę.