Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi verschiedene Hilfetexte auf einer PaintBox (https://www.delphipraxis.net/37123-verschiedene-hilfetexte-auf-einer-paintbox.html)

stoermi 31. Dez 2004 15:14


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!

Luckie 31. Dez 2004 15:29

Re: verschiedene Hilfetexte auf einer PaintBox
 
Was passiert denn, wenn du bei den Fragezeichen ShowHint wieder auf False setzt?

stoermi 31. Dez 2004 15:37

Re: verschiedene Hilfetexte auf einer PaintBox
 
Hallo Luckie!

Zitat:

Zitat von Luckie
Was passiert denn, wenn du bei den Fragezeichen ShowHint wieder auf False setzt?

Dann passiert nichts... überhaupt nichts... Dann werden überhaupt keine Hint's gezeigt!?!

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;

Luckie 31. Dez 2004 15:44

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:

stoermi 31. Dez 2004 16:09

Re: verschiedene Hilfetexte auf einer PaintBox
 
Zitat:

Zitat von Luckie
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.

Richtig, dass habe ich mir so vorgestellt!

Zitat:

Zitat von Luckie
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:

Die Umsetzung ist grad das Problem!
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...

stoermi 31. Dez 2004 16:22

Re: verschiedene Hilfetexte auf einer PaintBox
 
Also, hier die Lösung dafür, dass ausserhalb der Objekte nichts angezeigt wird...

Delphi-Quellcode:
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;
Ich habe einen Merker eingeführt, der am Anfang des Ereignisses auf false gestellt wird.
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 15:18 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