AGB  ·  Datenschutz  ·  Impressum  







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

History für Combobox

Ein Thema von shmia · begonnen am 15. Jan 2010
Antwort Antwort
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#1

History für Combobox

  Alt 15. Jan 2010, 19:00
Folgende beide Prozeduren erweitern Comboboxen um eine Historyfunktionalität.
Der Vorteil ist, dass man dazu keine neuen Komponenten installieren muss.
Man muss dazu nur eine der beiden Prozeduren aufrufen, wann immer ein eingegebener Wert in die Drop-Down-Liste aufgenommen werden soll.

Das Property Style darf nicht auf csDropDownList stehen, da man sonst keine neuen Werte eingeben kann.
Interessant ist auch, wenn man das Property Style auf csSimple setzt.
Dann sieht die Combobox wie ein normales Editfeld aus und man kann mit Pfeil auf/ab durch die letzten Eingaben blättern.

Es gibt zwei Varianten:
1.) die Historyeinträge werden sortiert. Sobald die max. erlaubt Anzahl erreicht ist, werden keine neuen Einträge zur Liste hinzugefügt
2.) die Historyeinträge werden in der Reihenfolge des Einfügens geführt. Sollte ein neuer Eintrag schon in der Liste sein, wandert dieser auf der 1. Platz

Delphi-Quellcode:
procedure ComboboxSortedHistory(cbo:TCustomComboBox; maxitems:Integer=20);
var
   s : string;
   i : Integer;
begin
   if cbo.Items.Count >= maxitems then Exit;

   s := TComboBox(cbo).Text;
   if (s<>'') and (cbo.Items.IndexOf(s) = -1) then
   begin
      for i := 0 to cbo.Items.Count-1 do
      begin
         if s < cbo.Items[i] then
         begin
            cbo.Items.Insert(i, s);
            Exit;
         end;
      end;
      cbo.Items.Add(s);
   end;
end;


procedure ComboboxRollingHistory(cbo:TCustomComboBox; maxitems:Integer=20);
var
   s : string;
   i : Integer;
begin
   s := TComboBox(cbo).Text;
   if s='then Exit;

   i := cbo.Items.IndexOf(s);
   if i >= 0 then
   begin
      cbo.Items.Move(i, 0);
      cbo.ItemIndex := 0;
   end
   else
   begin
      cbo.Items.Insert(0, s);
      if maxitems >= 0 then
         while cbo.Items.Count > maxitems do
            cbo.Items.Delete(cbo.Items.Count-1);
   end;
end;
Andreas
  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 18:23 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