Warum wird Memo1.Lines gefüllt ?

Für Fehler in Lazarus, um diese von anderen verifizieren zu lassen.
pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

@theo dein Beispiel erklärt glaube ich ganz gut den Effekt, den ich beobachtet habe. Ich dachte das würde so gehen, aber leider doch nicht.

Dann muss ich das wohl doch über ein Event lösen oder ?
Das z.b. nach dem Laden und Speichern ausgelöst wird. und wo der User dann manuell entscheiden kann was er mit den Daten machen möchte.
Das fand ich irgendwie blöd weil das mehr arbeitet bedeuten würde:

Es muss eine zusät liche Procedure defniert werden.
und zugewiesen werden.

Was ich eigentlich vermeiden wollte.

Hat denn einer von euch eine Altnative anzubieten ?
@af0815
Ja es sind zwei Klassen die haben Eigenschaften.

Ich habe oft genug gelesen, das es sich herbei um eine Pointer Verbiegung handelt. und das es so geht(müsste..).
MFG
Michael Springwald

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6765
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Beitrag von af0815 »

Du willst also einige Listen synchron halten, damit du nicht sooovieeel arbeit damit hast ?!
Ist das richtig ?
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

JA *G* das ist richtig. Ich möchte zwei Variablen haben, die die gleiche Bedeutung haben, um den User arbeit zu sparen...
MFG
Michael Springwald

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

Ohne mich da jetzt rein zu denken, aber wieso brauchst du zwei Variablen...die du sowieso synchron hältst? Und wenn, könntest du die doch lieber in ner for-Schleife übertragen, als mit diesem etwas waagen Verfahren.
Johannes

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Wurde dafür nicht Assign erfunden ?
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Benutzeravatar
theo
Beiträge: 10859
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Christian hat geschrieben:Wurde dafür nicht Assign erfunden ?
Plutos Überlegung ist schon richtig, nur hat er nicht beachtet dass er sich damit in die Welt der Pointer begibt. Und um das zu tun, muss man GENAU wissen, was die Komponente von der man den Pointer holt tut. Sonst lässt man's lieber.
Generell ist das vorgehen von Pluto nicht zu empfehlen, obwohl man nicht sagen kann, dass es bei Kenntnis aller Faktoren völlig falsch ist. Aber es kann die Quelle von "unerklärlichen" Ergebnissen sein.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6765
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Beitrag von af0815 »

Es sind keine Pointer, sondern Klassen mit Schnittstellen (Eigenschaften) und indirekt darunter liegend Pointer.

Zu dem was Theo richtig sagt, ist das zusätzlich es noch an der Implementierung in der Klasse hängt, ob es funktioniert. Wenn dort ab Verhalten was geändert wird, sprich bei zb. bei einer Zuweisung ein Assign() durchgeführt wird oder nicht wir es noch mehr Problematisch.

Ich würde einen Nachfolger machen und dann die gewünschten Eigenschaften so sauber wie möglich einfügen. Sprich auch die Methoden überladen , die die interen Abläufe auch die Listen verwalten.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Wie schon gesagt, dafür wurde Assign erfunden falls seine Klasse das nicht unterstützt kann er es implementieren. Und seine Vorgehensweise ist in jedem Fall falsch weil der normale Programmierer die Klassenbibliothek nicht so tief kennt um das Ergebnis vorherzusehen.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

dass es bei Kenntnis aller Faktoren völlig falsch ist. Aber es kann die Quelle von "unerklärlichen" Ergebnissen sein.
Das Verstehe ich jetzt nicht....

Unter Delphi habe ich das schon mal gemacht und es hat Prima geklappt.
aber wieso brauchst du zwei Variablen...die du sowieso synchron hältst?
Einmal um intern auf die TSTringlist zuzugreifen. z.b. über die Methode GetInfo
und einmal damit der User was in der Listbox sieht.

Ich dachte damit könnte ich zwei Fliegen mit einer Klappe schlagen.
Überall lese ich immer wieder wenn man Klasse1:=Klasse2 macht das es sich hierbei um ein Pointer handelt und das beide Variablen jetzt gleich sein müssten, also Klasse1 ist genauso gleich wie Klasse2.

Kennt ihr mir das noch etwas genauer erklären ?
MFG
Michael Springwald

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Obj1 : TObject;
Obj2 : TObject;


^Obj1,2 sind nur Zeiger die im Moment auf irgendwas zeigen wenn man drauf zugreifen will gibts ne access violation

Obj1 := TObject.Create;
Obj2 := TObject.Create;

jetzt zeigen unsere zeiger auf die objekte die erstell wurden.

Obj1 := Obj2;

jetzt zeigen beide zeiger auf Obj2
Obj kann nie wieder benutzt werden da man nicht mehr weiss wo das ist und verursacht ein speicherleak weil es ja auch nicht freigegeben werden kann.

Obj1.Free; < da wird jetzt obj2 Freigegeben
Obj2.Free; < Access Violation weil Obj2 ja scon freigegeben wurde
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Benutzeravatar
theo
Beiträge: 10859
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

pluto hat geschrieben:
Das Verstehe ich jetzt nicht....

Unter Delphi habe ich das schon mal gemacht und es hat Prima geklappt.
Sag ich doch. Es KANN gut gehen, es kann aber auch in die Hose gehen.
Hast du denn mein Beispiel nicht begriffen?

Dort wird die Stringlist neu created durch die Komponente, der sie gehört.
Das darf die machen.
Danach zeigt dein gespeicherter Pointer aber nicht mehr auf die Speicherstelle der neuen Liste, sondern auf die Stelle wo die alte war. Und die gibt's nicht mehr.

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Ihr gibt euch zwar mühe mir das zu erklären aber nach vollziehen kann nicht es immer noch nicht !
Ich weiß jetzt nur drei dinge:
01: Man Weg geht so nicht
02: Es ist wohl doch ein BUG in Lazarus
03: Ich muss mir einen anderen Weg überlegen, aber das müsste ich so oder so. Weil die Daten ja später wohl nicht in einer TStringlist verwaltet werden sollten sondern (hoffe ich) in einer VST Komponente.
http://www.delphipraxis.net/post801319.html#801319" onclick="window.open(this.href);return false;
da mache ich mit, und für dieses Projekt schreibe ich diese Playlist Klasse.

Könnte mir jemand von euch eine Sichere Altnative anbieten ?

Eine hätte ich und die würde über ein Event laufen, was ich eigentlich vermeiden wollte. Aber das ist wohl der beste und sicherste Weg, oder ?

ps: Warum sollte eine listbox auf einmal die TStringlist neu Installisieren ? Das würde doch keinen sinn ergeben. Weil dann die Daten Weg währen. Wobei beim Clear Aufruf könnte ich es mir vorstellen. Aber sonst nirgends.
MFG
Michael Springwald

Benutzeravatar
theo
Beiträge: 10859
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Ding 02 stimmt nicht, das ist kein Bug in Lazarus.
pluto hat geschrieben: ps: Warum sollte eine listbox auf einmal die TStringlist neu Installisieren ? Das würde doch keinen sinn ergeben. Weil dann die Daten Weg währen. Wobei beim Clear Aufruf könnte ich es mir vorstellen. Aber sonst nirgends.
Das ist nur ein Beispiel. Solange du nicht mit absoluter Sicherheit ausschliessen kannst, dass so etwas in der Komponente geschieht, solltest du den Pointer besser nicht verwenden.

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Ding 02 stimmt nicht, das ist kein Bug in Lazarus.
Ja da habe ich ein Wort vergessen...sorry. ich hoffe das nimmt ihr mir jetzt nicht übel....

Edit01
Was meinst du mit allen Faktoren eigentlich genau ?
Was sind das bei dir ?
MFG
Michael Springwald

Antworten