Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   letztes Element eines Records löschen (https://www.delphipraxis.net/176428-letztes-element-eines-records-loeschen.html)

Davidlocke13 4. Sep 2013 16:20

letztes Element eines Records löschen
 
Hallo;

wie kann ich das letzt Element eines Records löschen ?

Fange gerade erst mit Records an deshalb habe ich da gar keine Ahnung!


Liebe Grüße

Uwe Raabe 4. Sep 2013 16:23

AW: letztes Element eines Records löschen
 
Zitat:

Zitat von Davidlocke13 (Beitrag 1227179)
wie kann ich das letzt Element eines Records löschen ?

Die Frage macht irgendwie keinen Sinn. Bevor ich jetzt rate, erklär doch mal, was du hast und was du willst.

mkinzler 4. Sep 2013 16:24

AW: letztes Element eines Records löschen
 
Verwechselst Du Record mit Array?

Davidlocke13 4. Sep 2013 16:59

AW: letztes Element eines Records löschen
 
Nein ich meine schon einen Record

Delphi-Quellcode:
Type
  TEdit_Satz=record
    Combo_Komponente:TCombobox;
    Mmo_Beschreibung:TMemo;
    Preis_Edit:TEdit;
    zehn_Edit:TEdit;
    zehnMwSt_Edit:TEdit;
    zwanzig_Edit:TEdit;
    zwanzigMwSt_Edit:TEdit;
    vierzig_Edit:TEdit;
    vierzigMwSt_Edit: TEdit;
end;
Das ist doch ein Record ?!

Uwe Raabe 4. Sep 2013 17:03

AW: letztes Element eines Records löschen
 
Und welches Element soll nun gelöscht werden?

Edit: mir schwant furchtbares...

Der schöne Günther 4. Sep 2013 17:07

AW: letztes Element eines Records löschen
 
Jetzt bin ich auch mal gespannt. VCL-Komponenten in einem Record, ok. Aber dann "das letzte" ... "löschen"? :shock:

Davidlocke13 4. Sep 2013 17:18

AW: letztes Element eines Records löschen
 
so ...

Delphi-Quellcode:
private
Edit_Sätze:TEdit_Sätze;

ich gehe dann her und erstelle dann mehrere Edits die eine Variable k vom Typen Integer bekommen:

Delphi-Quellcode:
Edit_Sätze[k].zehn_Edit
wenn ich jetzt bei k z.B. auf 5 bin, wie kann ich dann das letzte Teil löschen so das k auf 4 ist ?

Delphi-Quellcode:
Edit_Sätze[k].zehn_Edit :=free;
geht schon mal nicht !


Es geht nur:
Delphi-Quellcode:
Edit_Sätze[k].zehn_Edit :=nil;
!
Aber damit ist es ja nicht gelöscht !

Uwe Raabe 4. Sep 2013 17:40

AW: letztes Element eines Records löschen
 
Wie ist TEditSätze deklariert?

OT: ist doch niedlich, daß die IDE auch Deutsche Umlaute in Variablennamen kann, nicht?

stahli 4. Sep 2013 17:48

AW: letztes Element eines Records löschen
 
Also wenn man ein Objekt (z.B. Edit1) freigeben will, dann macht man das mit:

Delphi-Quellcode:
Edit1.Free;
Edit1 ist dann "undefiniert". Wenn Du Edit1.Text dann etwas zuweist kann das schnell ungeahnte und unvorhersehbare Probleme verursachen.

Deshalb kann man noch die Variable "auf Null setzen".

Delphi-Quellcode:
Edit1 := nil;
Beide Anweisungen lassen sich auch gemeinsam ausführen:

Delphi-Quellcode:
FreeAndNil(Edit1);

Soweit zum Löschen Deines Edits.


Was Du genau mit Deinem Record und Deinem Array bezweckst habe ich nicht wirklich verstanden. Sicher gibt es bessere Lösungen.
I.d.R. werden diese eher für Datenverwaltung verwendet.

Vermutlich solltest Du Dir einmal anschauen, wie man Komponenten entwickelt. So kann man z.B. ein Panel definieren, das gleich einige Edits, Schalter usw. enthält.

Noch einfacher und oft ausreichend ist die Verwendung von Frames.

DeddyH 4. Sep 2013 18:10

AW: letztes Element eines Records löschen
 
Das FreeAndNil bringt aber nur dann einen Vorteil, wenn vor jedem Zugriff auf die entsprechende Objektvariable auch auf nil bzw. Assigned geprüft wird. Ansonsten produziert man immer noch ggf. AVs.

Der schöne Günther 4. Sep 2013 18:23

AW: letztes Element eines Records löschen
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1227192)
OT: ist doch niedlich, daß die IDE auch Deutsche Umlaute in Variablennamen kann, nicht?

Um ganz ehrlich zu sein habe ich teilweise wirkllich Umlaute und (könnte sogar sein) Unicode-Zeichen in Bezeichnern. Tut doch niemandem weh?

Uwe Raabe 4. Sep 2013 19:54

AW: letztes Element eines Records löschen
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1227195)
Um ganz ehrlich zu sein habe ich teilweise wirkllich Umlaute und (könnte sogar sein) Unicode-Zeichen in Bezeichnern. Tut doch niemandem weh?

Jein! Du kannst z.B. auch Komponenten auf dem Form mit Umlauten im Namen verwenden. Schaltest du dann aber das Form in den Textmodus, schrottet die IDE die Textdarstellung.

Davidlocke13 5. Sep 2013 09:35

AW: letztes Element eines Records löschen
 
Delphi-Quellcode:
type TEdit_Sätze=array of TEdit_Satz;

DeddyH 5. Sep 2013 09:45

AW: letztes Element eines Records löschen
 
Delphi-Quellcode:
var
  ZuLoeschendesEdit: TEdit;
begin
  ...
  ZuLoeschendesEdit := Edit_Sätze[k].zehn_Edit;
  Edit_Sätze[k].zehn_Edit := nil;
  ZuLoeschendesEdit.Free;
end;
Das sollte nach meinem Dafürhalten funktionieren und nebenbei einigermaßen verständlich sein.

Der schöne Günther 5. Sep 2013 09:50

AW: letztes Element eines Records löschen
 
Sollte ... das k nicht noch irgendwie von alleine kleiner werden? Mich hat das ganze schon zu Beginn überfordert, ich halte mich besser raus.

Ich kann mir überhaupt nicht vorstellen, was hier grade abläuft. Wenn ich ein Bild malen würde, was sich beim Benutzer auf dem Bildschirm abspielen würde, wie sähe das aus?

DeddyH 5. Sep 2013 10:00

AW: letztes Element eines Records löschen
 
Wieso sollte k kleiner werden? Die Anzahl der Array-Elemente ist ja nicht betroffen.

Der schöne Günther 5. Sep 2013 10:04

AW: letztes Element eines Records löschen
 
Ich meinte nur das hier:

Zitat:

Zitat von Davidlocke13 (Beitrag 1227190)
Delphi-Quellcode:
Edit_Sätze[k].zehn_Edit
wenn ich jetzt bei k z.B. auf 5 bin, wie kann ich dann das letzte Teil löschen so das k auf 4 ist ?

Delphi-Quellcode:
Edit_Sätze[k].zehn_Edit :=free;
geht schon mal nicht !

Ich persönlich habe noch keine Verbindung zu diesem k aufgebaut, mir selbst ist das nicht so wichtig :wink:

DeddyH 5. Sep 2013 10:08

AW: letztes Element eines Records löschen
 
Achso. k wird höchstwahrscheinlich eine Schleifenvariable sein, ansonsten erschließt sich mir der Sinn auch nicht.

bcvs 5. Sep 2013 11:07

AW: letztes Element eines Records löschen
 
Ich weiß zwar auch nicht genau, was hier mit den Edits passieren soll, aber wäre es nicht viel eleganter, das ganze in Klassen und Listen zu verwalten anstatt in Records und Arrays.

also
Delphi-Quellcode:
Type
  TEdit_Satz=class
    Combo_Komponente:TCombobox;
    Mmo_Beschreibung:TMemo;
    Preis_Edit:TEdit;
    zehn_Edit:TEdit;
    zehnMwSt_Edit:TEdit;
    zwanzig_Edit:TEdit;
    zwanzigMwSt_Edit:TEdit;
    vierzig_Edit:TEdit;
    vierzigMwSt_Edit: TEdit;
    constructor Create;
    destructor Destroy; override;
end;
Im Create werden die ganzen Komponenten erzeugt und im Destroy mit free wieder freigegeben.

Anstatt deinem Array nimmst du eine TObjectList.
Delphi-Quellcode:
var
  list:TObjectList;
  es:TEditSatz;
  ...
  // Liste füllen
  es:=TEditSatz.Create;
  list.add(es);
  ...
  // und Löschen des letzten Objekts
  list.delete(list.count-1);

Uwe Raabe 5. Sep 2013 13:55

AW: letztes Element eines Records löschen
 
Zitat:

Zitat von Davidlocke13 (Beitrag 1227190)
wenn ich jetzt bei k z.B. auf 5 bin, wie kann ich dann das letzte Teil löschen so das k auf 4 ist ?

Delphi-Quellcode:
SetLength(Edit_Sätze, Length(Edit_Sätze) - 1);
dec(k);
Eventuell musst du noch die Komponenten innerhalb des Records freigeben, aber es ist bisher ja auch nicht ersichtlich, wie die da überhaupt rein kommen.

p80286 5. Sep 2013 23:12

AW: letztes Element eines Records löschen
 
@Davidlocke
Wie wäre es wenn Du uns mal erklären würdest was Du erreichen willst.
Ich hab den Eindruck, daß Du mit einer Rohrzange einen Nagel einschlagen willst.
U.U wäre es aber besser eine Schraube und einen Schraubendreher zu nutzen.

Gruß
K-H


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