Announcement

Collapse
No announcement yet.

THeaderControl - Hint der Buttons ??

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • THeaderControl - Hint der Buttons ??

    Hallo,

    ich habe folgendes Problem. In einem Programm versuche ich einen Hint für die Buttons eines HeaderControls zu relisieren.
    Die versuche scheiterten, da ich nicht den Index auslesen kann, über dem sich der Mauszeiger befindet.

    hier ein wenig Code:

    <pre>

    //Anfang
    procedure TForm1.HeaderControl_NavigationMouseMove(Sender: TObject;
    Shift: TShiftState; X, Y: Integer);
    var
    Maus_Pos : TPoint ;
    Han : THandle ;
    begin
    //Hint bestimmen

    {1.Möglichkeit}
    if THeaderControl(THeaderSection(Sender)).Sections.It ems[0].Index = 0 then
    THeaderControl(Sender).Hint := 'Ersten Eintrag anzeigen' ;
    if THeaderControl(THeaderSection(Sender)).Sections.It ems[1].Index = 1 then
    THeaderControl(Sender).Hint := 'Einen Eintrag zurück' ;
    //[..]

    GetCursorPos (Maus_Pos) ;

    {2.Möglichkeit :}
    Han := WindowFromPoint (Maus_Pos) ;
    Caption := IntToStr(han) ;
    //für mich
    Han := FindWindowEx(THeaderControl(Sender).Handle, 0, 'TCollection', nil);
    Caption := Caption + '.' + IntToStr(han) ;
    //wieder für mich

    Application.ActivateHint(Maus_Pos);
    end;

    //Ende
    </pre>

    Bei der ersten Möglichkeit versuchte ich über den Index an den Button zu kommen.
    Bei der 2. Möglichkeit über das Handle des Buttons.
    Da es aber Panels sind, diese aber nicht als Klasse (TPanel) auftauchen, bekomme ich kein Handle zurück.

    Hat jemand vielleicht eine Lösung, ich möchte nicht auf eine Fremdkomponente zurückgreifen, da dies bei Codeweitergabe immer nachteilig ist.

    Mit frdl. Grüßen
    Mathias

  • #2
    Hallo,

    man könnte folgendes machen: <br>
    1. THeaderControl-Ereignis <b>OnMouseMove</b> auswerten <br>
    2. Dort Mauszeigerposition <b>X</b> mit der Section-Breite vergleichen

    <pre>
    procedure TForm1.HeaderControl1MouseMove(Sender: TObject;
    Shift: TShiftState; X, Y: Integer);
    begin
    with HeaderControl1 do
    begin
    if X < Sections[0].Width then
    Hint := 'Feld A';
    if (X > Sections[0].Width) and
    (X < Sections[0].Width + Sections[1].Width) then
    Hint := 'Feld B';
    if (X > Sections[0].Width + Sections[1].Width) and
    (X < Sections[0].Width + Sections[1].Width + Sections[2].Width) then
    Hint := 'Feld C';
    end;
    end;
    </pre&gt

    Comment


    • #3
      Hallo Herr Kosch,

      vielen Dank für die Hilfe.
      Ich habe es ein wenig umgemodelt, so daß es nun etwas einfacher vom Syntax ist:

      <p><pre>
      procedure TForm1.HeaderControl1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
      var
      Maus_Pos : TPoint ;
      a : Integer;
      begin
      for a:=0 to THeaderControl(Sender).Sections.Count -1 do
      if X >THeaderControl(Sender).Sections[a].Left then
      THeaderControl(Sender).Hint := Head_C [a] ;
      GetCursorPos (Maus_Pos) ;
      Application.ActivateHint(Maus_Pos);
      end;
      </pre></p>

      Somit geht es schneller zu Programmieren.
      Head_C ist ein String-Array.

      Vielen Dank + frdl. Grüße aus Erfurt
      Mathias Fieg

      Comment

      Working...
      X