Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Popup menü items sortieren? (https://www.delphipraxis.net/115893-popup-menue-items-sortieren.html)

Cylence 19. Jun 2008 15:31


Popup menü items sortieren?
 
Hi,

ich habe ein Programm, das in deutsch und englisch verfügbar ist. in dem programm sind einige popupmenüs von denen ich eben die caption if englisch einfach umbenenne und gut, aber dann stimmt ja die sortierung absolut nichtm ehr (alphabetisch) gibt es eine funktion oder so mit der man popupmenüs einfach schnell sortieren kann alphabetisch?

Thanx

tom

toms 19. Jun 2008 15:43

Re: Popup menü items sortieren?
 
Hallo, mir ist keine Funktion bekannt. Musst es wohl von Hand sortieren,
indem du den MenuIndex der Items veränderst.

Cylence 19. Jun 2008 15:48

Re: Popup menü items sortieren?
 
oooch neeeee jetzt das is ja üüüübel :-(

DeddyH 19. Jun 2008 15:57

Re: Popup menü items sortieren?
 
Außerdem finde ich persönlich es nicht sonderlich benutzerfreundlich, wenn sich Positionen von MenuItems zur Laufzeit ändern.

toms 19. Jun 2008 16:01

Re: Popup menü items sortieren?
 
Zitat:

Zitat von DeddyH
Außerdem finde ich persönlich es nicht sonderlich benutzerfreundlich, wenn sich Positionen von MenuItems zur Laufzeit ändern.

Je nach dem ist es aber wünschenswert.

Die Favoriten im IE z.B lassen sich ja auch vom Benutzer sortieren.

DeddyH 19. Jun 2008 16:03

Re: Popup menü items sortieren?
 
Na gut, bei zur Laufzeit generierten Items kann man das noch einsehen.

[edit] Schlechtschreibung [/edit]

RavenIV 19. Jun 2008 16:05

Re: Popup menü items sortieren?
 
Also ich fände es äusserst uncool, wenn sich in einem Popup-Menu der Eintrag für "kopieren" von Stelle 5 plötzlich an Stelle 2 findet, nur weil er jetzt "copy" heisst.
Der Anwender gewöhnt sich daran, dass er auf den Eintrag an 5.Stelle klicken muss.

Ebenso ist es beim Support.
"Klicken sie auf den Eintrag an Stelle 5" würde dann nicht mehr passen.

toms 19. Jun 2008 16:13

Re: Popup menü items sortieren?
 
Zitat:

Zitat von RavenIV
Also ich fände es äusserst uncool, wenn sich in einem Popup-Menu der Eintrag für "kopieren" von Stelle 5 plötzlich an Stelle 2 findet, nur weil er jetzt "copy" heisst.
Der Anwender gewöhnt sich daran, dass er auf den Eintrag an 5.Stelle klicken muss.

Normalerweise wählt man ja auch eine GUI Sprache und arbeitet mit dieser.
Zudem kommt es doch drauf an, um was für Items es sich handelt.
Wenn es sich z.B um eine Liste von Früchten, Bundesländer etc. handelt,
wäre es doch von Vorteil, wenn die Items sortiert sind?

Cylence 19. Jun 2008 16:16

Re: Popup menü items sortieren?
 
also einmal so support zu machen is ja nich grad das wahre man sollte da wohl schon angeben was man klicken soll nich das wievielte item... naja und da in deutsch alles ok is aber in englisch alles total durch einander find ichs überhaupt nicht falsch das ich das sortieren will....naja aber wie auch immer

taaktaak 19. Jun 2008 16:16

Re: Popup menü items sortieren?
 
Aber ist es Aufgabe eines Mumus deratige Listen abzubilden? Das erscheint mir schon recht grenzwertig...

Cylence 19. Jun 2008 16:18

Re: Popup menü items sortieren?
 
häh? mumus? was abarbeiten? ich will nur die menüs sortiert haben was is daran jetzt so schlimm? und die menüs ändern sich doch nich dauernd oder sowas...nur in englisch sorted in deutsch isses schon sorted fertig aber sowas gibts ja eh nich also is das ja relativ

RavenIV 19. Jun 2008 16:21

Re: Popup menü items sortieren?
 
TMenu.Items ist ein indiziertes Array.
Da kann man sicher irgendwie ein "Sort" dafür aufrufen.

Quäl Dich mal durch die Hilfe für TMenu.

Cylence 19. Jun 2008 16:22

Re: Popup menü items sortieren?
 
ok das hört sich gut an ich dachte auch schon an sowas wie einfach items.sorted aber das gibts leider nicht...

Cylence 19. Jun 2008 16:25

Re: Popup menü items sortieren?
 
mir fällt ein gutes beispiel ein windows xp startmenü rechtsklick nach namen sortieren genau sowas brauch ich...

RavenIV 19. Jun 2008 16:29

Re: Popup menü items sortieren?
 
Zitat:

Zitat von Cylence
ok das hört sich gut an ich dachte auch schon an sowas wie einfach items.sorted aber das gibts leider nicht...

Vermutlich musst Du das selber schreiben.
Da kannst Du ja einen der einfachen Sortieralgos (z.B. BubbleSort) nehmen.
Du wirst ja nicht mehrere Tausend MenuItems haben, sodass das optimiert sein müsste.

/nicht ernst gemeint
Oder aufwändig:
Punp die Menueinträge in eine TList.
Da gibt es ein TList.Sort

Cylence 19. Jun 2008 16:30

Re: Popup menü items sortieren?
 
hmmm sehr schade na dann werd ich das wohl so machen müssen ich danke euch!!!

toms 19. Jun 2008 16:33

Re: Popup menü items sortieren?
 
Hier mal ein Vorschlag:

Delphi-Quellcode:
procedure SortPopupMenu(PopupMenu: TPopupMenu);
var
  n1, n2: Integer;
  mi: TMenuItem;
begin
  with PopupMenu, Items do
  begin
    for n1 := 0 to Count - 1 do
    begin
      for n2 := n1 + 1 to Count - 1 do
      begin
        if Items[n1].Caption > Items[n2].Caption then
        begin
          mi := Items[n2];
          Delete(n2);
          Insert(n1, mi);
        end;
      end;
    end;
  end;
end;

RavenIV 19. Jun 2008 16:37

Re: Popup menü items sortieren?
 
ich würde aber das
if Items[n1].Caption > Items[n2].Caption then
erweitern, sodass nur nach dem Anfangsbuchstaben gesucht wird
if Items[n1].Caption[1] > Items[n2].Caption[1] then

toms 19. Jun 2008 16:41

Re: Popup menü items sortieren?
 
Zitat:

Zitat von RavenIV
ich würde aber das
if Items[n1].Caption > Items[n2].Caption then
erweitern, sodass nur nach dem Anfangsbuchstaben gesucht wird
if Items[n1].Caption[1] > Items[n2].Caption[1] then

Dann ist es aber nicht mehr ganz alphabetisch.

RavenIV 19. Jun 2008 16:44

Re: Popup menü items sortieren?
 
Zitat:

Zitat von toms
Dann ist es aber nicht mehr ganz alphabetisch.

Kommt halt auf die Anforderungen an.
Wenn es z.B. mehr als einmal "C..." geben sollte, muss man halt mit StrComp (oder so) arbeiten und mehr als nur eine Stelle beachten.

RavenIV 19. Jun 2008 16:46

Re: Popup menü items sortieren?
 
Zitat:

Zitat von Cylence
mir fällt ein gutes beispiel ein windows xp startmenü rechtsklick nach namen sortieren genau sowas brauch ich...

Beim Firefox kann man auch die Lesezeichen sortieren lassen.
Das wäre dann ja sowas, wie Du brauchst.

Soweit ich weiss, sind die Quellen des Mozilla doch frei.
Aber vermutlich wird der nicht mit Delphi geschrieben sein :-(

Cylence 20. Jun 2008 08:23

Re: Popup menü items sortieren?
 
Hi,

cool also dann werd ich das mal testen dieses wochenende was ihr hier gepostet habt und evtl auch mal schaun ob man das vom firefox übersetzen kann *g* aber erst wird heute geglotzt und gezockt *g* hab nen lg 32er endlich *freu* wünsch euch allen ein schönes wochenende!!!

gruß

tom

ringli 17. Mai 2009 14:32

Re: Popup menü items sortieren?
 
Wie muss ich den Code von toms eigentlich erweitern damit auch Untermenüs alphabetisch sortiert werden? Ich habe den Code schon etwas erweitert, nur leider wird immer das letzte Untermenü nicht mehr sortiert. Wo ist mein Denkfehler?
Delphi-Quellcode:
procedure SortPopupMenu(PopupMenu: TPopupMenu);
var
  n1, n2   : Integer;
  m1, m2   : Integer;
  mi1, mi2 : TMenuItem;
begin

  with PopupMenu, Items do
    begin
      for n1 := 0 to Count - 1 do
        begin
          for n2 := n1 + 1 to Count - 1 do
            begin
              if Items[n1].Caption > Items[n2].Caption then
                begin
                  mi1 := Items[n2];
                  Delete(n2);
                  Insert(n1, mi1);

                  for m1 := 0 to Items[n1].Count - 1 do
                    begin
                      for m2 := m1 + 1 to items[n1].Count - 1 do
                        begin
                          if items[n1].items[m1].Caption > items[n1].items[m2].Caption then
                            begin
                              mi2 := Items[n1].Items[m2];
                              Items[n1].Delete(m2);
                              Items[n1].Insert(m1, mi2);
                            end;
                        end;
                    end;
                end;
            end;
        end;
    end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:05 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 by Thomas Breitkreuz