Delphi-PRAXiS
Seite 1 von 2  1 2      

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/)
-   -   Horizontales anklickbares Menü bauen (https://www.delphipraxis.net/170048-horizontales-anklickbares-menue-bauen.html)

v2afrank 28. Aug 2012 10:55

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 ?

mkinzler 28. Aug 2012 10:59

AW: Horizontales anklickbares Menü bauen
 
Möglicherweise mit einem PageControl

DeddyH 28. Aug 2012 11:00

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.

Bummi 28. Aug 2012 13:57

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.

v2afrank 28. Aug 2012 14:11

AW: Horizontales anklickbares Menü bauen
 
Das sieht doch schon super aus. Ich denke damit komme ich weiter. Danke

himitsu 28. Aug 2012 14:18

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.

v2afrank 28. Aug 2012 14:21

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

pustekuchen 28. Aug 2012 14:34

AW: Horizontales anklickbares Menü bauen
 
Solch eine Komponente ist beim TMS Adv Smooth Packet dabei und nennt sich TAdvSmoothStepControl

Bummi 28. Aug 2012 14:42

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 ...

himitsu 28. Aug 2012 15:13

AW: Horizontales anklickbares Menü bauen
 
Zitat:

TAdvSmoothStepControl
War das bei dem Zeugs dabei, welches man sich kostenlos bei Emba runterladen konnte?

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.
Seite 1 von 2  1 2      

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