AGB  ·  Datenschutz  ·  Impressum  







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

Komponentenliste selber verwalten?

Ein Thema von Mattze · begonnen am 18. Jul 2007 · letzter Beitrag vom 24. Jul 2007
Antwort Antwort
Mattze

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

Komponentenliste selber verwalten?

  Alt 18. Jul 2007, 11:50
Hallo,

kann man eine Komponentenliste (hier von einem Panel) selber verwalten.
Konkret:
Ich habe alle "Laufwerksbuttons" auf einem Panel. Damit ich bei "driveadd" und "driveremove" direkt und ordentlich die Button einordnen kann, muss ich sie als Komponenten von Panel "aufsteigend" sortieren, d. h. ein "niedrigerer Laufwerksbuchstaben" soll auch die kleinere Nummer haben.
Oder an die richtige Stelle einordnen. (Insertcomponent hängt aber die nächste Komponente immer hinten dran.)
Geht das Sortieren (So Components.customsort oder ähnliches) oder/und Einordnen direkt?
(Natürlich könnte man das alles über eine Liste verwalten, sortieren und bei Bedarf ALLE Komponenten des Panels löschen und wieder neu aufbauen. Aber, abgesehen von der Schreibarbeit, möchte ich soviel eigentlich gar nicht. Direkt die Komponentenliste nach eigenen Wünschen zu sortieren, wäre besser und schneller und ohne Flackern.)

Gruß
Mattze
  Mit Zitat antworten Zitat
Benutzerbild von Lannes
Lannes

Registriert seit: 30. Jan 2005
Ort: Münster
745 Beiträge
 
Delphi 3 Professional
 
#2

Re: Komponentenliste selber verwalten?

  Alt 18. Jul 2007, 23:07
Hallo,

weis nicht ob ich Dich richtig verstanden habe.

Den Index der Komponenten in der Liste Components kann man direkt ändern:
Button2.ComponentIndex := 0;
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
  Mit Zitat antworten Zitat
Mattze

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

Re: Komponentenliste selber verwalten?

  Alt 19. Jul 2007, 17:14
Hallo,

vielen Dank. Das ist es wahrscheinlich schon. Ich dachte, das wäre Read-only.
Also Komponenten in ein TList einlesen, sortieren, componentindex neu zuweisen.

Was macht Delphi bei der Zuweisung?
Beispiel: 10 Komponenten und ich weise der 10. die Nummer 7 zu. Rückt er den Rest automatisch auf?
(Also 7 wird dann zur 8, 8 zur 9 und 9 zur 10.)
Wäre nämlich ganz gut, weil man dann nach der Sortierung nur einen Wert zu ändern hat.

Gruß
Mattze
  Mit Zitat antworten Zitat
Benutzerbild von Lannes
Lannes

Registriert seit: 30. Jan 2005
Ort: Münster
745 Beiträge
 
Delphi 3 Professional
 
#4

Re: Komponentenliste selber verwalten?

  Alt 20. Jul 2007, 22:51
Hallo,

ja, probiers doch einfach mal aus.

//Edit: wozu die TList, die Liste Components steht doch schon zur Verfügung?
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
  Mit Zitat antworten Zitat
Mattze

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

Re: Komponentenliste selber verwalten?

  Alt 21. Jul 2007, 06:58
Hallo,

ich habe nach der Definition der Komponentenlist mal gesucht. Das ist eine TList und sie scheint nicht public.
Nur auf die eigentlichen Komponenten kann man mit ihren Indizes direkt zugreifen.
D. h., man muss die einzelnen Komponenten in eine TList einlesen - sozusagen als "externe" Komponentenliste.
Irre ich mich da? Vielleicht bin ich an der falschen Stelle fündig geworden.
Ich konnte jedenfalls kein Components als TList finden, nur einzelne Components[i].

Gruß
Mattze
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Komponentenliste selber verwalten?

  Alt 21. Jul 2007, 08:17
irgendwie glaub ich das du es dir schwerer machst als es sein muss. Wenn du einfach nur mehrere Komponenten dynamisch erstellen willst und anordnen musst du doch nicht auf die interne Liste der Komponenten zugreifen können.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Komponentenliste selber verwalten?

  Alt 21. Jul 2007, 09:31
So wie Jens seh ich das auch.
Ich würde mir intern im Programm eine eigene TComponentList nehmen und alle dynamisch erstellten Komponenten für meine eigene Verwaltung dort reinhauen.
  Mit Zitat antworten Zitat
Mattze

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

Re: Komponentenliste selber verwalten?

  Alt 21. Jul 2007, 16:54
Hallo,

das ist doch eigentlich das, was ich meinte. Ich habe eine interne Liste von mir selbst verwaltet, die ich sortiere usw. und bei Bedarf eben zu Komponenten des Panels mache. Nur eine kleine Erweiterung, dass ich sie immer gegen die bestehenden Komponenten auf dem Panel gegenchecke.

Genauer zu meinen Laufwerksbuttons im Panel:
Bsp. "Es kommt ein neues Laufwerk an (driveadd als Changenotify)."
Da ich vorher nicht weiß, welchen Laufwerksbuchstaben das zugewiesen bekommt, es also nicht direkt "einsortieren" kann, baue ich mir eine Liste mit den Komponenten von Panel und ergänze die durch den neuen Button. Dann sortiere ich das. Und nun wird der neue Button entsprechend in das Panel eingebaut und der componentindex gesetzt. (Solange der Button.name gleich bleibt, geschieht nichts. Erst, wenn da etwas neues kommt, werden die Indizes verschoben - eigentlich ja nur das neue.)

Das sieht nun alles etwas unnötig aus, aber ich MUSS irgendwann mal For i:=0 to... für die Komponenten machen und da ich in der Schleife die Namen abteste, MUSS ich mich darauf verlassen können, dass der "spätere Name auch später kommt".

Ich verstehe das also eigentlich so, wie Ihr das ja empfohlen habt, oder?

Gruß
Matthias
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#9

Re: Komponentenliste selber verwalten?

  Alt 21. Jul 2007, 18:43
In eine TComponentList kannst du beliebige TComponent reinknallen, also auch Buttons. Sortieren kannst du die auch recht leicht, da es bereits eine Sort Methode beinhaltet. Du musst dich nur noch drum kümmern, nach was sortiert werden soll, sprich du musst eine Compare Funktion selbst implementieren und den Pointer dieser Funktion (global definiert) an die Sort Methode übergeben.

Das Schöne an der TComponentList ist, im Vergleich zu einer TObjectList, dass wenn du den Button wieder freigibst, dieser auch gleich aus deiner ComponentList gelöscht wird.
  Mit Zitat antworten Zitat
Mattze

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

Re: Komponentenliste selber verwalten?

  Alt 24. Jul 2007, 16:36
Hallo

und oje! Da programmiere ich seit Delphis Anfängen mit Delphi, aber die Contnrs hat sich immer schön vor mir versteckt.
Ich wusste gar nicht, dass es das gibt. Mal sehen, welche Überraschungen da noch kommen...

Inzwischen habe ich das ganz vereinfacht gelöst. Mit einer sortierten Stringliste.
Da die Schalter alle als Namen nur den Laufwerksbuchstaben haben (der ist ja eindeutig), habe ich diese Namen in eine Stringlist eingelesen und als Objekt dazu den aktuellen Componentindex.
Dann den neuen dazu (mit TObject(-1)) - sortiert ist sofort. (Ist ja nicht viel).
Dann wieder die Komponenten durchgezählt und den Index mit dem Objekt der Stringlist verglichen.
Wird das falsch, dem neuen Button den "fälligen" Componentindex zugewiesen, der Rest wird automatisch verschoben. Dann noch die Positionierung (Left:=...) gesetzt bzw. für den Rest verschoben und alles ging sauber.

Ich glaube, die einfachste und schnellste Variante.

Gruß und trotzdem vielen Dank
Mattze
  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 07:22 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