![]() |
Horizontales anklickbares Menü bauen
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo, der Titel passt vielleicht nicht so ganz, mir fiel aber nichts besseres ein.
Ich möchte ein anklickbares horizontales Menü realisieren ähnlich einem Wizard, wo der User aber auch gezielt zwischen den Menüpunkten hin und herspringen kann. Ich denke durch das Bild wird klarer was ich vorhabe. Der User soll also unter Punkt 1 starten und von dort direkt auf Punkt 3 klicken können um dorthin zu gelangen. Das ganze muss jetzt nicht so bunt sein. Ich hätte aber schon gerne ein solche Form wie in meinem Bild angegeben oder noch Pfeilförmiger um die eigentliche Arbeitsrichtung zu symbolisieren. GGf. muss auch eine einzelne Schaltfläche disabled werden können. Das ganze sollte dem User dann natürlich auch visuell angezeigt werden. Hat jemand eine Idee wie ich so etwas relaisieren kann ? |
AW: Horizontales anklickbares Menü bauen
Möglicherweise mit einem PageControl
|
AW: Horizontales anklickbares Menü bauen
Hübsch zeichnen könntest Du mit GDI+, den jeweiligen klickbaren Bereich könntest Du über Regions realisieren. IIRC war in den MS-Demos zu GDI+ auch eine mit Regions dabei.
|
AW: Horizontales anklickbares Menü bauen
Liste der Anhänge anzeigen (Anzahl: 3)
Noch nicht in eine Komponente gegossen, aber vielleicht willst Du das ja tun ...
Delphi-Quellcode:
unit Test;
///20120828 by Thomas Wassermann interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls; type TReginfo=Record Caption:String; Color:TColor; SelColor:TColor; RGN:HRGN; Rec:TRect; Selected:Boolean; End; TReginfoArray=Array of TReginfo; TForm5 = class(TForm) PaintBox1: TPaintBox; procedure PaintBox1Paint(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure PaintBox1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private { Private-Deklarationen } FReginfoArray:TReginfoArray; procedure Clicked(index: Integer); public { Public-Deklarationen } end; var Form5: TForm5; implementation {$R *.dfm} Const C_SW=200; procedure TForm5.FormCreate(Sender: TObject); var c:TCanvas; i:Integer; begin SetLength(FReginfoArray,3); FReginfoArray[0].Color := clGreen; FReginfoArray[0].SelColor := clLime; FReginfoArray[0].Caption := 'Lasche1'; FReginfoArray[1].Color := clNavy; FReginfoArray[1].SelColor := clBlue; FReginfoArray[1].Caption := 'Lasche2'; FReginfoArray[2].Color := clRed; FReginfoArray[2].SelColor := clYellow; FReginfoArray[2].Caption := 'Lasche3'; c := paintbox1.Canvas; for I := Low(FReginfoArray) to High(FReginfoArray) do begin BeginPath(c.Handle); MoveToEx(c.Handle, i*C_SW, 0, nil); AngleArc(c.Handle,(i+1)*C_SW, Paintbox1.Height div 2, Paintbox1.Height div 2, 90 ,-180); AngleArc(c.Handle,(i )*C_SW , Paintbox1.Height div 2, Paintbox1.Height div 2, -90 ,180); EndPath(c.Handle); FReginfoArray[i].RGN := PathToRegion(c.Handle); FReginfoArray[i].Rec := Rect(i*C_SW,0,(i+1)*C_SW,Paintbox1.Height); end; end; procedure TForm5.FormDestroy(Sender: TObject); var i:Integer; begin for I := Low(FReginfoArray) to High(FReginfoArray) do begin DeleteObject(FReginfoArray[i].RGN); end; end; procedure TForm5.Clicked(index:Integer); begin Showmessage(FReginfoArray[index].Caption); end; procedure TForm5.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var i:Integer; begin for I := Low(FReginfoArray) to High(FReginfoArray) do begin FReginfoArray[i].Selected := PtInRegion(FReginfoArray[i].RGN,x,y); PaintBox1.Invalidate; if PtInRegion(FReginfoArray[i].RGN,x,y) then Clicked(i); end; end; procedure TForm5.PaintBox1Paint(Sender: TObject); var c:TCanvas; I:Integer; begin c := TpaintBox(Sender).Canvas; c.Font.Size := 14; for I := Low(FReginfoArray) to High(FReginfoArray) do begin C.Brush.Style := bsSolid; if FReginfoArray[i].Selected then c.Brush.Color := FReginfoArray[i].SelColor else c.Brush.Color := FReginfoArray[i].Color; PaintRgn(c.Handle,FReginfoArray[i].RGN); AngleArc(c.Handle,(i+1)*C_SW, Paintbox1.Height div 2, Paintbox1.Height div 2, 90 ,-180); AngleArc(c.Handle,(i )*C_SW , Paintbox1.Height div 2, Paintbox1.Height div 2, -90 ,180); C.Brush.Style := bsClear; c.TextRect(FReginfoArray[i].Rec,FReginfoArray[i].Caption,[tfCenter,tfVerticalCenter,tfSingleLine]); end; end; end. |
AW: Horizontales anklickbares Menü bauen
Das sieht doch schon super aus. Ich denke damit komme ich weiter. Danke
|
AW: Horizontales anklickbares Menü bauen
Wobei ich mir gerdachte hätte, sowas schonmal in einer fertigen komponente gesehn zu haben.
Jetzt fehlt nur noch der 3D-Effekt, beim Anklicken, bzw. eine farbliche Änderung oder ein Rahmen um das Angeklickte. |
AW: Horizontales anklickbares Menü bauen
Ich meinte auch, aber so komme ich weiter.
Falls jemanden wieder die Komponente einfällt immer her damit. Ich werde jetzt erst mal mit Bummis Ansatz weitermachen |
AW: Horizontales anklickbares Menü bauen
Solch eine Komponente ist beim TMS Adv Smooth Packet dabei und nennt sich TAdvSmoothStepControl
|
AW: Horizontales anklickbares Menü bauen
@himitsu
3D ist ab Metro eh aus ;-( Nein lässt sich alles problemlos reinrüsten, ist ja nur ein(e) Anregung/Rumpf wobei die Farbänderung ja schon drin ist ... |
AW: Horizontales anklickbares Menü bauen
Zitat:
Dort gibt's ja so irgendsoein ADV-Smooth-Control-Pack. (aber die für mich unerklärliche übermäßige CPU-Belastung ließ mich dieses wieder ignorieren) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:32 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz