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 Befehle aus Listbox ausgliedern? (https://www.delphipraxis.net/44764-befehle-aus-listbox-ausgliedern.html)

Hallo_Thomas 24. Apr 2005 13:16


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

Pr0g 24. Apr 2005 13:27

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

leddl 24. Apr 2005 13:29

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.

Hallo_Thomas 24. Apr 2005 13:39

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.

Hallo_Thomas 24. Apr 2005 13:47

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.

Pr0g 24. Apr 2005 14:00

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.

leddl 24. Apr 2005 14:00

Re: Befehle aus Listbox ausgliedern?
 
Zitat:

Zitat von Hallo_Thomas
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.

Versteh ich nich... :gruebel:
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.

Hallo_Thomas 24. Apr 2005 16:44

Re: Befehle aus Listbox ausgliedern?
 
Dadurch dürften dann doch im Label nicht mehr die alten werte stehen dachte ich?

leddl 24. Apr 2005 16:50

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 Delphi-Referenz durchsuchenFindComponent auch noch per Parameterübergabe bestimmen, in welchem Label angezeigt werden soll.

Hallo_Thomas 24. Apr 2005 17:37

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:
InsertMyItem(0,'1', clRed);
hab ich da versucht, hat aber nicht funktioniert

Sharky 24. Apr 2005 17:44

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;

leddl 24. Apr 2005 18:12

Re: Befehle aus Listbox ausgliedern?
 
Zitat:

Zitat von Hallo_Thomas
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:
InsertMyItem(0,'1', clRed);
hab ich da versucht, hat aber nicht funktioniert

So, und wieder hast du uns eigentlich nichts mitgeteilt. Laß doch mal was genaues drüber raus. Wofür so viele Labels, was speichern die? Ich kann bisher nur den Sinn eines einzelnen Labels erkennen. Was jetzt 39 weitere speichern sollen (das ja wohl auch mit dem Zählen der 1er, 3er und 7er zusammenhängt) kann ich mir beim besten Willen nicht vorstellen.
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.

Pr0g 24. Apr 2005 18:14

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:

leddl 24. Apr 2005 18:21

Re: Befehle aus Listbox ausgliedern?
 
Ach das schöne Programm. :roll:
Hab daran gar nimmer gedacht.
Zitat:

Zitat von Pr0g
Warum sagt mir denn keiner, dass ich die DFM in meinen Beispielen vergessen habe

Weil ich mir das nich runtergeladen hab. :zwinker:
Zitat:

Zitat von Pr0g
@Sharky: Das gleiche (so ähnlich jedenfalls) habe ich doch oben oben schon als Beispiel #2 gepostet.

Dann hättest es doch lieber als Code gepostet. Ich geh mal davon aus, daß sich nich jeder erst gern den QT runterladen will um ihn zu betrachten... ;)

Sharky 24. Apr 2005 18:22

Re: Befehle aus Listbox ausgliedern?
 
Zitat:

Zitat von Pr0g
... @Sharky: Das gleiche (so ähnlich jedenfalls) habe ich doch oben oben schon als Beispiel #2 gepostet. :roll:

:oops: Sorry, ich hatte mir nur dein Beispiel-1 angesehen.

Pr0g 24. Apr 2005 18:57

Re: Befehle aus Listbox ausgliedern?
 
Zitat:

Zitat von leddl
Weil ich mir das nich runtergeladen hab. :zwinker:

Es sollten sich ja auch die angesprochen fühlen, die es runtergeladen haben.

Zitat:

Zitat von leddl
Dann hättest es doch lieber als Code gepostet. Ich geh mal davon aus, daß sich nich jeder erst gern den QT runterladen will um ihn zu betrachten... ;)

Wenn ich sehe, dass in einem Thread Beispiele angehangen wurden, dann lade ich mir diese doch normalerweise mit runter, bevor ich mich an ein eigenes mache. Außerdem stand ja bei, dass Beispiel #2 mit den "Tag"-Werten arbeitet. So viel zum Thema sorgfältiges lesen des Posts anderer :roll:

leddl 24. Apr 2005 19:16

Re: Befehle aus Listbox ausgliedern?
 
Zitat:

Zitat von Pr0g
Wenn ich sehe, dass in einem Thread Beispiele angehangen wurden, dann lade ich mir diese doch normalerweise mit runter, bevor ich mich an ein eigenes mache. Außerdem stand ja bei, dass Beispiel #2 mit den "Tag"-Werten arbeitet. So viel zum Thema sorgfältiges lesen des Posts anderer :roll:

Naja, ich bin, seit ich mit D2k5 Personal arbeite, doch eher etwas vorsichtiger geworden. Dafür dauert mir das Starten dann doch zu lange. Vor allem bei einem ja eigentlich so simplen Problem.
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. ;)

Hallo_Thomas 24. Apr 2005 19:51

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