![]() |
Befehle aus Listbox ausgliedern?
Liste der Anhänge anzeigen (Anzahl: 1)
Habe dieser Art Befehl eindeutig zuviele in der Listbox stehen;
kann ich den Befehl irgendwohin ausgliedern, damit die Listbox wieder schneller wird?
Delphi-Quellcode:
begin
Counter := 0; for g := MeineListe.count-1 DownTo 0 do begin if StrToInt(MeineListe.Strings[g]) in [1,3,10] then Inc(Counter) else if StrToInt(MeineListe.Strings[g]) in [6] then Counter := 0 ; Label1.Caption:= IntToStr(Counter) ; end; end; Danke |
Re: Befehle aus Listbox ausgliedern?
Der Code rechnet doch nur etwas, abhängig von den Items der ListBox, aus. Also würde es reichen die Rechung nur dann auszuführen, wenn ein Item hinzukommt. Pack den Code also in eine eigene Prozedur und ruf diese immer nach dem Einfügen eines Items auf.
Edit: Außerdem musst du die StringList noch im onDestroy der Form freigeben. Warum nutzt du überhaupt eine zusätzliche StringList? Du kannst doch direkt die Items der ListBox nehmen, ist ja auch nur ne StringList. MfG Pr0g |
Re: Befehle aus Listbox ausgliedern?
Also als allererstes mal kannst du natürlich - wie ich dir bereits in deinem alten Thread gesagt habe - die Anzeige im Label aus der For-Schleife auslagern. Das geht sowieso nicht so schnell.
Außerdem kannst du doch einfach bei jeder Eingabe direkt prüfen, wieviele 1er, 3er und 7er seit der letzten 6 eingegeben wurden. Mußt ja nich jedes mal die ganze ListBox durchgehen. Einfach zb ne globale Variable, die du im Create auf 0 setzt. Dann überprüfst du bei jeder Eingabe, obs ne 1, 3 oder 7 is und erhöhst sie. Wird ne 6 eingegeben, setzt du sie halt wieder auf 0. Sollte dir viel Rechenzeit sparen. |
Re: Befehle aus Listbox ausgliedern?
Ich bin ja noch nicht ganz so in der Materie vertieft, ich brauche am besten Beispiel dazu damit ichs versteh.
Unter die Button hab ichs deswegen nicht geschrieben, weil ich die Stringliste gern abspeichern wollte und weils im Orginal ca. 40 solcher Buttons gibt, und ca. genu so viele Labels. |
Re: Befehle aus Listbox ausgliedern?
Der gedanke der mir dabei schwebte mit der zusätzlichen Stringlist war der, das die Listbox entlastet werden würde und dadurch eine schnelle Anzeige ermöglicht würde, war leider nicht der Fall. Dies klappt im Moment nur in einer sepperaten 2.Listbox, leider funktioneren bei einem Reset dann die Labels nicht wenn ich die2. Lisbox über die 1. schiebe.
|
Re: Befehle aus Listbox ausgliedern?
Liste der Anhänge anzeigen (Anzahl: 2)
Hab dein Beispiel mal angepasst und als Beispiel #1 angehangen. Eine weitere Optimierung ist in Beispiel #2 zu finden, dort werden die Werte in der Tag-Eigenschaft der Buttons gespeichert.
|
Re: Befehle aus Listbox ausgliedern?
Zitat:
Was hat denn das Auslagern in eine Prozedur für eine Auswirkung auf das Speichern der ListBox? Du mußt doch einfach nur in jedem ButtonClick eine Prozedur aufrufen, die den Counter entsprechend erhöht oder zurücksetzt. |
Re: Befehle aus Listbox ausgliedern?
Dadurch dürften dann doch im Label nicht mehr die alten werte stehen dachte ich?
|
Re: Befehle aus Listbox ausgliedern?
Ich versteh das ganze Problem immer noch nicht? Du sagst, du hast umdie 40 Labels. In deinem geposteten Quelltext wird aber doch auch nur eines beschrieben. Genau das kannst du doch auch in eine externe Funktion auslagern. Zur Not kannst du über
![]() |
Re: Befehle aus Listbox ausgliedern?
Nicht in dem Text, aber im Richtigen sind fast so viel.
Hab jetzt gerade das eine schöne Programm runtergeladen, ich nglaub das triffts im wesentlichen. da habe ich wieder ein altes Problem
Delphi-Quellcode:
AddMyItem('1', clRed);
Ich möchte in der Listbox die aktuellste Zahl gern oben haben
Delphi-Quellcode:
hab ich da versucht, hat aber nicht funktioniert
InsertMyItem(0,'1', clRed);
|
Re: Befehle aus Listbox ausgliedern?
Liste der Anhänge anzeigen (Anzahl: 1)
Hai Hallo_Thomas,
ich habe das jetzt mal auf die Schnelle so gemacht:
Delphi-Quellcode:
type
TForm1 = class(TForm) Anzeige: TListBox; Ende: TButton; SpeedButton1: TSpeedButton; SpeedButton3: TSpeedButton; SpeedButton6: TSpeedButton; SpeedButton7: TSpeedButton; Label1: TLabel; procedure EndeClick(Sender: TObject); procedure AllButonsClick(Sender: TObject); private { Private-Deklarationen } counter : Integer; public end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.EndeClick(Sender: TObject); begin close; SpeedButton1.OnClick := AllButonsClick; SpeedButton1.Tag := 1; SpeedButton3.OnClick := AllButonsClick; SpeedButton3.Tag := 3; SpeedButton7.OnClick := AllButonsClick; SpeedButton7.Tag := 10; SpeedButton6.OnClick := AllButonsClick; SpeedButton6.Tag := 6; end; procedure TForm1.AllButonsClick(Sender: TObject); var foo : Integer; begin foo := (Sender AS TSpeedButton).Tag; Anzeige.Items.Insert(0,IntToStr(foo)); if (foo in [1,3,10]) then begin inc (counter); end; if (foo = 6) then begin counter := 0; end; Label1.Caption:= IntToStr(Counter) ; end; |
Re: Befehle aus Listbox ausgliedern?
Zitat:
Außerdem hab ich auch keinen Plan, was "das eine schöne Programm" sein soll. Und was das Problem mit dem "oben in die ListBox einfügen" angeht: Das hattest du doch in deinem letzten Thread schon gelöst. Wo is dann das Problem. Ich blick nich mehr durch... :gruebel: Am besten wärs, du schreibst mal haargenau, was nicht funktioniert, und vor allem auch was du willst. Vorher kann hier echt jeder nur raten. |
Re: Befehle aus Listbox ausgliedern?
Warum sagt mir denn keiner, dass ich die DFM in meinen Beispielen vergessen habe :gruebel: Habe die zwei Dateien oben nun angepasst.
@Hallo_Thomas: Das AddMyItem war eine eigene Prozedur oben im Code. In dieser musst du das AddObject durch InserstObject ersetzen, dann kannst du am Anfang auch wieder eine 0 als ersten Parameter angeben. Ich habe die zwei Beispiele oben gerade dementsprechend angepasst. @Sharky: Das gleiche (so ähnlich jedenfalls) habe ich doch oben oben schon als Beispiel #2 gepostet. :roll: |
Re: Befehle aus Listbox ausgliedern?
Ach das schöne Programm. :roll:
Hab daran gar nimmer gedacht. Zitat:
Zitat:
|
Re: Befehle aus Listbox ausgliedern?
Zitat:
|
Re: Befehle aus Listbox ausgliedern?
Zitat:
Zitat:
|
Re: Befehle aus Listbox ausgliedern?
Zitat:
Und: Ich hab gesehen, daß du bei deinem 2. Beispiel mit Tags arbeitest, nur muß ja deshalb deine Lösung nicht gleich die von Sharky sein. :roll: Aber back to topic, das hat ja hier mit dem Thema nich wirklich was zu tun. Am besten wäre es eben, wenn wir mal warten, bis Hallo_Thomas dann doch mal was zu den letzten Posts saget. ;) |
Re: Befehle aus Listbox ausgliedern?
Dankeschön, jetzt kann ich loslegen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:33 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