AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Mengen...Label bei knopfdruck ändern

Ein Thema von Hurz · begonnen am 30. Sep 2008 · letzter Beitrag vom 1. Okt 2008
Antwort Antwort
Hurz

Registriert seit: 30. Sep 2008
Ort: Keine Ergebnisse gefunden
2 Beiträge
 
#1

Mengen...Label bei knopfdruck ändern

  Alt 30. Sep 2008, 21:52
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???

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.
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Mengen...Label bei knopfdruck ändern

  Alt 30. Sep 2008, 22:07
Schreib dir als erstes eine Unterfunktion, die deine Menge in einen string übersetzen kann:
Delphi-Quellcode:
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;
Der Rest ist einfach, da du diese Funktion mehrfach verwenden kannst.
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;
  Mit Zitat antworten Zitat
1. Okt 2008, 06:05
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Delphi-Frage
Hurz

Registriert seit: 30. Sep 2008
Ort: Keine Ergebnisse gefunden
2 Beiträge
 
#4

Re: Mengen...Label bei knopfdruck ändern

  Alt 1. Okt 2008, 15:06
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.
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Mengen...Label bei knopfdruck ändern

  Alt 1. Okt 2008, 21:08
Zitat von Hurz:
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?
Das erhöht einfach die Lesbarkeit des Sourcecodes.
Diese Regeln (Coding Style) kommen grösstenteils von Borland und sind allgemein akzeptiert.
http://dn.codegear.com/article/10280

Zitat von Hurz:
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.
Ja, man kann die Funktion in der ganzen Unit aufrufen.
Man muss das Ergebnis der Funktion auch zuweisen:
Delphi-Quellcode:
LabelBelegtePlaetze.Caption := MengeAsString(busbelegung, False);
LabelFreiePlaetze.Caption := MengeAsString(busbelegung, True);
Durch die Funktion brauchst du jetzt nur noch eine Menge, die ich hier mal "busbelegung" genannt habe.
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:53 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz