Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Vista-Focusbalken in eigener Anwendung/Controls (https://www.delphipraxis.net/84542-vista-focusbalken-eigener-anwendung-controls.html)

Bernhard Geyer 18. Jan 2007 10:54


Vista-Focusbalken in eigener Anwendung/Controls
 
Liste der Anhänge anzeigen (Anzahl: 1)
Weiß jemand wie man den neuen Vista-Focusbalken hinbekommt.
Mein bisheriger Erfolg mit folgenden Code (Noch in Entwicklung) ist als Dateianhang sichtbar.

Delphi-Quellcode:
procedure DrawVistaThemedFocusBar(Grid: TListView; Surface: TCanvas; R: TRect); overload;
var
  pid, sid: Integer;
  Bitmap: TBitmap;
  CheckRect: TRect;
  i: Integer;
  CheckTheme: HTheme;
begin
  Bitmap := TBitmap.Create;
  try
    Bitmap.Width := R.Right - R.Left;
    Bitmap.Height := R.Bottom - R.Top;

    pid := LVP_LISTITEM;

    if Grid.Focused then
      sid := LIS_SELECTED
    else
      sid := LIS_NORMAL;

    CheckRect := Rect(0, 0, Bitmap.Width, Bitmap.Height);

    CheckTheme := OpenThemeData(Grid.Handle, 'button');
    try
      DrawThemeBackground(CheckTheme, Bitmap.Canvas.Handle, pid, sid, CheckRect, nil);
    finally
      CloseThemeData(CheckTheme);
    end;

    bitblt(Surface.Handle, R.Left, R.Top, R.Right - R.Left,
           R.Bottom - R.Top, Bitmap.Canvas.Handle, 0, 0, SRCCOPY);
  finally
    Bitmap.Free;
  end;
end;

Der Austausch von 'button' in der Zeile:
Delphi-Quellcode:
      CheckTheme := OpenThemeData(Grid.Handle, 'button');
mit 'listview' ist noch weniger erfolgreich.

Assertor 31. Mai 2008 22:10

Re: Vista-Focusbalken in eigener Anwendung/Controls
 
Hi,

mal als Nachtrag zu Bernhards Thread:

mit
Delphi-Quellcode:
DrawThemeBackground(ThemeServices.Theme[teMenu], TargetCanvas.Handle, MENU_POPUPITEM, MPI_HOT, ItemRect, nil)
geht es soweit, der Ansatz war richtig, jedoch nicht den Button nehmen :wink:

Problem: Das teMenu kennt nur Hot/Normal/Disabled, aber nicht Selected/SelectedNotFocused wie im Explorer Listview unter Vista. Das ganze Layout vom Selected/Focused-Style im Explorer ist natürlich nicht published im SDK...

Der Trick mit dem 'explorer' als Handle geht auch nur bedingt, soweit das Control von TTreeView ableitet - BDS nutz hier intern ja 'SysTreeView32'.

Gruß Assertor

:dp:

Bernhard Geyer 2. Jun 2008 08:35

Re: Vista-Focusbalken in eigener Anwendung/Controls
 
Danke. Mit deinem Tipp hab ich es hin bekommmen :thumb:

Assertor 2. Jun 2008 09:23

Re: Vista-Focusbalken in eigener Anwendung/Controls
 
Hi Bernhard,

Zitat:

Zitat von Bernhard Geyer
Danke. Mit deinem Tipp hab ich es hin bekommmen :thumb:

Da nicht für ;) Du hilfst mir hier auch so oft :bounce2:

Aber eine Rückfrage: Hast Du auch nur den "einen" State hinbekommen? Ich suche für ein Grid noch eine Variante, die die States SelectedNotFocused, Hot, SelectedHot etc. verarbeitet - also den Vista Explorer-Stil vollständig nachahmt.

Gruß Assertor

Luckie 2. Jun 2008 09:46

Re: Vista-Focusbalken in eigener Anwendung/Controls
 
Was ist ein Focusbalken?

Assertor 2. Jun 2008 09:49

Re: Vista-Focusbalken in eigener Anwendung/Controls
 
Zitat:

Zitat von Luckie
Was ist ein Focusbalken?

Hast ja recht, aber Bernhards Titel ist ja schon über ein Jahr alt - da war das alles noch nicht so klar ;)

Richtiger wäre sicherlich "Microsoft Windows Vista Explorer Treeview Style Gradient Selection and Focused Bar" - oder einfach den Screenshot aus dem ersten Post ansehen.

Gruß Assertor

Bernhard Geyer 2. Jun 2008 18:05

Re: Vista-Focusbalken in eigener Anwendung/Controls
 
Zitat:

Zitat von Assertor
Aber eine Rückfrage: Hast Du auch nur den "einen" State hinbekommen? Ich suche für ein Grid noch eine Variante, die die States SelectedNotFocused, Hot, SelectedHot etc. verarbeitet - also den Vista Explorer-Stil vollständig nachahmt.

Ok, 100%ig ist es noch nicht gelößt, aber halbwegs. Konnte heute aber nicht zu lange damit herumexperimentieren.

stOrM 25. Jun 2008 10:33

Re: Vista-Focusbalken in eigener Anwendung/Controls
 
Hallo Berhard,
mich würde das Thema auch interessieren, deshalb die Frage, wenn du es hinbekommen hast, ob du dies hier veröffentlichen wirst? Wär super!

Viele Grüsse
s!

Assertor 25. Jun 2008 10:44

Re: Vista-Focusbalken in eigener Anwendung/Controls
 
Zitat:

Zitat von stOrM
Hallo Berhard,
mich würde das Thema auch interessieren, deshalb die Frage, wenn du es hinbekommen hast, ob du dies hier veröffentlichen wirst? Wär super!

Ähm,

Zitat:

Zitat von Assertor
Delphi-Quellcode:
DrawThemeBackground(ThemeServices.Theme[teMenu], TargetCanvas.Handle, MENU_POPUPITEM, MPI_HOT, ItemRect, nil)

Zitat:

Zitat von Bernhard Geyer
Danke. Mit deinem Tipp hab ich es hin bekommmen :thumb:

Ich hab doch die Lösung für Bernhard's Problem/Idee schon gepostet. Mußt Du nur noch selbst einbauen :roll: Die restlichen States sind scheinbar nicht dokumentiert, daher wird es hier vermutlich keine weiteren Lösungen geben... - Das ist wohl was, was MS nur für sich und den Explorer haben will.

Gruß Assertor

Bernhard Geyer 28. Jun 2008 07:32

Re: Vista-Focusbalken in eigener Anwendung/Controls
 
Zitat:

Zitat von Assertor
Ich hab doch die Lösung für Bernhard's Problem/Idee schon gepostet. Mußt Du nur noch selbst einbauen :roll: Die restlichen States sind scheinbar nicht dokumentiert, daher wird es hier vermutlich keine weiteren Lösungen geben... - Das ist wohl was, was MS nur für sich und den Explorer haben will.

Das ElPack wurde mit letzten Build entsprechend erweitert. Jedoch sind auch hier noch nicht die weiters Mouse-Over-States implementiert (aus obigen Grund).


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:04 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz