![]() |
Mengen...Label bei knopfdruck ändern
Hey hab folgendes Programm geschrieben und möchte folgendes wissen:
Wie kann ich es anstellen das in Label 4 die Zahl hinzugefügt wird welche bei label1 abgezogen wird??? :shock:
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; Button1: TButton; Button2: TButton; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure FormActivate(Sender: TObject); private { Private-Deklarationen} public { Public-Deklarationen} end; var Form1: TForm1; implementation const maxplatz = 20; type Menge = set of 1..maxplatz; var freiplatz,besetzt : Menge; a,b : integer; {$R *.DFM} procedure TForm1.Button2Click(Sender: TObject); Begin close; End; procedure TForm1.FormActivate(Sender: TObject); Begin Edit1.text:=''; freiplatz:=[1..maxplatz]; For a:=0 to maxplatz do if a in freiplatz then Begin Label1.Caption:=Label1.Caption+inttostr(a)+' '; End; End; procedure TForm1.Button1Click(Sender: TObject); Begin b:=strtoint(Edit1.text); if b in freiplatz then Begin freiplatz:=freiplatz-[b]; Label1.Caption:=''; Edit1.text:=''; For a:=0 to maxplatz do if a in freiplatz then Begin Label1.Caption:=Label1.Caption+inttostr(a)+' '; End; End else Begin if (b>maxplatz) or (b=0) or (b<0) then Begin showmessage('Der Bus hat nicht genug Plätze!'); Edit1.text:=''; End else showmessage('Bitte buchen Sie einen anderen Platz, welcher noch nicht belegt ist!'); Edit1.text:=''; End; End; End. |
Re: Mengen...Label bei knopfdruck ändern
Schreib dir als erstes eine Unterfunktion, die deine Menge in einen string übersetzen kann:
Delphi-Quellcode:
Der Rest ist einfach, da du diese Funktion mehrfach verwenden kannst.
const
MAXPLATZ = 20; // Konstanten nur in GROSSBUCHSTABEN type TMenge = set of 1..maxplatz; // Datentypen beginnen mit "T" ... function MengeAsString(x:TMenge):string; var n : Integer; Begin For a:=1 to maxplatz do if a in x then Begin Result:=Result+inttostr(n)+' '; End; End; Du willst dann sicher auch die Plätze ausgeben, die nicht in der Menge sind,oder? Kein Problem, man erweitert die Funktion:
Delphi-Quellcode:
function MengeAsString(x:TMenge; Rest:Boolean):string;
var n : Integer; enthalten : Boolean; Begin For a:=1 to maxplatz do begin enthalten := a in x; if (Rest and not enthalten) or (not Rest and enthalten) then // könnte auch durch XOR ersetzt werden Begin Result:=Result+inttostr(n)+' '; End; end; |
DP-Maintenance
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Delphi-Frage |
Re: Mengen...Label bei knopfdruck ändern
warum werden Konstanten immer groß geschrieben delphi liest dies doch auch in klein?!
und warum schreibt man immer ein T vor Datentypen?! hat das einen Grund? So zur Funktio: es ist doch egal wo ich diese einsetze, oder?! Denn ich habe sie eingesetzt und es passiert nichts...in dem Label steht bei der ausführung des Progs immer noch Label4 ...also werden die Plätze die abgezogen werden nicht hinzugefügt. |
Re: Mengen...Label bei knopfdruck ändern
Zitat:
Diese Regeln (Coding Style) kommen grösstenteils von Borland und sind allgemein akzeptiert. ![]() Zitat:
Man muss das Ergebnis der Funktion auch zuweisen:
Delphi-Quellcode:
Durch die Funktion brauchst du jetzt nur noch eine Menge, die ich hier mal "busbelegung" genannt habe.
LabelBelegtePlaetze.Caption := MengeAsString(busbelegung, False);
LabelFreiePlaetze.Caption := MengeAsString(busbelegung, True); Ich habe auch gleich den Labels einen sprechenden Namen gegeben. Man sollte jeder Komponente, die man im Sourcecode benützt von Anfang an einen sinnvollen Namen geben. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:29 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