![]() |
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 |
Re: label´s zählen
Überwache Änderungen an der Caption der Labels und zähle dann in einer Variable
|
Re: label´s zählen
:wiejetzt:
kannst mir bitte einen code geben mfg tobi |
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 |
Re: label´s zählen
Wie werden die Captions gesetzt?
|
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; |
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.
|
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; |
Re: label´s zählen
oder so:
Delphi-Quellcode:
Gruß Hawkeye
begin
Dec (XAnzahl, Ord(DeinLabel.Caption = 'X')); DeinLabel.Caption := NeueCaption; Inc (XAnzahl, Ord(DeinLabel.Caption = 'X')); end; |
Re: label´s zählen
Wozu wird ein Zähler gebraucht ? Sniper hat die von mir angesprochene Logik bereits (fast) realisiert. :mrgreen:
|
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.
|
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:
|
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
![]() Und wen ich es mache, weiß ich dass ich ein x-Buch rausgenommen habe. ;) |
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?
|
Re: label´s zählen
Zitat:
|
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 |
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] |
Re: label´s zählen
@oki: Die Annahme ist falsch.
Zitat:
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:
|
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 |
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 |
Re: label´s zählen
Zitat:
Deine Aufgabenstellung hatte ich aber nicht so Zitat:
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 |
Re: label´s zählen
hey
also
Delphi-Quellcode:
if edit14.text = edit27.text then label1.caption :='x'
else label1.caption :='';
Delphi-Quellcode:
so wenn beides wahr ist hab ich in label1 und label2 ein 'x' stehen.if edit15.Text = edit28.Text then label2.caption :='x' else label2.caption :=''; 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^^. |
Re: label´s zählen
Dann hast du 2 Ansatzmöglichkeiten:
1. Abfrage direkt der Labels:
Delphi-Quellcode:
2. Ansatz
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); 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. |
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 |
Re: label´s zählen
du musst die Variable schon deklarieren... sonst geht nix
Am Anfang der Prozedur
Delphi-Quellcode:
var
Anzahl : Integer; |
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