Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi label´s zählen (https://www.delphipraxis.net/97395-label%B4s-zaehlen.html)

MasterTobi 9. Aug 2007 20:05


label´s zählen
 
hey
ich bins mal wieder

ich hab folgende frage:

ich hab jetzt 13 label´s und wenn angenommen 4 davon ein 'x' zeigen dann sollen diese zusammen gezählt werden und in tedit1 ausgegeben werden.

kann mir jemand helfen :)
:coder2:

mfg
tobi

mkinzler 9. Aug 2007 20:07

Re: label´s zählen
 
Überwache Änderungen an der Caption der Labels und zähle dann in einer Variable

MasterTobi 9. Aug 2007 20:10

Re: label´s zählen
 
:wiejetzt:

kannst mir bitte einen code geben

mfg
tobi

Hansa 9. Aug 2007 20:12

Re: label´s zählen
 
Stichwortartig :

gehe die Label.Caption's mit FindComponent "is TLabel" durch und prüfe mit Pos ('x',...), ob eines den Kriterien entspricht. Genauer stahts hier : F1

mkinzler 9. Aug 2007 20:16

Re: label´s zählen
 
Wie werden die Captions gesetzt?

sniper_w 9. Aug 2007 20:16

Re: label´s zählen
 
Ich glaube, das ist schneller...
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  i, lCount: Integer;
  cLabel: TLabel;
begin
  lCount := 0;
  for i:=0 to ComponentCount-1 do
  begin
    if Components[i] is TLabel then
    begin
      cLabel := TLabel(Components[i]);
      // jetzt gewünschte abfrage machen
      if cLabel.Caption = 'x' then
      begin
        // hier zusammen zählen
        Inc(lCount);
      end;
    end;
  end;
end;

3_of_8 9. Aug 2007 20:27

Re: label´s zählen
 
Sauber ist das natürlich nicht wirklich. Wie gesagt: Die beste Lösung wäre, dass du dir einfach mit einem Counter (global oder dem Formular gehörend) merkst, wie viele Labels gerade den entsprechenden Wert haben und bei einer Änderung den Counter inkrementierst bzw. dekrementierst.

SirThornberry 9. Aug 2007 20:44

Re: label´s zählen
 
ich verstehe das Problem nicht. Ich glaub dein Programmablauf ist nicht richtig durchdacht. Du als Programmierer sorgst dafür das sich die Caption eines Labels ändert. Also weißt du auch wann ein X dazu kommt oder verschwindet. Wenn du die Caption änderst kannst du doch im gleichen Moment auch einen Zähler hoch bzw. runter zählen:
Delphi-Quellcode:
var
  lIsX,
  lWasX : Boolean;
begin
  lWasX := DeinLabel.Caption = 'X';
  DeinLabe.Caption := NeueCaption;
  lIsX := DeinLabel.Caption = 'X';
  if (lWasX and not(lIsX)) then
    XAnzahl := XAnzahl - 1
  else if (not(lWasX) and lIsX) then
    XAnzahl := XAnzahl + 1;

Hawkeye219 9. Aug 2007 20:58

Re: label´s zählen
 
oder so:

Delphi-Quellcode:
begin
  Dec (XAnzahl, Ord(DeinLabel.Caption = 'X'));
  DeinLabel.Caption := NeueCaption;
  Inc (XAnzahl, Ord(DeinLabel.Caption = 'X'));
end;
Gruß Hawkeye

Hansa 9. Aug 2007 22:01

Re: label´s zählen
 
Wozu wird ein Zähler gebraucht ? Sniper hat die von mir angesprochene Logik bereits (fast) realisiert. :mrgreen:

Luckie 9. Aug 2007 22:11

Re: label´s zählen
 
Wenn ich ein Buch ins Regal stelle, dann weiß ich doch, dass ich es rein gestellt habe und kann es mir merken. Dazu muss ich doch nicht alle fünf Minuen das ganze Regal durchgucken.

Hansa 9. Aug 2007 22:37

Re: label´s zählen
 
Luckie, das ist zu wenig. :stupid: Gehe ich hin und ersetze eines der X-Bücher durch ein Y-Buch, was dann ? Du gehst dann hin und guckst wieviele X-Bücher angeblich da sind und die Zahl stimmt nicht. Übrig bleibt dann nur : neu zählen. :mrgreen:

Luckie 9. Aug 2007 22:46

Re: label´s zählen
 
Ähm, du meinst also ich lasse dich in mein Wohnzimmer und an mein Regal? Dann musst du erst an meinem Kampfkaninchen vorbei. :mrgreen:

Und wen ich es mache, weiß ich dass ich ein x-Buch rausgenommen habe. ;)

1234588 9. Aug 2007 22:48

Re: label´s zählen
 
ersetzt man ein x-buch durch ein y-buch, kann man (logischerweise) davon ausgehn, das nun ein x-buch weniger im regal steht. wozu nachzaehlen wenn man weiß, das ein x-buch entfernt wurde?

Hansa 9. Aug 2007 22:58

Re: label´s zählen
 
Zitat:

Zitat von 1234588
.. wozu nachzaehlen wenn man weiß, das ein x-buch entfernt wurde?

Wenn das Wörtchen "wenn" nicht wäre. Im Netzwerk trifft grundsätzlich immer "wenn" zu. :mrgreen:

mkinzler 10. Aug 2007 05:39

Re: label´s zählen
 
Um beim Beispiel einer Bibliothek zu bleiben, man kann
- beim Ausleih-/Rückbringvorgang den Aus-/Eingang verbuchen
- das Fach mit den gewünschten Büchern per Kamera überwachen oder ( Events)
- jemanden regelmässig zum Zählen schicken

oki 10. Aug 2007 06:34

Re: label´s zählen
 
Hi,

ich stimme Hansa zu. Ersetzt man nämlich ein X-Buch durch ein X-Buch, so wird der Zähler incrementiert. Die Anzahl der Bücher bleibt aber gleich! Auf deutsch, gibt man in ein Edit noch mal den gleichen Text ein, so wird OnChange ausgeführt und der Zähler erhöht.

denke ich zumindest. Ausprobiert hab ich es nicht. :gruebel:

Also ich würde wie Hansa neu zählen.

Gruß oki

[edit] offensichtlichste Rechtschreibfehler korrigiert. [/edit]

SirThornberry 10. Aug 2007 06:39

Re: label´s zählen
 
@oki: Die Annahme ist falsch.
Zitat:

Delphi-Quellcode:
begin
  Dec (XAnzahl, Ord(DeinLabel.Caption = 'X'));
  DeinLabel.Caption := NeueCaption;
  Inc (XAnzahl, Ord(DeinLabel.Caption = 'X'));
end;

es wird decrementiert wenn es ein X-Buch war
und es wird wieder incrementiert wenn es danach ein X-Buch ist.

War also vorher ein X-Buch und nachher wieder wird erst decrementiert dann incrementiert und raus kommt 0 - also keine Veränderung.

Zum Thema FindComponent hab ich erst kürzlich folgendes geschrieben:
Zitat:

Ich bin der Meinung FindComponent sollte man nur einsetzen wenn es ohne suche nicht geht. Ansonsten ist es unglücklich programmiert und eine Verschwendung von Ressourcen.
Im realen Leben wirft ja auch keiner seinen Autoschlüssel nach hinten über die Schulter irgendwo hinn um ihn später zu suchen. Da legt man den Autoschlüssel auch dort hinn wo man ihn später nicht suchen braucht.
Es muss natürlich auch Programmierer geben welche FindComponent verwenden damit die neueste Generation der Rechner auch Absatz findet und diese möglichst stark augelastet werden

oki 10. Aug 2007 07:16

Re: label´s zählen
 
@ SirThornberry:

Das erste Dec hatte ich übersehen :P somit geb ich dir dann uneingeschränkt recht.

Auch auf die Gefahr hin, dass es jetzt etwas OT wird.
In diesem Fall gebe ich den Feinden von FindComponent recht. Zur Designzeit erstellte Labels muß man für diese Funktionalität nicht zwingend mit FindComponent suchen. Aber was ist generell so schlecht an FindComponent? Ich erstelle in einem recht großen Projekt visuelle Kompos zur Laufzeit. Components ist doch auch nur ein Container. Lege ich einen eigenen an, so sehe ich zu Components keinen Unterschied. Eine Suche müßte ich auch bei meinem Container implementieren. Also müsste es schon erhebliche Probleme mit FindComponent geben, damit ich mir die Arbeit eines eigenen Containers und die dafür notwendigen Funktionen mache.

Gruß oki

MasterTobi 10. Aug 2007 09:37

Re: label´s zählen
 
Guten Morgen


man ihr seit chaoten :-D
so

hm hilft mir net wirklich weiter p.s. ich bin anfänger in sachen delphi.

hm
ich wollte eig nur das :

wenn label2.caption und oder label1, label3, label4 ..... label13 ='x' dann edit1.text = //anzahl der 'x'//

ich bin so dumm!

mfg

oki 10. Aug 2007 09:59

Re: label´s zählen
 
Zitat:

Zitat von MasterTobi
ich bin so dumm!
mfg

ne, halt nur Anfänger.

Deine Aufgabenstellung hatte ich aber nicht so
Zitat:

wenn label2.caption und oder label1, label3, label4 ..... label13 ='x' dann edit1.text = //anzahl der 'x'//
verstanden.

kläre uns doch noch mal auf, wann sich X in den Labels ändert und warum das Ergebnis in ein Edit soll. Umgekehrt macht für mich mehr Sinn. Oder hab ich jetzt alles falsch verstanden? :gruebel:

Gruß oki

MasterTobi 10. Aug 2007 10:16

Re: label´s zählen
 
hey

also

Delphi-Quellcode:
if edit14.text = edit27.text then label1.caption :='x'
else label1.caption :='';
Delphi-Quellcode:
   
    if edit15.Text = edit28.Text then label2.caption :='x'
    else label2.caption :='';
so wenn beides wahr ist hab ich in label1 und label2 ein 'x' stehen.

jetzt soll mir delphi bzw mein prog. die anzahl der vorhandenen 'x' zeigen


die anzeige kann in einem label oder edit feld sein , das ist mir relativ^^.

Zwixx 10. Aug 2007 10:29

Re: label´s zählen
 
Dann hast du 2 Ansatzmöglichkeiten:

1. Abfrage direkt der Labels:
Delphi-Quellcode:
Anzahl := 0;
if label1.caption = 'x' then Inc(Anzahl);
if label2.caption = 'x' then Inc(Anzahl);
if label3.caption = 'x' then Inc(Anzahl);
if label4.caption = 'x' then Inc(Anzahl);
if label5.caption = 'x' then Inc(Anzahl);
if label6.caption = 'x' then Inc(Anzahl);
if label7.caption = 'x' then Inc(Anzahl);
...
Edit1.Text := IntToStr(Anzahl);
2. Ansatz

du fügst bei dem Text := 'x' vor das if ein Dec(Anzahl) und bei dem Setzen des Textes auf 'x' ein Inc(Anzahl) hinzu. Am Ende dann wieder ein Edit1.Text := IntToStr(Anzahl);

Ich würde bei einer solch einer solch einfachen Sache eher auf Ansatz 1 zurückgreifen, da sie übersichtlicher ist. Vor allem must du bei Ansatz 2 die Anzahl immer genau zurücksetzen wenn das Formular initialisiert wird, was zu unschönen Fehlern führen kann, falls man sich da vertut.

MasterTobi 10. Aug 2007 10:38

Re: label´s zählen
 
ich habe es versucht!
aber irgendwie sagt der mir bei

Anzahl := 0;

einen fehler!?!

muss ich da noch eine var setzen?

mfg

Zwixx 10. Aug 2007 10:40

Re: label´s zählen
 
du musst die Variable schon deklarieren... sonst geht nix

Am Anfang der Prozedur
Delphi-Quellcode:
var
  Anzahl : Integer;

MasterTobi 10. Aug 2007 10:43

Re: label´s zählen
 
Juhu danke @ all

das hat funktioniert.


mfg
tobi


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:48 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