Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi ComboBox Hint onItem? (https://www.delphipraxis.net/209549-combobox-hint-onitem.html)

kagi3624 20. Dez 2021 10:37

Delphi-Version: 6

ComboBox Hint onItem?
 
Hallo, ich möchte gerne ein Hint bei jedem Item der Combobox (csDropDownList) anzeigen lassen.
So wie ich es verstanden habe, soll es recht kompliziert sein und ich habe kein Beispielcode gefunden bis auf die Anleitung hier, welche ich allerdings nicht so wirklich verstehe. Hat das schon mal jemand gemacht und kann paar Tips geben?

Danke!

Klaus01 20. Dez 2021 12:22

AW: ComboBox Hint onItem?
 
.. möchtest Du den Hint sehen, wenn die Liste aufgeklappt ist und ein Iten ge-high-lighted wird-
oder wenn ein Item ausgewählt wurde und die Liste ist wieder zugeklappt?

Für das letztere (wie schon imSO Artikelt erwähnt)

Delphi-Quellcode:
procedure TForm1.ComboBox1Select(Sender: TObject);
begin
  case (sender as TComboBox).ItemIndex of
    0: (sender as TComboBox).Hint := 'null';
    1: (sender as TComboBox).Hint := 'eins';
    2: (sender as TComboBox).Hint := 'zwei';
    3: (sender as TComboBox).Hint := 'drei';
    4: (sender as TComboBox).Hint := 'vier';
  end;
end;
Hier wird der HintText anhand des Indexes des ausgewählten Items gesetzt.

Grüße
Klaus

kagi3624 20. Dez 2021 14:40

AW: ComboBox Hint onItem?
 
Ja eigentlich das schwierige: Beim Aufklappen der ComboBox mit der Maus über die Items gehen (also nicht auswählen).

HolgerX 20. Dez 2021 17:46

AW: ComboBox Hint onItem?
 
Hmm..

Kannst Dir ja das hier mal anschauen:

https://www.delphipraxis.net/197458-...mousemove.html

himitsu 20. Dez 2021 19:17

AW: ComboBox Hint onItem?
 
Und wenn du ans MouseMove über dem DropDown ran kommst, dann kannst den Hint auch selber anzeigen.

kagi3624 21. Dez 2021 11:40

AW: ComboBox Hint onItem?
 
Zitat:

Zitat von himitsu (Beitrag 1499420)
Und wenn du ans MouseMove über dem DropDown ran kommst, dann kannst den Hint auch selber anzeigen.

Bei Stackoverflow steht, dass man das nicht einfach so machen kann und THintWindow benutzen soll. Aber meine Versuche dazu sind kläglich gescheitert. Hints werden trotzdem nicht angezeigt.

HolgerX 22. Dez 2021 07:52

AW: ComboBox Hint onItem?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hmm..

Mit den Beispielen aus meinem vorherigen Link + Google, ein Beispiel!

kagi3624 22. Dez 2021 08:07

AW: ComboBox Hint onItem?
 
@Holger, vielen Dank!

Code:
FHintWnd.ActivateHint(Rect(pt.X+10,pt.Y,pt.X+100,pt.Y+20),tmpHint);
war das Problem, ich dachte man macht es mit ShowHint

:wall:

BerndS 22. Dez 2021 09:11

AW: ComboBox Hint onItem?
 
Basierend auf dem Beispiel von Holger könnte man auch die Komponente erweitern.
Delphi-Quellcode:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type

  TComboBox = class(Vcl.StdCtrls.TComboBox)
  private
    FcbHintIndex: Integer;
    FHintWindow: THintWindow;
  protected
    procedure Change; override;
    procedure DropDown; override;
    procedure CloseUp; override;
    procedure InitiateAction; override;
  end;

  TForm1 = class(TForm)
    cb: TComboBox;
    procedure cbChange(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
  protected
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.cbChange(Sender: TObject);
var
  P: TPoint;
begin
  case (Sender as TComboBox).ItemIndex of
    0:
      (Sender as TComboBox).Hint := 'null';
    1:
      (Sender as TComboBox).Hint := 'eins';
    2:
      (Sender as TComboBox).Hint := 'zwei';
    3:
      (Sender as TComboBox).Hint := 'drei';
    4:
      (Sender as TComboBox).Hint := 'vier';
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  I: Integer;
begin
  for I := 0 to 4 do
    cb.Items.Add(I.ToString);
end;

{ TComboBox }

procedure TComboBox.Change;
var
  P: TPoint;
begin
  inherited;
  if (Hint <> '') and DroppedDown and GetCursorPos(P) then
    FHintWindow.ActivateHint(Rect(P.X + 10, P.Y + 20, P.X + 100, P.Y + 40), Hint);
end;

procedure TComboBox.CloseUp;
begin
  inherited;
  FHintWindow.Hide;
  ControlStyle := ControlStyle - [csActionClient];
end;

procedure TComboBox.DropDown;
begin
  inherited;
  if not Assigned(FHintWindow) then
    FHintWindow := THintWindow.Create(Self);
  FcbHintIndex := -1;
  ControlStyle := ControlStyle + [csActionClient];
end;

procedure TComboBox.InitiateAction;
var
  Idx: Integer;
begin
  inherited;
  Idx := ItemIndex;
  if Idx <> FcbHintIndex then
  begin
    FcbHintIndex := ItemIndex;
    Change;
  end;
end;

end.
Code:
object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 220
  ClientWidth = 471
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -12
  Font.Name = 'Segoe UI'
  Font.Style = []
  ShowHint = True
  OnCreate = FormCreate
  PixelsPerInch = 96
  TextHeight = 15
  object cb: TComboBox
    Left = 32
    Top = 24
    Width = 145
    Height = 23
    Style = csDropDownList
    ParentShowHint = False
    ShowHint = True
    TabOrder = 0
    OnChange = cbChange
  end
end
Besser wäre natürlich eine neue abzuleiten und in Delphi zu registrieren.

kagi3624 23. Dez 2021 14:07

AW: ComboBox Hint onItem?
 
Hallo, kann man bei dem THintWindow irgendwie eine Verzögerung bevor der Hint angezeigt wird realisieren? Ein einfaches sleep ganz am Anfang der OnIdle Funktion tut es zwar gut, aber nur solange ich nur diese combobox habe und die Funktion bei anderen Fenstern nicht durchgelaufen wird.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:58 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