Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Animiertes Menü (https://www.delphipraxis.net/61515-animiertes-menue.html)

mOzZzI 22. Jan 2006 14:09


Animiertes Menü
 
Hallo,
wollte mal fragen, ob jemand so eine Komponente kennt,
die ein Panel oder so was von der Seite des Programms ausfahren und einfahren lässt.
Slide Menü oder so...
Hoffe ihr versteht mich...

Amo 22. Jan 2006 14:23

Re: Animiertes Menü
 
Hi!

Also ich kenne keine solche Komponente, bin auch verglichen zu anderen ein Einsteiger in Delphi^^.
Ich würde aber so etwas vorschlagen:

Delphi-Quellcode:
a := -20;
while a < 200 do
begin
Panel1.Left := a;
inc(a);
sleep(X); // wobei du mit X die schnelligkeit der Bewegung variieren kannst
end;
Das kannst du dann genau so auch mit der höhe machen.
Ich hoffe mal ich habe keinen Fehler gemacht :wink: . Und ich hoffe auch es hilft dir weiter^^.

PS: ich habe es selber nicht getestet

mOzZzI 22. Jan 2006 14:28

Re: Animiertes Menü
 
Irgendwie funktioniert das nicht...

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  a := -20;
while a < 200 do
begin
Panel1.Left := a;
inc(a);
sleep(80); // wobei du mit X die schnelligkeit der Bewegung variieren kannst
end;
end;

Amo 22. Jan 2006 14:52

Re: Animiertes Menü
 
Also ich habe es gerade ausprobiert. Bei mir geht das aber irgendwie auch nur halb :gruebel: .
(Ich nehme mal an du hast nicht vergessen die variable a zu deklarieren^^)
Bei mir wird Panel1 nicht so eingeblendet wie gewollt, es verschwindet zunächst und erscheint dann nach einer zeit bei left=200. Ist irgendwie eine blöde Sache jetzt, tut mir leid aber ich kann jetzt auch nicht weiterhelfen.

mOzZzI 22. Jan 2006 16:16

Re: Animiertes Menü
 
Kennt nicht vill noch jeamand eine Komponente für ein SlideMenü, SlidePanel oder so was...

turboPASCAL 22. Jan 2006 16:44

Re: Animiertes Menü
 
Ich wüde es eher so machen:
Delphi-Quellcode:
procedure TForm.FormCreate(Sender: TObject);
var a: integer;
begin
  a := -Panel1.Width;
  Panel1.Left := a;
  Panel1.Align := alNone;
  form1.DoubleBuffered := true;
  show;
  while a < 0 do
  begin
    Panel1.Left := a;
    inc(a);
    sleep(1); // bzw. Delay() hier aus der Delphipraxis
    application.ProcessMessages;
  end;
  Panel1.Align := alLeft;
end;
Allerdings ist FormCreate nicht der richtige Ort. Nun kommt es noch darauf an wie und wann das Panel ausfahren soll.

turboPASCAL 22. Jan 2006 17:45

Re: Animiertes Menü
 
So, mal noch eine elegantere Version zum "ausklappen" eines Panels beim Mouseover ohne extra noch eine Komponente einzubauen.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
    procedure Panel1Showing; // Ausklappen
    procedure Panel1Hiding; // Einklappen
  public
    { Public-Deklarationen }
    procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER; // Mouseoverereignisse
    procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE; // abfangen
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  DoubleBuffered := true; // Form1

  Panel1.Align := alNone;
  Panel1.Tag := -Panel1.Width + 5;
  Panel1.Left := Panel1.Tag;
end;

procedure TForm1.CMMouseEnter(var Message: TMessage);
begin
  if Message.LParam = Longint(Panel1) then Panel1Showing;
end;

procedure TForm1.CMMouseLeave(var Message: TMessage);
begin
  if Message.LParam = Longint(Panel1) then Panel1Hiding;
end;

procedure TForm1.Panel1Showing;
begin
  while Panel1.Tag < 0 do
  begin
    Panel1.Left := Panel1.Tag;
    Panel1.Tag := Panel1.Tag + 1;
    sleep(1); // oder halt Delay verwenden
    application.ProcessMessages;
  end;
  Panel1.Align := alLeft;
end;

procedure TForm1.Panel1Hiding;
begin
  windows.Beep(880,025);
  Panel1.Align := alNone;
  Panel1.Tag := 0;
  while Panel1.Tag > -Panel1.Width + 5 do
  begin
    Panel1.Left := Panel1.Tag;
    Panel1.Tag := Panel1.Tag - 1;
    sleep(1); // oder halt Delay verwenden
    application.ProcessMessages;
  end;
end;

end.

mOzZzI 22. Jan 2006 18:12

Re: Animiertes Menü
 
Shr vielen Dank an dich TurboPascal!!
Wie kann ich das denn jetzt umschreibe, wenn man das alles auf der rechten Seite haben will, aso Panel1.Align := alRight ??

turboPASCAL 22. Jan 2006 18:45

Re: Animiertes Menü
 
Liste der Anhänge anzeigen (Anzahl: 1)
Wenn du es mit einem Button lösen möchtest kanst du im Beispiel mal nachschauen.

Um das gane rechtsbündig zu machen musst du nur ein wenig nachdenken. ;)

Nils_13 22. Jan 2006 19:11

Re: Animiertes Menü
 
@turboPASCAL: Funktioniert ja, aber eine kleine Anwendung die beiliegt kann nie schaden :wink:


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:31 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-2025 by Thomas Breitkreuz