Delphi-PRAXiS
Seite 1 von 2  1 2      

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 Bei OnMouseOver Hilfe zu Eintrag in TChecklistBox anzeigen? (https://www.delphipraxis.net/84981-bei-onmouseover-hilfe-zu-eintrag-tchecklistbox-anzeigen.html)

winx 24. Jan 2007 09:24


Bei OnMouseOver Hilfe zu Eintrag in TChecklistBox anzeigen?
 
Hallo,

ich habe in meinem Forumlar eine TCheckListbox mit Einträgen.

Ist es mir möglich ein onMouseOver Event einzubauen, dass mir, immer wenn ich die Maus über einen Eintrag
in der Listbox bewege, ein kleines Popup mit einer für diesen Eintrag spezifischen Hilfe anzeigt?

Und: wie füge ich an die TChecklistbox ein event onmouseover hinzu: Ich Muß ich ne neue Komponente erstellen, mich von checklistbox ableiten und irgendwie das event zufügen, oder???
nur: wie mach ich das?

Danke,
winx

Pfoto 24. Jan 2007 09:41

Re: Bei OnMouseOver Hilfe zu Eintrag in TChecklistBox anzeig
 
Hi!

ich würde es so machen:

Jedem Item vorher mit AddObjekt einen Pointer auf ein Objekt
mitgeben, das Infos über das jeweilige Item speichert.
Delphi-Quellcode:
  TItemInfo = class
  private
   fInfoPicture: TBitmap;
  [ ...usw.. ]
  public
    property InfoString: string;
    property InfoPicture: TBitmap read fInfoPicture;
  end;
im OnMouseMove-Event dann:

Delphi-Quellcode:
Index := ListBox1.ItemAtPos(Point(X, Y), true);
Das Item unter der Maus herausbekommen.

Nun das drangehängte Objekte des Item aufrufen und die
Infos dazu auslesen.
Delphi-Quellcode:
with TItemInfo(ListBox1.Items.Objects[Index]) do
begin
  ItemInfoString:= InfoString;
  [...]
end;


Gruß
Pfoto

winx 24. Jan 2007 09:44

Re: Bei OnMouseOver Hilfe zu Eintrag in TChecklistBox anzeig
 
Das ist ne gute Idee :-)

jetzt bräucht ich nur noch nen Tip, wie ich das Problem mit dem Control
überschreiben mache, damit ich bei der ComboBoxListBox das
mouseOverEvent bekomme?


Hat da jemand nen Tip?

Thx,
winx

winx 24. Jan 2007 09:52

Re: Bei OnMouseOver Hilfe zu Eintrag in TChecklistBox anzeig
 
He,

das brauch ich ja gar nicht :-)

Mit deinem MouseOve klappt es !!!

Jetzt nur noch ne letzte Frage:

Kann ich irgendwie so ne schöne, gelbe Hilfe (als Popup) beim MouseMove einbleden,
wenn er über dem Objekt ist???

Danke,
winx

sirius 24. Jan 2007 09:59

Re: Bei OnMouseOver Hilfe zu Eintrag in TChecklistBox anzeig
 
Delphi-Quellcode:
Tchecklistbox.showhint:=true;
TChecklistbox.hint:='Das wird angezeigt'

winx 24. Jan 2007 10:04

Re: Bei OnMouseOver Hilfe zu Eintrag in TChecklistBox anzeig
 
dass problem ist, das der hint spezifisch für die ganze box ist und nich fürs item...
also kommt der hint auch, wenn ich nur auf die combolistbos fahre, irgendwo hin...
kann man das auch fürs item machen?

sirius 24. Jan 2007 10:31

Re: Bei OnMouseOver Hilfe zu Eintrag in TChecklistBox anzeig
 
Na du überprüfst doch bei onMouseMove, wo sich die Maus befindet. Und je nachdem, wo die Maus ist, sezt du das Hintfenster neu, oder lässt es halt gar nicht anzeigen.

winx 24. Jan 2007 10:39

Re: Bei OnMouseOver Hilfe zu Eintrag in TChecklistBox anzeig
 
So hab ichs jetzt auch, aber irgendwie klappt des noch nich so richtig:

Delphi-Quellcode:
procedure Tmainform.objectlistMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var index : integer;
    val : string;
begin

  index := objectlist.ItemAtPos(Point(x,y),true);

  if (index > -1) then begin

    objectlist.ShowHint := true;
    try
      if (objectlist.Items[objectlist.ItemIndex] = objectlist.Items[objectlist.ItemAtPos(Point(X, Y), True)]) then
        objectlist.Hint := objectlist.Items[index]
      else
        objectList.ShowHint := false;

    finally
      objectlist.ShowHint := false;
    end;

  end;

end;
jetzt zeigt sich NIX mehr an :-(
wo liegt denn da der Fehler???

Pfoto 24. Jan 2007 11:45

Re: Bei OnMouseOver Hilfe zu Eintrag in TChecklistBox anzeig
 
Hallo nochmal,

also hier ist mein Code, eben getestet:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TItemData = class
  private
    fInfoString: string;
  public
    property InfoString: string read fInfoString;
    constructor Create(aInfoString: string);
  end;

  TForm1 = class(TForm)
    ListBox1: TListBox;
    Button1: TButton;
    lblItemData: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure ListBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
  private
    { Private-Deklarationen } 
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}


procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
begin
  { Einfach mal ein paar sinnlose Einträge einfügen }
  for i:= 0 to 10 do
    ListBox1.Items.AddObject('Eintrag Nr. ' + inttostr(i), TItemData.Create('Daten zu Eintrag Nr. ' + inttostr(i)));
end;

{ TItemData }

constructor TItemData.Create(aInfoString: string);
begin
  inherited Create;
  fInfoString:= aInfoString;
end;

procedure TForm1.ListBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  Index: integer;
begin
  with TListbox(Sender) do
  begin
    Index:= ItemAtPos(Point(x,y), true);
    ShowHint:= Index <> -1;
    If (Index <> -1) then
      Hint:= TItemData(Items.Objects[Index]).InfoString;
  end;
end;

end.

Natürlich könnte man das Ganze noch etwas perfektionieren, indem z.B.
der Hint schneller oder länger angezeigt wird.
Das kann man ja dann nach Wunsch einstellen.

Gruß

Pfoto

winx 24. Jan 2007 12:22

Re: Bei OnMouseOver Hilfe zu Eintrag in TChecklistBox anzeig
 
Hallo Pfoto,

swoeit war ich doch auch schon ,allerdings zeigts dann immer, wenn ich auf die Control gehe die Infobox an,
ich möchte aber nur wenn man über ein Objekt geht.

Und dann hab ichs mir so gedacht:

Delphi-Quellcode:
procedure Tmainform.objectlistMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var index : integer;
    val : string;
begin

  index := objectlist.ItemAtPos(Point(x,y),true);

  if (index > -1) then begin

    objectlist.ShowHint := true;
    try
      if (objectlist.Items[objectlist.ItemIndex] = objectlist.Items[objectlist.ItemAtPos(Point(X, Y), True)]) then
        objectlist.Hint := objectlist.Items[index]
      else
        objectList.ShowHint := false;

    finally
      objectlist.ShowHint := false;
    end;

  end;

end;
aber klappt eben nich...bin mir nur nich im klaren, wieso?


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:47 Uhr.
Seite 1 von 2  1 2      

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