AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Listbox mit Untermenüverhalten?

Ein Thema von Mattze · begonnen am 21. Jan 2007 · letzter Beitrag vom 22. Jan 2007
Antwort Antwort
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#1

Listbox mit Untermenüverhalten?

  Alt 21. Jan 2007, 11:10
Hallo,

ich suche eine Art Listboxkomponente, die sich aber wie ein Untermenü verhält.
Also Cursorsteuerung, Click, Enter und auch shortcuts (Alt+"unterstrichener Buchstabe") für die Listboxeinträge. (Evtl. auch das Überspringen bestimmter Einträge.)
Kennt jemand so was? Oder muss ich das selber basteln?

Gruß
Matthias
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Listbox mit Untermenüverhalten?

  Alt 21. Jan 2007, 14:37
Hallo Matthias,

die normale ListBox erfüllt eigentlich schon alle deine Anforderungen. Statt über einen beliebigen Hotkey wird ein Eintrag durch zügiges Eintippen seiner ersten Zeichen lokalisiert. HotKeys wie im MenuItem fände ich eher irritierend, aber auch das ist über OnKeyPress() in Verbindung mit OnDrawItem() leicht machbar.

Grüße vom marabu
  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#3

Re: Listbox mit Untermenüverhalten?

  Alt 21. Jan 2007, 15:44
Hallo,

hmm, ja, teilweise geht es so.
Das OwnerDraw habe ich gemacht.
Wie kriegt man ihn denn dazu, die ganze Zeile zu markieren und keinen Markierungsrahmen um die ganze Zeile zu zeichnen und nur den Text mit einem anderen Hintergrund zu markieren?

Und dann bleibt noch ein Problem mit dem Cursor- und Mausverhalten.
Beim Menü klickt man den Punkt nur einmal an und er wird abgearbeitet.
Mit den Pfeiltasten bewegt man sich im Menü und erst nach <Enter> wird der Punkt ausgeführt.
Zuerst dachte ich (natürlich) an ObClick der Listbox. Aber das wird auch bei den Pfeiltasten ausgelöst - jedenfalls bei mir.
So geht es also nicht.
Schön wäre es aber!
Was tun?

Gruß
Matthias
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Listbox mit Untermenüverhalten?

  Alt 21. Jan 2007, 18:14
Hallo,

den Hintergrund einer Zeile musst du mit FillRect() malen - schau mal hier: klick

Falls deine Zeilen unterschiedliche Höhen brauchen, dann findest du hier ein Beispiel: klick

Allgemein: MenuItems gehören zur Kategorie der Action-Controls, eine ListBox ist ein Data-Control. Natürlich lässt sich Code an den Wechsel des selektierten Items in der ListBox koppeln, aber wenn es dir mehr um die Auslösung einer Aktion geht, dann nimm besser ein Action-Control dazu: TMenuItem, TButton, ... alles woran du eine TAction knüpfen kannst.

Freundliche Grüße
  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#5

Re: Listbox mit Untermenüverhalten?

  Alt 22. Jan 2007, 06:49
Hallo,

vielen, vielen Dank!
Ich hatte das gestern Abend noch hinbekommen.
Das ist soein "interner Fehler" von mir. Ich denke immer, auch bei OwnerDraw malt der ales, was man nicht selber macht. Ein echter Irrtum! Da muss man ja wirklich alles selber machen.

Auch das mit dem OnClick habe ich hinbekommen. Ich teste im On Click einfach mit GetAsyncKeyState auf die Tasten ab.
Stellen sich natürlich auch wieder 2 Fragen:
1. Ist das nun Bug oder Feature, dass OnClick auf Tasten reagiert?
2. Kann man prinzipiell (nicht nur OnClick und spezielle Tasten) überprüfen, ob das Ereignis von der Tastatur oder der Maus ausgelöst wurde? (Es ist ziemlich mühsam, bei Bedarf alle Tasten neinzeln auszuschließen und dürfte auch ei Zeitproblem bei 50 Tasten werden!)

Und, weil ich gerade dabei bin, noch 2 Fragen:
3. Welchen Font nimmt eigentlich ein Untermenü? Wenn man den Font vom Formular ändert, dann ändert sich die Schrift im horizontalen Hauptmenü. In den aufklappenden Untermenüs bleibt sie aber.
4. Wie kann man den Font in den Untermenüs ändern? (Will ich gar nicht, ist blosses Interesse, ob das geht.)


Aber das hat schon nichts mehr mit der Listbox speziell zu tun. Mal sehen... Ich suche...

Gruß
Matthias
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: Listbox mit Untermenüverhalten?

  Alt 22. Jan 2007, 08:17
Guten Morgen Matthias,

Zitat von Mattze:
... Ist das nun Bug oder Feature, dass OnClick auf Tasten reagiert? ...
das ist definitiv ein Feature - siehe Online-Help unter TControl.OnClick().

Zitat von Mattze:
... Kann man prinzipiell (nicht nur OnClick und spezielle Tasten) überprüfen, ob das Ereignis von der Tastatur oder der Maus ausgelöst wurde? ...
Du könntest folgendes machen:

Delphi-Quellcode:
type
  TDemoForm = class(TForm)
    // ...
  private
    MouseIsDown: Boolean;
    ListBoxKey: Char;
  end;

procedure TDemoForm.ListBoxMouseUpDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  MouseIsDown := not MouseIsDown;
end;

procedure TDemoForm.ListBoxKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  ListBoxKey := #0;
end;

procedure TDemoForm.ListBoxKeyPress(Sender: TObject; var Key: Char);
begin
  ListBoxKey := Key;
  Key := #0; // roll your own hotkey
end;

procedure TDemoForm.ListBoxClick(Sender: TObject);
begin
  if not MouseIsDown then
    case ListBoxKey of
      // ...
    end
  else ShowMessage('mouse click');
  ListBoxKey := #0;
end;
Deine beiden anderen Fragen kann man zusammenfassen:

Zitat von Mattze:
... Welchen Font nimmt eigentlich ein Untermenü? ...
Dieser Font ist eine systemweite Einstellung. Du erreichst sie z.B. über die Eigenschaften im Kontextmenü des Desktops. Wenn du unter Erweiterte Darstellung das Element Menü auswählst, dann kannst du die Höhe der Menüleiste und die verwendete Schrift samt Größe festlegen.

Zitat von Mattze:
... Wenn man den Font vom Formular ändert, dann ändert sich die Schrift im horizontalen Hauptmenü. In den aufklappenden Untermenüs bleibt sie aber. ...
Nicht wenn du mit dem Systemmenü (TMainMenu) arbeitest.

Freundliche Grüße
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:45 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