Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Wie bei Apple Taskleiste --> in Delphi programmieren (https://www.delphipraxis.net/63114-wie-bei-apple-taskleiste-delphi-programmieren.html)

Christian18 14. Feb 2006 08:38


Wie bei Apple Taskleiste --> in Delphi programmieren
 
Hallo,

ich will in Delphi eine Leiste programmieren. Ich habe mir das so gedacht, das wenn ich mit der Mouse auf diese Leiste klicke, das dann das Bild größer wird. Wie bei Apple auch unten die Taskleiste. Wie kann ich sowas mit Delphi machen. Gibt es da schon eine Komponente für???

MFG Christian18

Der_Unwissende 14. Feb 2006 08:44

Re: Wie bei Apple Taskleiste --> in Delphi programmieren
 
Hi,
ich weiß nicht ob es dafür eine fertige Komponente gibt, aber was du dazu brauchst bietet dir Delphi allemal. Du benötigst im einfachsten Fall einfach nur ein Panel auf dass du für jeden link ein Image setzt. Dieses veränderst du immer wenn die Maus drüber bewegt wird (Falls OnMouseEnter und OnMouseLeave nicht zu den fertigen Ereignissen eines TImage gehören, einfach von TImage ableiten und dort auf die entsprechenden Nachrichten reagieren).
Das wäre es im einfachsten Fall auch schon. Wie du ein Programm per Drag&Drop auf die Leiste ziehen kannst, hat neulich erst jmd. mit seiner Toolbar gezeigt, musst du mal nach suchen.

Gruß Der Unwissende

PS. Sorry, aber ist absichtlich etwas knapp gehalten, ist halt eine sehr umfangreiche Frage und da du sicherlich weißt, das dir hier keiner eine komplette Lösung postet, hoffe ich es reicht dir als Denkanstoß. Es fehlt halt was du dir wirklich schon gedacht hast, denn wie die Leiste funktioniert (Bild größer bei Maus rüber), dass ist nun ja, gegeben.

Robert Marquardt 14. Feb 2006 09:02

Re: Wie bei Apple Taskleiste --> in Delphi programmieren
 
Die interessante Frage ist ob die Grafiken Vektorgrafiken oder Bitmaps sind.
Vista wird auf jeden Fall Vektorgrafiken nehmen.
Sollten es Bitmaps sein, so muss man auf jeden Fall nicht vergroessern, sondern verkleinern oder es sieht grauenhaft aus.

Christian18 14. Feb 2006 09:34

Re: Wie bei Apple Taskleiste --> in Delphi programmieren
 
Hallo,

hat jemand eine Idee wie ich herrausfinde, ob der Mousezeiger auf ein Image geparkt wurde oder nicht???

MFG Christian18

leddl 14. Feb 2006 09:35

Re: Wie bei Apple Taskleiste --> in Delphi programmieren
 
Hat ein Image ein onMouseOver?

Christian18 14. Feb 2006 09:36

Re: Wie bei Apple Taskleiste --> in Delphi programmieren
 
nein leider nicht

Der_Unwissende 14. Feb 2006 09:51

Re: Wie bei Apple Taskleiste --> in Delphi programmieren
 
Wie bereits gesagt, musst du nur auf die Nachrichten reagieren indem du dir eine Komponente von TImage ableitest.

Delphi-Quellcode:
TExtendedImage = class(TImage)
  private
    FOnMouseEnter : TNotifyEvent;
    FOnMouseLeave : TNotifyEvent;
  protected
    procedure MouseEnter(msg : TMessage); message CM_MOUSEENTER;
    procedure MouseLeave(msg : TMessage); message CM_MOUSELEAVE;
  published
    OnMouseEnter : TNotifyEvent;
end;

procedure MouseEnter(msg : TMessage);
begin
  if self.FOnMouseEnter <> nil then
    begin
      self.FOnMouseEnter(self);
    end;
end;
...
Die beiden Methoden werden immer dann aufgerufen, wenn die Maus den Bereich des Image "betritt" bzw. "verlässt".

noch_ein_hannes 14. Feb 2006 09:55

Re: Wie bei Apple Taskleiste --> in Delphi programmieren
 
Hi,

das Ding im Mac-OSX heist "Dock" und es gibt etliche Tools (Bei Google suchendock windows) für XP
wie z.B. das http://www.openwares.org/. (Downloads/System)

Zu Deiner Frage:

Ein Image besitzt zwar kein MouseOver-Event, aber Du kannst ja das Control unter der Maus
mit Hier im Forum suchenWindowFromPoint() per Timer abfragen:

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var
  P : TPoint;
  h: HWND;
begin
  GetCursorPos(P);

  if (P.x>Left) and (P.x<Left+Width) and
     (P.Y>Top) and (P.Y<Top+Height) then
  begin
    h := WindowFromPoint(p);

    if (h = Img.Handle) AND (Img.Scale < 2) then Img.Scale := Img.Scale + 0.3
    else if (h <> Img.Handle) AND (Img.Scale > 1) then Img.Scale := Img.Scale - 0.3;

  end;
end;

Grüsse,
hannes


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