AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Bereich beim Mouseover hervorheben

Offene Frage von "Keks"
Ein Thema von Keks · begonnen am 9. Mai 2008 · letzter Beitrag vom 10. Mai 2008
Antwort Antwort
Seite 1 von 2  1 2      
Keks

Registriert seit: 25. Mai 2005
122 Beiträge
 
#1

Bereich beim Mouseover hervorheben

  Alt 9. Mai 2008, 15:39
Hallo zusammen,

ich würde gerne einige Komponenten bei einem Mouseover optisch gruppieren / highlighten. Es gibt dafür sicherlich viele verschiedene Lösungen, aber bevor ich alle selbst ausprobieren muss, würde ich gerne eine Meinung von jemandem hören, der sich hier auskennt.

So sollte das dann funktionieren:
- Sobald der Mauszeiger über einem festgelegten Bereich liegt, soll sich dieser einfärben.
- Beim Verlassen des Bereiches wird dieser wieder transparent
- Es gibt mehrere solcher Bereiche, die ich gerne codeseitig mit x-y-Koordinaten festlegen würde.
- Die darüberliegenden Komponenten sollten durchscheinen, also nicht wie im Mockup beim Label noch einen anderen Hintergrund zeigen.
- Das ganze muss sowohl unter Win2000 als auch WinXP funktionieren, auf Transparenzmöglichkeiten des XP-Manifests kann man sich also nicht verlassen.
- Es sollte zudem flüssig und resourcensparend funktionieren, also weder Flakern noch den Computer auslasten.

http://img120.imageshack.us/img120/7...ghlightts9.gif

Was wäre die beste Lösung dafür?
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Bereich beim Mouseover hervorheben

  Alt 9. Mai 2008, 15:43
Entweder legst du da in Panel hin und die Komponenten rein (und dann im Panel mouseover etc.) oder du machst es manuell mit CreateWindowRgn und IsPtInRegion etc.

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: Bereich beim Mouseover hervorheben

  Alt 9. Mai 2008, 16:10
Oder Du verwendest Komponenten, die das "Hot-Tracking" beherrschen.
z.B. die von DevExpress oder bei torry.net suchen.
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
Keks

Registriert seit: 25. Mai 2005
122 Beiträge
 
#4

Re: Bereich beim Mouseover hervorheben

  Alt 9. Mai 2008, 16:18
@mirage228
Beim Panel werden die OnMouseEnter und OnMouseLeave Funktionen leider nur aktiv, wenn direkt auf das Panel gezeigt wird. Zeige ich auf ein Editfeld darin, dann zählt das wie ein Verlassen des Panels. Außerdem würde ich gerne darauf verzichten, noch weiter in Panels zu schachteln.

CreateWindowRgn klingt interessant, ich finde dazu aber leider keine brauchbaren Informationen. Kannst Du hier etwas weiterhelfen?

@RavenIV
Falls möglich, würde ich gerne auf Fremdkomponenten verzichten. Das sollte doch auch mit einfachereren Mitteln machbar sein!?


Eine Art Zeichenbereich hinter den eigentlichen Elementen, der dann auf die Mausposition reagiert, wäre gut...
  Mit Zitat antworten Zitat
The_Doomed

Registriert seit: 5. Dez 2007
101 Beiträge
 
#5

Re: Bereich beim Mouseover hervorheben

  Alt 9. Mai 2008, 16:48
ich würde es auch über panel machen und dann halt auch beim mouse.enter des edits die panelfarbe ändern
außerdem ist es keine viel größere schachtelung als wenn du zeichenbereiche dahinterlegts oder??
Zeit totschlagen entehrt den Menschen, schaffen in ihr was bleibt,
erst das heißt gelebt haben wie ein Mensch.
Hans Joachim Ploß

MFG The_Doomed
  Mit Zitat antworten Zitat
Keks

Registriert seit: 25. Mai 2005
122 Beiträge
 
#6

Re: Bereich beim Mouseover hervorheben

  Alt 9. Mai 2008, 17:50
Zitat von The_Doomed:
ich würde es auch über panel machen und dann halt auch beim mouse.enter des edits die panelfarbe ändern
Dann sag mir bitte, was gegen die angesprochene Tatsache zu machen ist, dass beim Zeigen auf ein Element innerhalb des Panels bereits das OnMouseLeave-Event des Panels ausgelöst wird und der Hintergrund nicht mehr farbig ist!?

Zitat von The_Doomed:
außerdem ist es keine viel größere schachtelung als wenn du zeichenbereiche dahinterlegts oder??
Bei einer Zeichenfläche lege ich diese ein Mal hinter die Elemente oder erstelle das noch besser dynamisch und färbe hier nur bestimmte Bereiche ein. Bei den Panels muss ich das ja schon von vornherein schachteln, brauche pro Gruppe ein Panel und bin damit absolut unflexibel.


Ich dachte eigentlich, dass der eine oder andere schon so etwas in der Art gemacht haben könnete!? So abgehoben ist die Idee ja nun auch nicht...
  Mit Zitat antworten Zitat
grenzgaenger
(Gast)

n/a Beiträge
 
#7

Re: Bereich beim Mouseover hervorheben

  Alt 9. Mai 2008, 18:18
wie wäre es, die koordinaten in eine liste zu stellen und dann die maus zu überwachen und beim drüberfahren entsprechend die aktionen durchzuführen....

hier könntest dann mit findcomponent und der tag eigenschaft releativ komfortable mehere komponenten anpassen.
  Mit Zitat antworten Zitat
Benutzerbild von Fussball-Robby
Fussball-Robby

Registriert seit: 22. Okt 2007
Ort: Nähe Köln
1.063 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Bereich beim Mouseover hervorheben

  Alt 9. Mai 2008, 19:28
Ich hab mal ein kleines Beispielprojekt gemacht. So würde ich das lösen. Hebt zwar bisher nur den Bereich um 1 Control hervor, das solltest du aber leicht ändern können. Achte auf die Kommentare
Angehängte Dateien
Dateityp: rar highlight_308.rar (162,8 KB, 26x aufgerufen)
Robert L.
Der folgende Satz ist richtig!
Der vorherige Satz ist falsch!

Paradox
  Mit Zitat antworten Zitat
Keks

Registriert seit: 25. Mai 2005
122 Beiträge
 
#9

Re: Bereich beim Mouseover hervorheben

  Alt 9. Mai 2008, 21:24
@Fussball-Robby
Danke, sieht interessant aus. Aber ich glaube, das hilft in dem Fall nicht weiter. In Deinem Beispiel wird jede Komponente beim Draufzeigen umrandet. Das ist ganz nett, aber lässt sich schwer auf einen ganzen Bereich übertragen.

@grenzgaenger
Das klingt gut und könnte funktionieren.
Ich versuche gerade die Mauskoordinaten in der MainForm zuverlässig zu ermitteln.
Ich frage die aktuelle Zeigerposition im FormMouseMove-Event ab. Das Problem ist dann aber, dass sobald ich auf ein anderes Element (Button, Checkbox, ...) zeige, das FormMouseMove-Event nicht mehr aktiviert wird. Ich habe jetzt eine Weile gesucht, aber finde dafür keine geschickte Lösung. Wie frage ich die Mauskoordinaten im Hauptprogrammfenster ab, unabhängig davon, ob die Maus sich gerade über anderen Komponenten befindet oder nicht. (Mit einem Timer würde das gehen, aber deswegen jetzt noch dauerhafte Timer setzen würde ich gerne vermeiden.) Gibt es eine andere Möglichkeit?
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Bereich beim Mouseover hervorheben

  Alt 9. Mai 2008, 21:43
Du kannst doch allen Komponenten die gleiche MouseMove Prozedur zuweisen.
Edit: In der Prozedur kannst du dann auch sowas reinschreiben:
Delphi-Quellcode:
var
  Pt: TPoint;
begin
  Pt:= self.ClientToScreen(mouse.CursorPos);
 //Caption:= Format('X: %d, Y: %d', [Pt.X, Pt.Y]);

Oder du verwendest das Ereignis onMessage der Komponente TApplicationEvents.
Edit: Im Ereignis onMessage brauchst du natürlich nur die Nachricht WM_MOUSEMOVE verarbeiten!
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz