Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: GrafiK
Konnekt | Forum > Developerzy > Tworzenie wtyczek
LiTE
Witam serdecznie!
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;
Mucha
ProgressBar: Ale w jakims sensie? W przykladach (acfcfg) masz jak zrobic okienko z progressbarem najprosciej.
Obrazki: Niestety tu ci nie pomoge, bo jedyne co wiem o obrazkach to ze maja typ MT_IMAGE.
Czy taka wtyczka ma sens: No coz, mnie sie nie przyda, ale na pewno w jakis sposob podszkoli twoje umiejetnosci
dulek000
Liczyć na naszą pomoc możesz zawsze (choć Delphi nie znam tongue.gif).
ursus6
Progressbara możesz dodać do toolbara.
Jeżeli miało by to wyświetlać tylko obrazek u użytkownika wtyczki to wysyłasz do okna rozmowy jako wiadomość takie cos: <img src="sciezka do pliku" alt="nazwa pliku" class="np. ggimage"/>
Jeżeli masz pisać wtyczke do K nie używaj VCL.
LiTE
Ahm.. czyli wyswietlenie obrazka nie bedzie rzecza trudna ;-)
Toolbar, chodzi Ci o to miejce?



VCL? Nie rozumiem...
ursus6
Toolbar czyli te żółte pole.
VCL czyli gotowe klasy Borlanda, np. button który wsadzasz na forme.
LiTE
Zdaje sobie z tego sprawe dlatego do sciagania danych z internetu uzylem biblioteki dll windowsa WinInet.dll
ursus6 jestes w stanie podac przyklad utworzenia tego progressbara w toolbarze?
ursus6
IMIG_PROGRESSBAR NET *1000 +x;
IMIA_PROGRESSBAR NET *1000 +y;

W Iprepare:
CODE

UIGroupAdd(IMIG_MSGBAR , IMIG_PROGRESSBAR , 0,'');
UIActionAdd( IMIG_PROGRESSBAR, IMIA_PROGRESSBAR, ACTT_HWND or ACTR_INIT, 'ProgressBar'  );

W ActionProc:

CODE

IMIA_PROGRESSBAR:
   begin
    if anBase.code = ACTN_CREATEWINDOW then
           begin
           InitCommonControls();
           sUIActionNotify_createWindowPtr(anBase)^.w := szer;
           sUIActionNotify_createWindowPtr(anBase)^.h := wys;
           sUIActionNotify_createWindowPtr(anBase)^.hWnd := CreateWindowEx(0,PROGRESS_CLASS,'',WS_VISIBLE or WS_CHILD ,sUIActionNotify_createWindowPtr(anBase)^.x, sUIActionNotify_createWindowPtr(anBase)^.y,sUIActionNotify_createWindowPtr(anBase)^.w, sUIActionNotify_createWindowPtr(anBase)^.h, sUIActionNotify_createWindowPtr(anBase)^.hwndparent, 0, 0, 0);
            Inc( sUIActionNotify_createWindowPtr(anBase)^.x, szer);
            end;
     if anBase.code = ACTN_DESTROYWINDOW then
            begin
            DestroyWindow(sUIActionNotify_createWindowPtr(anBase)^.hwnd);
            end;    
  end;


Struktura sUIActionNotify_createWindow
CODE

type
  sUIActionNotify_createWindowPtr = ^sUIActionNotify_createWindow;
  sUIActionNotify_createWindow = record
    sm: sUIActionNotify_base;
    hWnd: Cardinal;
    hwndParent: Cardinal;
    x: Integer;   ///< Pozycja X na której trzeba wstawić okno. TRZEBA tą wartość zwiększyć o szerokość utworzonego okna!
    y: Integer;///< Pozycja Y na której trzeba wstawić okno. TRZEBA tą wartość zwiększyć o wysokość utworzonego okna!
    Status: Cardinal; ///< Kopia wartości \a status akcji
    txt: Pchar;
    flags :Cardinal;
    font :Cardinal;
    fontBold :Cardinal;
    w :Cardinal;
    h :Cardinal;
  end;
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2012 Invision Power Services, Inc.