Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Mouseover bei Object Bevel / Cursor ausblenden (https://www.delphipraxis.net/100187-mouseover-bei-object-bevel-cursor-ausblenden.html)

taktaky 24. Sep 2007 11:01


Mouseover bei Object Bevel / Cursor ausblenden
 
Hallo,

ich möchte den Cursor nur auf den Bereich Bevel ausblenden

Ist das möglich?
ich möchte den Befehl : Screen.Cursor := crNone ausführen, wenn der Cursor gerade auf Bevel sich befindet



---------------

pstruh 24. Sep 2007 11:08

Re: Mouseover bei Object Bevel / Cursor ausblenden
 
Wie wäre es mit Bevel1.Cursor:=crNone?

taktaky 24. Sep 2007 11:53

Re: Mouseover bei Object Bevel / Cursor ausblenden
 
Zitat:

Zitat von pstruh
Wie wäre es mit Bevel1.Cursor:=crNone?

Hallo

ich habe meine Frage nicht gut ausgedrückt

Ich möchte den Cursor auf den Bereich Bevel1 ein- und ausblenden durch Click auf Bevel1 selbst

Momentan verwende ich ein Click auf ein Button :
Delphi-Quellcode:
procedure TForm1.Button7Click(Sender: TObject);
begin
if Button7.Caption='einblenden' then
  begin

   Button7.Caption:='ausblenden';
   Bevel1.Cursor:=crNone
   else

   begin
   Button7.Caption:='einblenden';
   ShowCursor(true); // show cursor
   end;

end;
Ist das möglich?


Gruß
______________

Alien426 24. Sep 2007 12:08

Re: Mouseover bei Object Bevel / Cursor ausblenden
 
Zitat:

Zitat von taktaky
Delphi-Quellcode:
procedure TForm1.Button7Click(Sender: TObject);
begin
if Button7.Caption='einblenden' then
  begin

   Button7.Caption:='ausblenden';
   Bevel1.Cursor:=crNone
   else

   begin
   Button7.Caption:='einblenden';
   ShowCursor(true); // show cursor
   end;

end;

Oh weh. Und diesen Code lässt Delphi durchgehen? Keine Warnungen?

Denn von der Logik her ist der Code nicht schlüssig. Schau ihn dir doch noch mal mit anständiger Formatierung (Einrückungen) an und überlege vor allem wo Bereiche beginnen und enden...

Nutze die Möglichkeit, den Komponenten eigenene Namen zu geben. "Button7" wird dir nichts mehr sagen, wenn du ihn mal 1 Monat nicht mehr gesehen hast.

pstruh 24. Sep 2007 13:18

Re: Mouseover bei Object Bevel / Cursor ausblenden
 
Durch Click auf das Bevel den Cursor ein-/ausschalten? Das ist ja beim Wiedereinschalten des BevelCursors dann ein "Blindflug" - aber immerhin. Du könntest z.B. die FensterProzedur des Bevels benutzen; also "Bevel.WindowProc". Innerhalb der Prozedur reagierst du z.B. auf WM_LButtonUp und schaltest den Cursor an/aus.
Gruß

taktaky 24. Sep 2007 13:39

Re: Mouseover bei Object Bevel / Cursor ausblenden
 
Zitat:

Zitat von Alien426
Oh weh. Und diesen Code lässt Delphi durchgehen? Keine Warnungen?

Ja, ohne Error und ohne Wahrnung. Es funktioniert.

Aber wie gesagt, ich möchte dies durch einen Klick auf Bevel1 selbst durchführen und nicht einen Klick auf ein Button


------------

taktaky 24. Sep 2007 13:41

Re: Mouseover bei Object Bevel / Cursor ausblenden
 
Zitat:

Zitat von pstruh
Durch Click auf das Bevel den Cursor ein-/ausschalten? Das ist ja beim Wiedereinschalten des BevelCursors dann ein "Blindflug" - aber immerhin. Du könntest z.B. die FensterProzedur des Bevels benutzen; also "Bevel.WindowProc". Innerhalb der Prozedur reagierst du z.B. auf WM_LButtonUp und schaltest den Cursor an/aus.
Gruß

Nicht ganz kappiert


_________

taktaky 24. Sep 2007 15:29

Re: Mouseover bei Object Bevel / Cursor ausblenden
 
Nun habe ich ein anderes Problem,

auf mein Form liegt eine fremde Anwendung. Der Cursor wird nicht ausgeblendet !
screen.Cursor:=crNone hilft nicht!

Wie kann man den Cursor ausbleden, wenn er auf die fremde Anwendung bewegt?

Die fremde Anwendung befindet sich auf Panel1.




______________

pstruh 24. Sep 2007 15:30

Re: Mouseover bei Object Bevel / Cursor ausblenden
 
Hallo taktaki,
dann wollen wir mal versuchen es zu erklären (bin da leider keine Experte):

Jedes (?) fensterbasierte Control hat eine Schnittstelle, die die von Windows an das Control gesendeten Botschaften entgegennimmt und verteilt. Wenn man sich in diese Prozedur "einklinkt", kann man auf diese Botschaften reagieren, noch bevor das Control darauf reagieren kann und dadurch das Verhalten des Controls beeinflussen. Zitat der Hilfe: "Mit Hilfe von WindowProc können Sie die Fensterprozedur des Steuerelements vorübergehend ersetzen oder unterklassifizieren". Weitere Infos findest du in der Windows-Hilfe zu "WindowProc".

Folgende Schritte sind notwendig:

1. Deklaration der Zeigervariablen für die Originaladresse (lokal im Implementationsteil deiner Unit), z.B.
Delphi-Quellcode:
var BevelOrgWinProc : TWndMethod;
2. "Einklinken" deiner eigenen Fensterprozedur (im OnCreate deines Formulars), z.B.
Delphi-Quellcode:
BevelOrgWinProc :=Bevel.WindowProc; // Originaladresse merken
Bevel.WindowProc:=myBevelWinProc;  // deine eigene Fensterprozedur "einklinken"
3. Deklaration deiner eigenen Fensterprozedur (im private-Abschnitt deiner Unit), z.B.
Delphi-Quellcode:
procedure TForm1.myBevelWinProc(var Msg:TMessage);

   procedure ToggleCursor;
   begin
     if Bevel.Cursor=crDefault then Bevel.Cursor:=crNone
                               else Bevel.Cursor:=crDefault;
   end;
   
begin
  if Msg.Msg=WM_LButtonUp then ToggleCursor         // Reaktion von LeftButtonUp
                                                     // soll verändert werden
                                                       
                          else BevelOrgWinProc(Msg); // sonst Original aufrufen
end;
Das sollte eigentlich den gewünschten Effekt haben...
Gruß

PS: und bitte >> kapieren mit EINEM k

DeddyH 24. Sep 2007 15:39

Re: Mouseover bei Object Bevel / Cursor ausblenden
 
Zitat:

Zitat von pstruh
PS: und bitte >> kapieren mit EINEM k

Und einem p :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:36 Uhr.
Seite 1 von 3  1 23      

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