Strona 1 z 1

Delphi 7 i przezroczysta ramka okna

: 23 sie 2010, 15:41
autor: pc.qwerty
Witam ekspertów, znawców delphi, i innych. Chciałbym się dowiedzieć czy możliwe jest w Delphi 7 zrobienie ramki okna programu która wspierałaby aero, tak jak niektóre kreatory windowsa, Windows DVD Maker i inne programy. Dokładnie to chodzi mi o coś takiego jak na screenie. Wiem że można zrobić całe okno przezroczyste, ale interesuje mnie tylko ramka i rozmycie. [warning]Browary czekają :hyhy:[/warning]

Re: Delphi 7 i przezroczysta ramka okna

: 23 sie 2010, 15:49
autor: domel
Z tego co pamiętam to można tylko trzeba wpisać odpowiedni kod np. coś takiego:

Kod: Zaznacz cały

var
  xVer: TOSVersionInfo;
  hDWM: THandle;
  DwmIsCompositionEnabled: function(pbEnabled: BOOL): HRESULT; stdcall;
  DwmExtendFrameIntoClientArea: function(hWnd: HWND; const pxMarInset: PRect): HRESULT; stdcall;
  bEnabled: BOOL;
  xFrame: TRect;

// ...

  xVer.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
  GetVersionEx(xVer);
  if xVer.dwMajorVersion >= 6 then
  begin
    hDWM := LoadLibrary('dwmapi.dll');
    @DwmIsCompositionEnabled := GetProcAddress(hDWM, 'DwmIsCompositionEnabled');
    @DwmExtendFrameIntoClientArea := GetProcAddress(hDWM, 'DwmExtendFrameIntoClientArea');
    if (@DwmIsCompositionEnabled <> nil) and
       (@DwmExtendFrameIntoClientArea <> nil) then
    begin
      DwmIsCompositionEnabled(@bEnabled);
      if bEnabled then
      begin
        xRect := Rect(-1, -1, -1, -1);
        DwmExtendFrameIntoClientArea(FrmMain.Handle, @xRect);
      end;
    end;
    FreeLibrary(hDWM);
  end;

Re: Delphi 7 i przezroczysta ramka okna

: 23 sie 2010, 15:52
autor: pc.qwerty
A w którym konkretnie miejscu programu trzeba to wkleić :?:

Re: Delphi 7 i przezroczysta ramka okna

: 23 sie 2010, 16:02
autor: domel
A tutaj to już nie pomogę bo nigdy tego nie testowałem i raczej nie będę. A i bym zapomniał w delphi 2007 i wyżej możesz to zrobić w ustawieniach formy.

Re: Delphi 7 i przezroczysta ramka okna

: 23 sie 2010, 16:13
autor: pc.qwerty
To chyba prościej będzie zaktualizować delphi :P

Re: Delphi 7 i przezroczysta ramka okna

: 23 sie 2010, 16:20
autor: SzymekRak
Moim zdaniem to z var trzeba wstawić w unicie pomiędzy var a implementation. A resztę np w FormCreate.
Jednakowoż właśnie to przetestowałem. FrmMain zmieniam na nazwę formy, tu:

Kod: Zaznacz cały

DwmIsCompositionEnabled: function(pbEnabled: BOOL): HRESULT; stdcall;
zamiast BOOL dałem Pointer, gdyż inaczej się nie kompiluje.
Jeszcze w CreateForm dałem var i xrect:trect.
Włączam i mam zwykłą formę. Tak samo, jakbym w ogóle tego nie wklejał. Może coś źle robię, ale moim zdaniem ten kod niezbyt działa.
Może trzeba zmienić współrzędne w Rect(...);

Re: Delphi 7 i przezroczysta ramka okna

: 23 sie 2010, 16:32
autor: domel
Szymek ty czy ja moglibyśmy się jeszcze pomęczyć na delphi 7 i coś spróbować wykombinować ale tak jak pc.qwerty to niech sobie tym głowy nie mąci i niech lepiej zainstaluje nowsze delphi.

Re: Delphi 7 i przezroczysta ramka okna

: 23 sie 2010, 16:35
autor: pc.qwerty
No dokładnie, lepiej się zająć tworzeniem programu, a ta ramka to przecież tylko dodatek. :)

Re: Delphi 7 i przezroczysta ramka okna

: 23 sie 2010, 16:48
autor: miki100
Witam :)
http://www.installationexcellence.com/a ... 0Glass.zip tu jest projekt(nie mój), wykorzystujący Aero na panelu. W Delphi 7 przy otwieraniu wyskakuje błąd, ale nic związanego z aero (coś od Memo i AboutBox). http://www.installationexcellence.com/a ... Index.html na tej stronie jest ogólnie wszystko o przystosowywaniu aplikacji Delphi do Visty/Sevena .

Re: Delphi 7 i przezroczysta ramka okna

: 24 sie 2010, 3:46
autor: urban92
Na początku zawsze myślałem że obsługa Aero działa dopiero od Delphi 2007, poświęciłem się i zainstalowałem nowsze Delphi, sprawdziłem, działa ale to nie to czego chciałem ja i wy, udało mi się tylko całą formę "zglassować", chyba nie było innej możliwości ale nie wiem dokładnie bo to było dawno kiedy moje umiejętności były sporo mniejsze, tam po prostu na formie w Object Inspectorze jest opcja "Glass" albo coś w ten deseń już nie pamiętam dokładnie. Potem znalazłem gdzieś kod który w Delphi 7 pozwala na podobny efekt jaki można było zrobić w nowszym Delphi, właściwie to teoretycznie na więcej, jednak są problemy z czcionkami a interfejs się pieprzy po wrzuceniu czegokolwiek na formę. I w ten sposób dałem sobie spokój z Aero i zająłem się dopracowywaniem samych aplikacji.

Zamin dałem sobie spokój zrobiłem to, prawie dokładnie rok temu na potrzeby anulowanego Tau Project (kto to jeszcze pamięta łapa w górę :P ):

http://www.przeklej.pl/plik/project1_zi ... t4he5ne2j6

Wiem na 100% że takie kreatory są możliwe do zrobienia w Visual Studio od 2008, w Delphi też jest to jak najbardziej możliwe bo AQQ korzysta z aero dość intensywnie w swoim interfejsie, a jest pisany w Delphi.

Re: Delphi 7 i przezroczysta ramka okna

: 24 sie 2010, 11:19
autor: domel
urban92 pisze:AQQ korzysta z aero dość intensywnie w swoim interfejsie, a jest pisany w Delphi.
Tylko z tego co pamiętam to ostatnio było info że przepisali je na Delphi 2009.
PS: AQQ korzysta z Aero np. w tym miejscu:
Obrazek

Re: Delphi 7 i przezroczysta ramka okna

: 25 sie 2010, 13:06
autor: pc.qwerty
Dzięki wszystkim za odpowiedzi, w delphi 2007 robi się to właśnie tak jak chcę. :) Browary idą do wszystkich którzy wypowiedzieli się w tym temacie. :zdrowko: