AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi ListView, ListBox - Unterschiede bei Bild-Tasten
Thema durchsuchen
Ansicht
Themen-Optionen

ListView, ListBox - Unterschiede bei Bild-Tasten

Ein Thema von e-gon · begonnen am 26. Jan 2010 · letzter Beitrag vom 27. Jan 2010
 
e-gon

Registriert seit: 7. Jul 2003
Ort: Stuttgart
165 Beiträge
 
Delphi 6 Enterprise
 
#3

Re: ListView, ListBox - Unterschiede bei Bild-Tasten

  Alt 27. Jan 2010, 12:34
Ich habe das Problem jetzt mit der Brechstange gelöst. Zwar nicht so sauber, aber es funktioniert.

Falls es jemanden Interessiert:

Delphi-Quellcode:
procedure TForm1.ListView1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
const
  RowHeightDefault = 14;

  procedure SetListViewIndex(Sig: Integer);
  var RowHeightDefault,RowHeight,LVClientHeight,LVClientRowCount,NewIndex: Integer;
  begin
    if (Sender as TListView).ViewStyle=vsReport then begin
      if (Sender as TListView).Items.Count>0 then begin
        // Zeilenhöhe ermitteln
        // wenn ListView.CheckBoxes=True Standardzeilenhöhe=17
        if (Sender as TListView).Checkboxes then RowHeightDefault:= 17
        // sonst Standardzeilenhöhe=14
        else RowHeightDefault:= 14;

        // wenn eine ImageList verknüpft wurde
        if Assigned((Sender as TListView).SmallImages) then begin
          RowHeight:= (Sender as TListView).SmallImages.Height;
          if RowHeight<RowHeightDefault then RowHeight:= RowHeightDefault;
        end
        // sonst Standardzeilenhöhe
        else RowHeight:= RowHeightDefault;

        // ClientHeight minus Rahmen
        LVClientHeight:= (Sender as TListView).ClientHeight-2;
        // ClientHeight ggf. minus Spaltenüberschrift
        if (Sender as TListView).ShowColumnHeaders then
          Dec(LVClientHeight,17);

        // Anzahl voll sichtbarer Elemente minus eins
        LVClientRowCount:= (LVClientHeight div RowHeight)-1;
        // neuer theoretischer Index
        NewIndex:= (Sender as TListView).ItemIndex+(LVClientRowCount*Sig);
        // theoretischer Index bereinigen
        if NewIndex>=(Sender as TListView).Items.Count then
          NewIndex:= (Sender as TListView).Items.Count-1;
        if NewIndex<0 then NewIndex:= 0;

        // neues Item anzeigen
        (Sender as TListView).ItemIndex:= NewIndex;
        (Sender as TListView).Items[NewIndex].Focused:= True;
        (Sender as TListView).Items[NewIndex].MakeVisible(True);
      end;
      Key:= 1;
    end;
  end;

begin
  case Key of
    VK_PRIOR: SetListViewIndex(-1); // Bild-aufwärts-Taste
    VK_NEXT: SetListViewIndex(1); // Bild-abwärts-Taste
  end;
end;
Vielleicht kennt jemand eine einfachere Möglichkeit die Zeilenhöhe bei ListView zu ermitteln...

Ansonsten ist mein Monolog hiermit beendet.
  Mit Zitat antworten Zitat
 


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 08:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz