![]() |
verschiedene Hilfetexte auf einer PaintBox
Hallo!
Ich habe eine PaintBox mit verschiedenen gezeichneten Objekten drauf. Nun möchte ich, wenn der Benutzer mit der Maus auf ein solches Objekt zeigt, dass ein Hilfetext (gelbes Schildchen) mit einer Beschreibung angezeigt wird. Das funktioniert auch mit meinem Code. Das erste Problem besteht darin, dass, wenn ich die Maus wieder bewege, und ich sie dann auf eine freie Fläche bewege, wieder der selbe Text dargestellt wird. Dort soll aber nix kommen, da da ja kein Objekt ist. Da sind wir gleich beim zweiten Problem: Ich verwende das Ereignis OnMouseMove der PaintBox. Solange ich mich mit der Muas auf der PaintBox befinde, wird nur ein Hilfe Text dargestellt. Ich möchte aber, dass er beim wandern über die Objekte jeweils einen neuen anderen Hilfetext darstellt. Vielleicht könnt ihr mir helfen... Hier mein bisheriger Code:
Delphi-Quellcode:
procedure PaintBox1MouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer); var mausPos: TPoint; zma, i: Integer; begin mausPos.X := x-hRand; //Mausposition mausPos.Y := y-vRand; zma := length(zimmerObj); //anzahl der zu durchlaufenden Objekte for i := 0 to zma-1 do begin if zimmerObj[i].clicked(mausPos) = true then //gibt true zurück wenn mausPos in zimmerObj begin PaintBox1.Hint := 'Zimmer ' + zimmerObj[i].zimNum + ': wieder frei am ' + FormatDateTime('dd.mm.yyyy', zimmerObj[i].buchung.abreise); PaintBox1.ShowHint := true; end else begin //?????? //in diesem Fall soll nix angezeigt werden end; end; end; edit: Schreibfehler korrigiert! |
Re: verschiedene Hilfetexte auf einer PaintBox
Was passiert denn, wenn du bei den Fragezeichen ShowHint wieder auf False setzt?
|
Re: verschiedene Hilfetexte auf einer PaintBox
Hallo Luckie!
Zitat:
Was mir noch aufgefallen ist... Wenn ich mir einen Hilfe-Text hab anzeigen lassen, dann auf ein anderes Objekt gehe - es passiert dann ja nichts - dann von der PaintBox runter gehe und dann wieder drauf, aber in einen freien Bereich - wird mit die Information zum zweiten Objekt angezeigt. Das heißt, der Hilfe-Text Hint wird beim Bewegen auf ein anderes Objekt geändert, nur nicht angezeigt... Ich habs jetzt schon so versucht, bring aber nichts...
Delphi-Quellcode:
PaintBox1.ShowHint := false;
PaintBox1.Hint := 'Zimmer ' + zimmerObj[i].zimNum + ': wieder frei am ' + FormatDateTime('dd.mm.yyyy', zimmerObj[i].buchung.abreise); PaintBox1.ShowHint := true; |
Re: verschiedene Hilfetexte auf einer PaintBox
also Prinzip ist ja folgendes: Du musst dir ja deine Objekte merken und zwar mit ihrer Position und ihrem Ausmaßen. Im OnMouseMove der Paintbox musst du dann allle Objekte durchgehen und gucken, ob sich die Maus in einem Objekt befindet und entsprechend den Hilfetext anzeigen oder eben nicht, wenn sich die Maus über keinem Objekt befindet. So viel zum Prinzip. In Code umsetzten habe ich jetzt allerdings keine Lust, ich muss mein Auto erstmal wieder flott bekommen, da habe ich vorhin vergessen das Licht auszuschalten. :roll:
|
Re: verschiedene Hilfetexte auf einer PaintBox
Zitat:
Zitat:
Ich denk, dass das Problem einfach darin liegt, dass der Hilfetext nur einmal angezeigt wird. Aber selbst mit einem Timer wird es schwer zurealiesieren sein... |
Re: verschiedene Hilfetexte auf einer PaintBox
Also, hier die Lösung dafür, dass ausserhalb der Objekte nichts angezeigt wird...
Delphi-Quellcode:
Ich habe einen Merker eingeführt, der am Anfang des Ereignisses auf false gestellt wird.
procedure THotelForm.PaintBox1MouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer); var mausPos: TPoint; zma, i: Integer; merker: Boolean; begin mausPos.X := x-hRand; mausPos.Y := y-vRand; zma := length(zimmerObj); merker:= false; for i := 0 to zma-1 do begin if zimmerObj[i].clicked(mausPos) = true then begin PaintBox1.ShowHint := false; PaintBox1.Hint := 'Zimmer ' + zimmerObj[i].zimNum + ': wieder frei am ' + FormatDateTime('dd.mm.yyyy', zimmerObj[i].buchung.abreise); PaintBox1.ShowHint := true; merker := true; end; end; if merker = false then begin PaintBox1.ShowHint := false; PaintBox1.Hint := ''; PaintBox1.ShowHint := true; end; end; Sobald ein Objekt mit clicked=true antwortet, wird dieser auch auf true gesetzt. Ein Objekt ist von der Maus erfasst. Sind alle Objekte durch laufen, und ist der Merker immer noch false, ist kein Objekt markiert und Hint wird auf null gesetzt. Mit else konnte es nicht gehen, weil dieses else innerhalb der for-Schleife stand. Da nach einem positiven Objekt kein Abbruch der Schleife stattfand, wurde immer noch einmal else ausgeführt... Also, mein Problem liegt immer noch darin, dass ich nicht hintereinander zweimal einen Hilfetext anzeigen lassen kann, ohne die Paintbox zwischen durch mit der Maus zuverlassen... Wer kann mir helfen??? Zur Not im neuen Jahr!!! Ich wünsche einen guten Rutsch!!! stoermi |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:43 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