Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Was für ne scharfe Auswahlleiste (https://www.delphipraxis.net/95822-fuer-ne-scharfe-auswahlleiste.html)

Jelly 13. Jul 2007 17:36


Was für ne scharfe Auswahlleiste
 
Liste der Anhänge anzeigen (Anzahl: 1)
In einem ganz anderem Thread, nämlich in diesem, ging es um Backupprogramme. Und genau das biete eine wirklich hübsche Navigationsleiste an, wie sie im Anhang zu sehen ist.

Was mir daran so besonders gefällt, ist das beim Drüberbewegen der Maus, die Transparenz der Markierung nach rechts hin zunimmt, so dass am Rand sogar der Hintergrund komplett durchleuchtet.

Kennt jemand eine solche Komponente für Delphi. Ich hab die TMS Component Pack. Dort sind paar hundert Komponenten drin, aber nichts in der Richtung, es sei ich wär blind.

SirThornberry 13. Jul 2007 17:38

Re: Was für ne scharfe Auswahlleiste
 
eigentlich sollte das selbst programmieren kein Problem weiter sein. Die Markierung wird einfach nur ein Bild mit Alphamaske sein. Und nach Rechts hinn ist die Alphamaske eben transparenter.

Prototypjack 13. Jul 2007 17:45

Re: Was für ne scharfe Auswahlleiste
 
Moin,

Stimmt, das Ding sieht tatsächlich nicht schlecht aus ;)

Wenn ich gezwungen wäre sowas zu bauen, würde ich (weil ich es für sehr unwahrscheinlich halte, dass es sowas bereits gibt), wohl auf das gute alte Virtual Treeview von Mike zurückgreifen. Damit sollte das ganz leicht gehen.
  • Hintergrundbild reinstecken
  • NodeHeight einstellen
  • Node-Drawing abfangen (geht ganz leicht, habe ich schon oft gemacht. Die Komponente liefert eigens dafür gesonderte Events) und ab geht's.
Wie gesagt, das würde ich am ehesten versuchen. Eine fertige Komponente die dir die Funktion vom Screenshot bietet kenne ich leider nicht.

Ich hoffe ich konnte ein bisschen weiterhelfen!

Grüße,
Max

(Natürlich kannst du das ganze auch leicht selbst basteln, aber dann ist es nicht mehr so allgemein, wobei man die Lösung per Virtual Treeview ohne, bzw. mit wenigen Änderungen, wiederverwenden könnte!)

SirThornberry 13. Jul 2007 18:07

Re: Was für ne scharfe Auswahlleiste
 
so kompliziert würde ich es mir gar nicht machen. Um es richtig flexibel zu halten braucht man nur die Markierung als Komponenten programmieren. Sobald sich dann die Maus über der Komponente befindet braucht man einfach nur ein zuvor zugewiesenes Bild (mit Alphakanal) einblenden, ansonsten einfach gar nix zeichnen.

blawen 13. Jul 2007 18:46

Re: Was für ne scharfe Auswahlleiste
 
Der Linke Teil wurde mit JVCL-Komponenten erstellt - ev. auch der Rechte Menüteil?

Jelly 13. Jul 2007 18:48

Re: Was für ne scharfe Auswahlleiste
 
Alphamasken ist ja schön und gut. Nur hab ich keinen blassen Schimmer wie ich sowas angehen könnte.

(Das linke Menü ist kein Problem, dafür hätte ich eine Komponente.)

SirThornberry 13. Jul 2007 18:59

Re: Was für ne scharfe Auswahlleiste
 
mit der Funktion AlphaBlend aus der Unit Windows geht es eigentlich.

Khabarakh 13. Jul 2007 19:11

Re: Was für ne scharfe Auswahlleiste
 
Um ein PNG zu laden, kannst du PngDelphi benutzen. Die genannte Funktion AlphaBlend würde in diesem Falle ausreichen, sobald es aber um ein bisschen mehr als simples Aufeinanderkopieren zweier Bitmaps geht, solltest du zu GDI+ oder GR32 greifen, denn da Delphi noch GDI benutzt, hat es keine Ahnung von deinem Alphakanal, was ungut enden könnte.

PS: Normalerweise halte ich mich mit solchen Kommentaren zurück, da sie meist nicht so wirklich weiterhelfen, aber da ich weiß, dass du mit C# programmierst (programmiert hast?), muss ich es einfach erwähnen: Mit WPF könnte man so ein Ding in 5 Minuten from scratch entwickeln, ohne eine Zeile Code geschrieben oder irgendein Bildbearbeitungsprogramm geöffnet zu haben.

Jelly 14. Jul 2007 10:41

Re: Was für ne scharfe Auswahlleiste
 
Zitat:

Zitat von Khabarakh
Um ein PNG zu laden, kannst du PngDelphi benutzen. Die genannte Funktion AlphaBlend würde in diesem Falle ausreichen, sobald es aber um ein bisschen mehr als simples Aufeinanderkopieren zweier Bitmaps geht, solltest du zu GDI+ oder GR32 greifen, denn da Delphi noch GDI benutzt, hat es keine Ahnung von deinem Alphakanal, was ungut enden könnte.

Mit GR32 meinst du wohl Graphics32... Damit könnte es gehen, hab ich gar nicht dran gedacht.

Zitat:

Zitat von Khabarakh
Mit WPF könnte man so ein Ding in 5 Minuten from scratch entwickeln, ohne eine Zeile Code geschrieben oder irgendein Bildbearbeitungsprogramm geöffnet zu haben.

Also die .NET Lösung würd mich auch interessieren, weil ich auf der Arbeit ausschliesslich mit .NET arbeite und den Chef beeindrucken will :mrgreen:

Khabarakh 15. Jul 2007 11:36

Re: Was für ne scharfe Auswahlleiste
 
Liste der Anhänge anzeigen (Anzahl: 2)
Zitat:

Zitat von Jelly
Also die .NET Lösung würd mich auch interessieren, weil ich auf der Arbeit ausschliesslich mit .NET arbeite und den Chef beeindrucken will :mrgreen:

Sodele, ich hab da mal was vorbereitet... :mrgreen: .

Die einzelnen Schritte in Kurzfassung:
  1. Wie gewohnt (bzw. erfrischend ungewohnt im Vergleich zur Win32-GUI) das Layout erstellen und eine ListBox inkl. einiger Items hinzufügen. Schon werden die Vorteile von WPFs Lookless Controls ersichtlich: zum Einen können wir in eine stinknormale Listbox einfach ein Image oder formatierten Text werfen...
  2. ... zum Anderen können wir nun das Standard-Aussehen (Template) der ListBoxItems beliebig verändern, ohne die Logik der ListBox neu schreiben zu müssen. Es bleibt dabei: null Zeilen Code.
    In Blend gelangt man zum Template durch einen Rechtsklick auf das Item -> Edit Control Parts (Template)
  3. Zur Realisierung des Rahmens habe ich den ContentPresenter (also das Ding, in dem nachher der eigentliche Item-Inhalt landet) in ein Grid verpackt, um ein (abgerundetes) Rectangle darunter schieben zu können. Dem Rectangle geben wir mit zwei Klicks noch den richtigen AlphaMask-Gradienten und verkoppeln über einen Trigger seine Visible-Eigenschaft mit der IsMouseOver-Eigenschaft des Items. Fertig.
Man könnte natürlich noch ein wenig/ewig am Layout herumtweaken, Animationen einfügen (langsames Einblenden des Rahmens usw.) oder beispielsweise die linke Leiste noch ans Original anpassen, aber in erster Linie ging es ja darum, so einfach wie möglich den transparenten Rahmen zu realisieren.

Zu näheren Erklärungen stehe ich gerne bereit, WPF ist nicht gerade ein auf den ersten Blick erfassbares Gebiet.

Jelly 15. Jul 2007 13:29

Re: Was für ne scharfe Auswahlleiste
 
Das sieht doch echt klasse aus :thumb:
Das mit dem .NET 3.0 stört mich etwas. Kann ich das im VS 2005 nutzen, in einem Projekt parallel zu .NET 2.0?

Elvis 15. Jul 2007 13:42

Re: Was für ne scharfe Auswahlleiste
 
Zitat:

Zitat von Jelly
Das mit dem .NET 3.0 stört mich etwas. Kann ich das im VS 2005 nutzen, in einem Projekt parallel zu .NET 2.0?

Das 3.0 ist nur dummes Marketinggelaber. .Net 3.0 ist eigentlich .Net 2.0 plus ein paar zusätzliche Bibliotheken.
Du kannst das einfach so im Studio öffnen wenn du 3.0 installiert hast. Als Designer kann man die .Net 3.0 Extensions für VS sowieso nehmen, sich kaputt lachen und wegschmeißen.
Klarabella (:mrgreen:) hat Bei Google suchenExpression Blend genommen.

Nachtrag: WPF/Avalon hat ein paar signifikante Nachteile, die man nicht vergessen sollte:
  • Die Apps brauchen 5 Jahre zum Starten wenn der Fontcache service noch nicht läuft.
  • Die korrupten Herren aus Redmond haben wohl ein paar Deals mit GraKa-Herstellern abgeschlossen:
    • Es wird nur in Hardware rendert wenn du eine DX9 Karte mit Pixelshader 2.0 hast, auch wenn das gar nicht notwendig gewesen wäre. (gilt ebenfalls für Aero in Vista)
      WPF in Software heißt 100% Auslastung auf einer CPU.
  • Minimum ist XP SP2. D.h.: Bei wem das Setup von SP2 abkackt und derjenige nicht weiß wie Servicepack slipstreaming funkktioniert, wird deine App nicht benutzen können.
  • Subpixelrendering (MS nennt es ClearType) ist Pflicht! Wer also einen CRT oder alten TFT besitzt bekommt verschmierte Schrift.
  • Gibbet nicht für Mono

dominikkv 15. Jul 2007 13:49

Re: Was für ne scharfe Auswahlleiste
 
Zitat:

Zitat von Jelly
(Das linke Menü ist kein Problem, dafür hätte ich eine Komponente.)

welche :stupid:

Christian S. 15. Jul 2007 13:55

Re: Was für ne scharfe Auswahlleiste
 
Ich muss sagen, dass ich weder den Designer im VS noch Expression Blend wirklich toll finde. Ich schreib den XAML Code inzwischen fast vollständig selber. Das ist irgendwie wie bei HTML und die ganzen WYSIWYG-Editoren: Für einfache Sachen geht's schneller, aber irgendwann stößt's an seine Grenzen.

Elvis 15. Jul 2007 14:00

Re: Was für ne scharfe Auswahlleiste
 
Zitat:

Zitat von Christian S.
Das ist irgendwie wie bei HTML und die ganzen WYSIWYG-Editoren: Für einfache Sachen geht's schneller, aber irgendwann stößt's an seine Grenzen.

Blend ist schon eine ganze Ecke besser als alle WYSIWYG-Krüppel, die bisher für so manche Markup-Sprache herumflattern...
OTOH, XAML ist mit der Möglichkeit für Code completion durch ein XSD im Hinterkopf entwickelt wurden.
Es ist also noch einfacher zu tippen als xHTML.

Khabarakh 15. Jul 2007 15:28

Re: Was für ne scharfe Auswahlleiste
 
Zitat:

Zitat von Elvis
Minimum ist XP SP2. D.h.: Bei wem das Setup von SP2 abkackt und derjenige nicht weiß wie Servicepack slipstreaming funkktioniert, wird deine App nicht benutzen können.

Sebst mit SP2 ist man nicht ganz glücklich: kein Anti-Aliasing (o.O), keine Hardwarebeschleunigung bei transparenten Fenstern[*] (soll heißen, wie du schon sagtest: unbenutzbar). Und WPF selbst ist auch nicht das Ende aller Wahrheit (softwaregerenderte Effekte?), für wirkliche Projekte würde ich auf v2 warten. Man hätte fast meinen können, sie wären unter Zeitdruck gestanden, würden wir nicht selbst ein Jahr nach dem Release immer noch ohne IDE-Unterstützung dastehen. Blend finde ich allerdings wirklich nett gemacht, auch wenn es davon wohl keine Express-Version geben wird :cry: .
Zitat:

Zitat von Elvis
Gibbet nicht für Mono

Wer Moonlight in 21 Tagen auf die Beine stellt, zu dem hab ich Vertrauen :stupid: .
[*]Ein Fix existiert seit kurzer Zeit, aber Microsoft rät natürlich von der Installation ab - Vista will sich schließlich verkaufen.

Jelly 15. Jul 2007 21:29

Re: Was für ne scharfe Auswahlleiste
 
Nun ja... Mit all den Einschränkungen hilft mir das für die Arbeit nicht wirkich weiter. Die Applikation muss auf 800 PCs laufen, da kann ich also nicht davon ausgehen dass überall die neuste Hardware drin ist. Schade eigentlich.

@dominikkv: Zum linken Menü... Da ist was bei den TMS dabei.

MagicAndre1981 15. Jul 2007 22:29

Re: Was für ne scharfe Auswahlleiste
 
Zitat:

Zitat von Khabarakh
[*]Ein Fix existiert seit kurzer Zeit, aber Microsoft rät natürlich von der Installation ab - Vista will sich schließlich verkaufen.

hab den Fix auch requestet, ist doch kein Akt :zwinker:

Ghostwalker 16. Jul 2007 06:07

Re: Was für ne scharfe Auswahlleiste
 
@Khabarakh

Hab mir dein Programm mal runtergeladen...lüpt nicht auf meinem XP SP2-System. Faselt irgendwas von System.IO.FileNotFound.

fLaSh11 16. Jul 2007 06:22

Re: Was für ne scharfe Auswahlleiste
 
haste auch .NET 3.0?

Ghostwalker 16. Jul 2007 12:14

Re: Was für ne scharfe Auswahlleiste
 
ok...mit .NET 3 tuts.

Jelly 16. Jul 2007 21:05

Re: Was für ne scharfe Auswahlleiste
 
Zurück zur eigentlichen Delphi Frage.
Ich habe jetzt diesen Code von Jens angekuckt, und damit lässt sich schon bischen was anfangen.

Nur krieg ich damit keinen progressive Erhöhung der Transparenz nach rechts hin... Wie könnte man denn da den Code anpassen ?

SirThornberry 16. Jul 2007 23:53

Re: Was für ne scharfe Auswahlleiste
 
dafür muss
Delphi-Quellcode:
LBlendFunc.AlphaFormat := 0;
zu
Delphi-Quellcode:
LBlendFunc.AlphaFormat := AC_SRC_ALPHA;
werden. Das Bitmap muss dann natürlich auch 32bit Farbtiefe haben.
Es kann sein das Windows dabei noch irgendwas verbockt. Ich schau mir das mal an und poste notfalls noch meine eigene Routine (wobei die auch fix zusammengetippt ist).

SirThornberry 17. Jul 2007 08:55

Re: Was für ne scharfe Auswahlleiste
 
Liste der Anhänge anzeigen (Anzahl: 2)
Da die Windows-Funktion einem das Leben schwer macht in dem sie auch den Alphakanal des Ziel-HDC berücksichtig hab ich mal eine eigene Funktion geschrieben:
Delphi-Quellcode:
procedure BitBltAlpha(DestDC: HDC; X, Y, Width, Height: Integer; SrcBmp: TBitmap; XSrc, YSrc: Integer);
var
  lDst       : TBitmap;
  lPixelDst,
  lPixelSrc  : PRGBQuad;
  lCountX,
  lCountY    : Integer;
  lAlphaNeg  : Byte;
begin
  if (SrcBmp.PixelFormat <> pf32bit) then
    BitBlt(DestDC, X, Y, Width, Height, SrcBmp.Canvas.Handle, XSrc, YSrc, SRCCOPY)
  else
  begin
    if (Width > SrcBmp.Width) then
      Width := SrcBmp.Width;
    if (Height > SrcBmp.Height) then
      Height := SrcBmp.Height;
    lDst := TBitmap.Create();
    lDst.PixelFormat := pf32bit;
    lDst.SetSize(Width, Height);
    BitBlt(lDst.Canvas.Handle, 0, 0, Width, Height, DestDC, X, Y, SRCCOPY);

    lPixelSrc := SrcBmp.ScanLine[SrcBmp.Height - 1];
    lPixelDst := lDst.ScanLine[lDst.Height - 1];
    for lCountY := lDst.Height - 1 downto 0 do
    begin
      for lCountX := lDst.Width - 1 downto 0 do
      begin
        lAlphaNeg := not(lPixelSrc.rgbReserved);
        lPixelDst.rgbBlue := ((lPixelSrc.rgbBlue * lPixelSrc.rgbReserved) + (lPixelDst.rgbBlue * lAlphaNeg)) div 255;
        lPixelDst.rgbGreen := ((lPixelSrc.rgbGreen * lPixelSrc.rgbReserved) + (lPixelDst.rgbGreen * lAlphaNeg)) div 255;
        lPixelDst.rgbRed := ((lPixelSrc.rgbRed * lPixelSrc.rgbReserved) + (lPixelDst.rgbRed * lAlphaNeg)) div 255;
        inc(lPixelDst);
        inc(lPixelSrc);
      end;
    end;
    BitBlt(DestDC, X, Y, Width, Height, lDst.Canvas.Handle, 0, 0, SRCCOPY);
    lDst.Free;
  end;
end;
Die Funktion ist wie die Funktion BitBlt zu nutzen. Anstelle eine Src-HDC übergibt man ein Src-Bitmap. Wenn dieses eine Farbtiefe von 32bit hat wird der Alphakanal beim blitten berücksichtigt.

OregonGhost 17. Jul 2007 09:26

Re: Was für ne scharfe Auswahlleiste
 
Zitat:

# Es wird nur in Hardware rendert wenn du eine DX9 Karte mit Pixelshader 2.0 hast, auch wenn das gar nicht notwendig gewesen wäre. (gilt ebenfalls für Aero in Vista)
Das gilt aber doch nur für Effekte, die Tier 2 benötigen, oder? Also z.B. radiale Farbverläufe. Alle einfacheren Sachen sollten auch mit Tier 1 funktionieren (mal abgesehen davon, dass man Karten unter SM3 eigentlich kaum noch bekommt, Tier 1 ist alles ab Radeon256 / Geforce256, Tier 2 ab Radeon 9500 / GeForce 5).
Und aus der Tier-1-Liste:
Zitat:

Most 2D rendering is supported. [...]
Most 3D rasterization is supported. [...]
On Windows Vista, layered windows are hardware accelerated.
Also nicht ganz so schlimm.

Jelly 17. Jul 2007 17:02

Re: Was für ne scharfe Auswahlleiste
 
Ganz herzlichen Dank, Jens. Damit kann ich doch was anfangen. Werde wohl die Tage mich ransetzen, damit eine Delphi Komponente zu schreiben, denn solch eine Select-Liste macht sich einfach nur genial.

DeddyH 17. Jul 2007 17:19

Re: Was für ne scharfe Auswahlleiste
 
Zitat:

Zitat von Jelly
Werde wohl die Tage mich ransetzen, damit eine Delphi Komponente zu schreiben

Würdest Du die auch hier veröffentlichen? Da hängt zwar nicht mein Leben daran, aber es sieht wirklich nett aus, das muss ich zugeben.

Jelly 17. Jul 2007 17:56

Re: Was für ne scharfe Auswahlleiste
 
So war das schon gedacht, zumal der Verdienst ja nicht dann mir gilt sondern dem Jens.

Aber mal noch eine Frage... Mit welchem Programm kann ich denn eine 32bit Bitmap erzeugen. Meine Palette reicht von Paint, Paint.NET bis hin zu Macromedia Fireworks, und die können alle nur bis 24bit.

lbccaleb 17. Jul 2007 19:08

Re: Was für ne scharfe Auswahlleiste
 
Zitat:

Zitat von dominikkv
Zitat:

Zitat von Jelly
(Das linke Menü ist kein Problem, dafür hätte ich eine Komponente.)

welche :stupid:


auch dafür kann man die komponente raize components benutzen, leider ist die kostenpflichtig, gibt aber ne trial version...

ztu downen @raize components

Khabarakh 17. Jul 2007 19:27

Re: Was für ne scharfe Auswahlleiste
 
Zitat:

Zitat von Jelly
Aber mal noch eine Frage... Mit welchem Programm kann ich denn eine 32bit Bitmap erzeugen. Meine Palette reicht von Paint, Paint.NET bis hin zu Macromedia Fireworks, und die können alle nur bis 24bit.

Sowohl Paint.Net als auch Gimp besitzen Alpha-Channel-(und damit natürlich auch PNG-)Support, auch wenn mir bei beiden die Möglichkeit fehlt, den Alphakanal direkt zu bearbeiten (wie es bei PSP möglich war/ist) - vielleicht habe ich ihn auch nur noch nicht entdeckt :stupid: .

SirThornberry 17. Jul 2007 19:50

Re: Was für ne scharfe Auswahlleiste
 
ich mal die Bilder in Paint und füge dann mit einem selbst geschriebenen Programm das Alphakanal bild in den vorgesehenen Kanal des eigentlichen Bildes ein.
Das macht sich eigentlich ganz gut wenn man keine Lust auf aufgeblähte tools hat.

Khabarakh 17. Jul 2007 20:05

Re: Was für ne scharfe Auswahlleiste
 
Wenn jetzt sogar schon Paint.Net aufgebläht sein soll, programmiere ich lieber wieder CLIs ;) . Ich mag verstehen, dass Gimp nicht jedermanns Sache ist (wobei es jau auch "GimpShop" gibt), aber P.N ist wirklich für jeden User ein perfekter Ersatz für Paint.

SirThornberry 17. Jul 2007 20:14

Re: Was für ne scharfe Auswahlleiste
 
ich kenne paint.net nicht. ich wollte damit sagen das es nicht unbedingt immer ein fertiges programm sein muss sondern das man sich auch einfach ein paar zeilen zusammentippen kann.

Khabarakh 17. Jul 2007 20:49

Re: Was für ne scharfe Auswahlleiste
 
Könnte man natürlich, der ein oder andere wird dabei auch etwas lernen, aber letztendlich sollte jeder, der mehr als zweimal jährlich ein Bildbearbeitungsprogramm benötigt, sich einen Ruck geben und 10 Sekunden für die Installation von P.N opfern. Es fängt doch schon bei der für diesen Thread benötigten Grafik an: ein abgerundetes Rechteck ohne Anti-Aliasing kann man dem Nutzer von heute schon fast nicht mehr vor die Füße werfen.
Ganz zu schweigen von dem kleinen Schatteneffekt am oberen Ende der Auswahlleiste ;) .

thabaker 17. Jul 2007 21:20

Re: Was für ne scharfe Auswahlleiste
 
// offtopic
dass man die Alphamaske der Ebenen nicht direkt bearbeiten kann ist imho schon ein Nachteil. Dann kannst du auch erst die ganzen schönen Effekt machen ;) (Korrigiere mich bitte wenn es da falsch liege, aber das AlphaBlend-Plugin erlaubt eben auch kein inline-editing)

Khabarakh 17. Jul 2007 21:55

Re: Was für ne scharfe Auswahlleiste
 
Meine Meinung, doch da ich keinen Freeware-Editor kenne, der das erlaubt (Gimp kann lediglich die Kanäle in einzelne Bilder separieren, die man nach dem Editieren wieder zusammenfügen muss - ebenfalls ein Gefummel), bleibt Paint.Net meine Empfehlung. Der sonstige Alpha-Support ist ja durchaus benutzbar. Und falls ich das Feature irgendwann einmal dringend benötigen würde, müsste ich es eben kurz selbst hineinhacken :mrgreen: .

Jelly 19. Jul 2007 21:43

Re: Was für ne scharfe Auswahlleiste
 
Zitat:

Zitat von Jelly
@dominikkv: Zum linken Menü... Da ist was bei den TMS dabei.

bzw. wenns nix kosten darf, so hab ich auch diese im Einsatz: dxContainer aus dem Design eXperience Package


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:24 Uhr.

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