Chciałbym napisać wtyczkę, która link do obrazka zamieniałaby na obrazek w oknie rozmowy. Zasada działania byłaby prosta. Wtyczka z każdą odpowiedzią w rozmowie szukałaby w tekście linku do obrazku, pobierała go i wyświetlała w oknie rozmowy. Coś a'la GGimage. Oczywiście przewiduje dodatkowe opcje - czyli określenie maksymalnego rozmiaru jaki ma być pobierany przez wtyczkę, dodanie do prawokliku na linku w rozmowie opcji Pobierz obrazek i możliwość wyboru otwarcia w nowym oknie, albo w oknie rozmowy. Obrazki katalogowane byłyby w jakimś katalogu w profilu konnekta, oczywiście będzie możliwość ustawienia tego katalogu. Można również wprowadzić kadrowanie obrazka, a po kliknięciu w niego zostałby otworzony coś w tym rodzaju jak na stronie konnekta... klikamy w obrazek, a on się powiększa. No i chyba najważniejsze pytanie czy jest możliwe wprowadzenie ProgessBaru w oknie rozmowy?
Czy taka wtyczka ma racje bytu, jest to możliwe do wykonania?
Jakby co mogę liczyć na pomoc devów?
Wtyka będzie pisana w Delphi!
Pozdrawiam ;-)
-----
Algorytm pobierania obrazka. Prosze poprawic jezeli gdzies blad popelnilem
CODE
uses WinInet;
var
Buffer : array[1..1024] of Byte; // bufor zawierający pobrany fragment pliku
hSession, hURL : HINTERNET; // zmienne potrzebne do sciagania plikow
dwRead : DWORD; // ilość odczytanych danych
dwSize : DWORD; // rozmiar pliku bedzie potrzebny do ustawien konnekta, porownywania wartosci
F : Integer;
{
Nie wiem czy to tak zostanie, ale tutaj trzeba bedzie podac
jakas wartosc z ustawien konnekta *[Sciezka/Katalog] + FileName*
}
URL : Integer;
{ URL rowniez bedzie musial byc pobierany z okna rozmowy }
pBuf : Pointer;
dwBufLen : DWORD;
dwIndex : DWORD;
TotalRead : Integer;
begin
{ otwieranie połączenia }
hSession := InternetOpen('Konnekt', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
{
Komputer bedzie sie przedstawial jako Konnekt
Typ polaczenia jest pobierany z rejestru, ewentualny proxy
HTTPS wylaczone domyslnie
}
try
{ otwarcie podanego adresu URL }
hURL := InternetOpenURL(hSession, PChar(URL), nil, 0, 0, 0);
{ Tutaj bedzie pobrany adres URL z okna rozmowy }
dwBufLen := 1024;
dwIndex := 0;
GetMem(pBuf, dwBufLen);
{ pobranie informacji na temat wielkości pliku }
HttpQueryInfo(hURL, HTTP_QUERY_CONTENT_LENGTH, pBuf, dwBufLen, dwIndex);
dwSize := StrToInt(StrPas(pBuf));
FreeMem(pBuf, dwBufLen);
{ pobieranie kolejnych fragmentów pliku }
InternetReadFile(hURL, @Buffer, SizeOf(Buffer), dwRead);
BlockWrite(F, Buffer, dwRead); // zapisanie buforu w pliku
TotalRead := TotalRead + dwRead;
finally
CloseFile(F); // Zapis pliku, pozniej bedzie musial nastapic odczyt i wyswietlenie w oknie rozmowy
end;
finally
InternetCloseHandle(hSession); // Zamykanie sesji
end;
finally
InternetCloseHandle(hURL); // Zamykanie sesji
end;
var
Buffer : array[1..1024] of Byte; // bufor zawierający pobrany fragment pliku
hSession, hURL : HINTERNET; // zmienne potrzebne do sciagania plikow
dwRead : DWORD; // ilość odczytanych danych
dwSize : DWORD; // rozmiar pliku bedzie potrzebny do ustawien konnekta, porownywania wartosci
F : Integer;
{
Nie wiem czy to tak zostanie, ale tutaj trzeba bedzie podac
jakas wartosc z ustawien konnekta *[Sciezka/Katalog] + FileName*
}
URL : Integer;
{ URL rowniez bedzie musial byc pobierany z okna rozmowy }
pBuf : Pointer;
dwBufLen : DWORD;
dwIndex : DWORD;
TotalRead : Integer;
begin
{ otwieranie połączenia }
hSession := InternetOpen('Konnekt', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
{
Komputer bedzie sie przedstawial jako Konnekt
Typ polaczenia jest pobierany z rejestru, ewentualny proxy
HTTPS wylaczone domyslnie
}
try
{ otwarcie podanego adresu URL }
hURL := InternetOpenURL(hSession, PChar(URL), nil, 0, 0, 0);
{ Tutaj bedzie pobrany adres URL z okna rozmowy }
dwBufLen := 1024;
dwIndex := 0;
GetMem(pBuf, dwBufLen);
{ pobranie informacji na temat wielkości pliku }
HttpQueryInfo(hURL, HTTP_QUERY_CONTENT_LENGTH, pBuf, dwBufLen, dwIndex);
dwSize := StrToInt(StrPas(pBuf));
FreeMem(pBuf, dwBufLen);
{ pobieranie kolejnych fragmentów pliku }
InternetReadFile(hURL, @Buffer, SizeOf(Buffer), dwRead);
BlockWrite(F, Buffer, dwRead); // zapisanie buforu w pliku
TotalRead := TotalRead + dwRead;
finally
CloseFile(F); // Zapis pliku, pozniej bedzie musial nastapic odczyt i wyswietlenie w oknie rozmowy
end;
finally
InternetCloseHandle(hSession); // Zamykanie sesji
end;
finally
InternetCloseHandle(hURL); // Zamykanie sesji
end;