AGB  ·  Datenschutz  ·  Impressum  







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

Warteschlange realisieren

Ein Thema von hotkey · begonnen am 13. Mai 2012 · letzter Beitrag vom 14. Mai 2012
Antwort Antwort
Seite 7 von 8   « Erste     567 8      
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#61

AW: Warteschlange realisieren

  Alt 14. Mai 2012, 17:53
Indem Du neue Daten eingibst und dann erneut einfuegen aufrufst?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
hotkey

Registriert seit: 20. Aug 2011
Ort: Berlin
113 Beiträge
 
Delphi 6 Personal
 
#62

AW: Warteschlange realisieren

  Alt 14. Mai 2012, 17:59
Oh man , stimmt , wieder kompliziert gedacht

Also das Programm sieht jetzt so aus :

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

  Tperson = record
    Name:string;
    id:integer;
  end;


  Tschlange = class
  private
    next,max:integer;
    schlange : array [1..10] of tperson;
  public
    function einfuegen(x:tperson):boolean;
    constructor create;
  end;


var
  Form1: TForm1;
  myschlange:Tschlange;
  myrec : Tperson;
  i : integer;

implementation

{$R *.dfm}


constructor tschlange.create;
 begin
  next :=10;
  max := 10;
 end;

function tschlange.einfuegen(x: tperson):boolean;
begin
  //hinter dem Array kann man nichts mehr einfügen
  Result := Next >0;
  if Result then
    begin

      //Daten an aktuelle Array-Position schreiben
      schlange[Next].Name := x.Name;
      schlange[Next].Id := x.id;
      //Position abziehen
      dec(Next);


    end
     else // wenn next = 0 ist
        begin
            for i:=9 downto 1 do
            schlange[i+1]:=schlange[i];
            showmessage('Fehler'); // Test , ob was gemacht wird , wenn next =0 ist
            end;



end;

procedure recordirgendwas;
 begin
  myrec.Name := form1.edit1.text;
  myrec.id := strtoint(form1.edit2.text);
  end;



procedure TForm1.Button1Click(Sender: TObject);
begin
recordirgendwas;



end;

end.
Jetzt wird, sobald ich in die 2 Edit-Feld Komponenten Namen und ID'S eingebe , das Array gefüllt oder ?
Felix
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#63

AW: Warteschlange realisieren

  Alt 14. Mai 2012, 18:03
Das glaube ich nicht, Tim. Du hast MySchlange noch gar nicht erzeugt. Macht aber auch nichts, da Du ihre Methoden ja auch noch nicht aufrufst
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
hotkey

Registriert seit: 20. Aug 2011
Ort: Berlin
113 Beiträge
 
Delphi 6 Personal
 
#64

AW: Warteschlange realisieren

  Alt 14. Mai 2012, 18:07
Danke , stimmt , das hatte ich vergessen, hab aber trotzdem 2 Fehlermeldungen
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

  Tperson = record
    Name:string;
    id:integer;
  end;


  Tschlange = class
  private
    next,max:integer;
    schlange : array [1..10] of tperson;
  public
    function einfuegen(x:tperson):boolean;
    constructor create;
  end;


var
  Form1: TForm1;
  myschlange:Tschlange;
  myrec : Tperson;
  i : integer;

implementation

{$R *.dfm}


constructor tschlange.create;
 begin
  next :=10;
  max := 10;
 end;

function tschlange.einfuegen(x: tperson):boolean;
begin
  //hinter dem Array kann man nichts mehr einfügen
  Result := Next >0;
  if Result then
    begin

      //Daten an aktuelle Array-Position schreiben
      schlange[Next].Name := x.Name;
      schlange[Next].Id := x.id;
      //Position abziehen
      dec(Next);


    end
     else // wenn next = 0 ist
        begin
            for i:=9 downto 1 do
            schlange[i+1]:=schlange[i];
            showmessage('Fehler'); // Test , ob was gemacht wird , wenn next =0 ist
            end;



end;

procedure recordirgendwas;
 begin
myschlange := tschlange.create
myschlange.free;
myschlange.einfuegen(x:person) // [B]Hier sagt er , Booelan und TPerson inkompatibel und er kennt das X nicht [/B]
  myrec.Name := form1.edit1.text;
  myrec.id := strtoint(form1.edit2.text);
  end;



procedure TForm1.Button1Click(Sender: TObject);
begin
recordirgendwas;



end;

end.
Felix
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#65

AW: Warteschlange realisieren

  Alt 14. Mai 2012, 18:11
Weißt Du eigentlich, was Du da tust bzw. liest Du, was wir schreiben? Wieviele Instanzen von MySchlange willst Du denn anlegen, die Du nie wieder freigeben kannst? Außerdem schau Dir mein Edit in #54 noch einmal an.

[edit] Wenn wir die Reihenfolge der Typdeklarationen etwas ändern, kann die Schlange auch ein Feld des Formulars werden:
Delphi-Quellcode:
type
  Tperson = record
    Name:string;
    id:integer;
  end;

  Tschlange = class
  private
    next,max:integer;
    schlange : array [1..10] of tperson;
  public
    function einfuegen(x:tperson):boolean;
    constructor create;
  end;

  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
    (* FSchlange gehört jetzt dem Formular und ist auch nur von dem zu erreichen *)
    FSchlange: TSchlange;
  public
    { Public declarations }
  end;

//...

procedure TForm1.FormCreate(Sender: TObject);
begin
  (* Instanz anlegen *)
  FSchlange := TSchlange.Create;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  (* Instanz freigeben*)
  FSchlange.Free;
end;
Wie schon erwähnt, bis auf die Formularvariable können alle globalen Variablen entfallen. Nur als Denkanstoß. [/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen

Geändert von DeddyH (14. Mai 2012 um 18:19 Uhr)
  Mit Zitat antworten Zitat
hotkey

Registriert seit: 20. Aug 2011
Ort: Berlin
113 Beiträge
 
Delphi 6 Personal
 
#66

AW: Warteschlange realisieren

  Alt 14. Mai 2012, 18:19
Tut mir Leid , du hattest es ja bearbeitet , dass du es bearbeitet hast , hatte ich nicht gesehen , Entschuldigung.

So , jetzt habe ich keine Fehler mehr :

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

  Tperson = record
    Name:string;
    id:integer;
  end;


  Tschlange = class
  private
    next,max:integer;
    schlange : array [1..10] of tperson;
  public
    function einfuegen(x:tperson):boolean;
    constructor create;
  end;


var
  Form1: TForm1;
  myschlange:Tschlange;
  myrec : Tperson;
  i : integer;

implementation

{$R *.dfm}


constructor tschlange.create;
 begin
  next :=10;
  max := 10;
 end;

function tschlange.einfuegen(x: tperson):boolean;
begin
  //hinter dem Array kann man nichts mehr einfügen
  Result := Next >0;
  if Result then
    begin

      //Daten an aktuelle Array-Position schreiben
      schlange[Next].Name := x.Name;
      schlange[Next].Id := x.id;
      //Position abziehen
      dec(Next);


    end
     else // wenn next = 0 ist
        begin
            for i:=9 downto 1 do
            schlange[i+1]:=schlange[i];
            showmessage('Fehler'); // Test , ob was gemacht wird , wenn next =0 ist
            end;



end;

procedure recordirgendwas;
 begin
 myschlange := tschlange.create;
 myschlange.Free;
 myschlange.einfuegen(myrec);
  myrec.Name := form1.edit1.text;
  myrec.id := strtoint(form1.edit2.text);
  end;



procedure TForm1.Button1Click(Sender: TObject);
begin
recordirgendwas;



end;

end.
Damit kann ich jetzt was , in meinen "Verhältnissen" , anfangen oder ?
Felix
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#67

AW: Warteschlange realisieren

  Alt 14. Mai 2012, 18:20
Ich habe gerade noch einmal editiert. Du kannst doch nicht bei jedem Klick auf den Button eine neue Schlange anlegen, das schafft nur Speicherlecks und führt nicht zum Ziel.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
hotkey

Registriert seit: 20. Aug 2011
Ort: Berlin
113 Beiträge
 
Delphi 6 Personal
 
#68

AW: Warteschlange realisieren

  Alt 14. Mai 2012, 18:28
Danke für den editierten Denkanstoß

Ist es jetzt richtig ?
Jetzt wird die Klasse direkt instanziiert bei FormCreate , ohne , dass ich auf den Button klicke.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type

  Tperson = record
    Name:string;
    id:integer;
  end;


  
  Tschlange = class
  private
    next,max:integer;
    schlange : array [1..10] of tperson;
  public
    function einfuegen(x:tperson):boolean;
    constructor create;
  end;



  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);

  private
    { Private declarations }
     FSchlange : Tschlange;
  public
    { Public declarations }
  end;




var
  Form1: TForm1;
  myschlange:Tschlange;
  myrec : Tperson;

implementation

{$R *.dfm}


constructor tschlange.create;
 begin
  next :=10;
  max := 10;
 end;

function tschlange.einfuegen(x: tperson):boolean;
var i:integer;
begin
  //hinter dem Array kann man nichts mehr einfügen
  Result := Next >0;
  if Result then
    begin

      //Daten an aktuelle Array-Position schreiben
      schlange[Next].Name := x.Name;
      schlange[Next].Id := x.id;
      //Position abziehen
      dec(Next);


    end
     else // wenn next = 0 ist
        begin
            for i:=9 downto 1 do
            schlange[i+1]:=schlange[i];
            showmessage('Fehler'); // Test , ob was gemacht wird , wenn next =0 ist
            end;



end;

procedure recordirgendwas;
 begin
 myschlange.einfuegen(myrec);
  myrec.Name := form1.edit1.text;
  myrec.id := strtoint(form1.edit2.text);
  end;



procedure TForm1.Button1Click(Sender: TObject);
begin
recordirgendwas;

showmessage(inttostr(myrec.id));

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Fschlange := Tschlange.create;
end;



end.
Felix
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#69

AW: Warteschlange realisieren

  Alt 14. Mai 2012, 18:31
Schmeiß jetzt endlich die globalen Variablen raus Du gibst FSchlange nicht wieder frei und greifst zum Teil auf myschlange zu, welche es aber nicht gibt. Außerdm finde ich es befremdlich, dass Du aus einer Methode des Formulars heraus eine reguläre Prozedur aufrufst, welche dann wieder auf Felder des Formulars zurückgreift, das ist doch Blödsinn.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
hotkey

Registriert seit: 20. Aug 2011
Ort: Berlin
113 Beiträge
 
Delphi 6 Personal
 
#70

AW: Warteschlange realisieren

  Alt 14. Mai 2012, 18:34
Meinst du so hier :

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type

  Tperson = record
    Name:string;
    id:integer;
  end;


  
  Tschlange = class
  private
    next,max:integer;
    schlange : array [1..10] of tperson;
  public
    function einfuegen(x:tperson):boolean;
    constructor create;
  end;



  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);

  private
    { Private declarations }
     FSchlange : Tschlange;
  myschlange:Tschlange; // Das kann ich eigentlich löschen , oder ?
  myrec : Tperson;
  public
    { Public declarations }
  end;




var
  Form1: TForm1;


implementation

{$R *.dfm}


constructor tschlange.create;
 begin
  next :=10;
  max := 10;
 end;

function tschlange.einfuegen(x: tperson):boolean;
var i:integer;
begin
  //hinter dem Array kann man nichts mehr einfügen
  Result := Next >0;
  if Result then
    begin

      //Daten an aktuelle Array-Position schreiben
      schlange[Next].Name := x.Name;
      schlange[Next].Id := x.id;
      //Position abziehen
      dec(Next);


    end
     else // wenn next = 0 ist
        begin
            for i:=9 downto 1 do
            schlange[i+1]:=schlange[i];
            showmessage('Fehler'); // Test , ob was gemacht wird , wenn next =0 ist
            end;



end;

procedure recordirgendwas;
 begin
 myschlange.einfuegen(myrec);
  myrec.Name := form1.edit1.text;
  myrec.id := strtoint(form1.edit2.text);
  end;



procedure TForm1.Button1Click(Sender: TObject);
begin
recordirgendwas;

showmessage(inttostr(myrec.id));

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Fschlange := Tschlange.create;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
Fschlange.Free;
end;

end.
Felix

Geändert von hotkey (14. Mai 2012 um 18:37 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 7 von 8   « Erste     567 8      


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 08:52 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