"Field" weil es sich um so genannte Klassenfelder handeltRhyt hat geschrieben: Do 1. Dez 2022, 11:48 Woher kommt das mit dem F vor den Variablen bei den Privates ?für was steht das ?
Objekte und andere Probleme (Beispiel App / Code)
-
- Beiträge: 2118
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: Objekte und andere Probleme (Beispiel App / Code)
Re: Objekte und andere Probleme (Beispiel App / Code)
Allgemein kann man sich hier über "Stilfragen" schlau machen:
https://wiki.delphi-jedi.org/wiki/Proje ... tyle_Guide
https://wiki.delphi-jedi.org/wiki/Proje ... tyle_Guide
Re: Objekte und andere Probleme (Beispiel App / Code)
Ok, so langsam machen Properties in meinem Kopf sinn
Braucht Übung und Erfahrung wie alles.
Stoße gerade wieder an eine Grenze. Was hab ich falsch gemacht? (Quellcode in meinem letzten Posting auf Seite 1 unten)

Stoße gerade wieder an eine Grenze. Was hab ich falsch gemacht? (Quellcode in meinem letzten Posting auf Seite 1 unten)
- af0815
- Lazarusforum e. V.
- Beiträge: 6770
- 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:
Re: Objekte und andere Probleme (Beispiel App / Code)
Du gibst den Block, den du hier erzeugst nirgends frei.
Beim Grid geht das, weil du hier einen Parent angibst der sich um das wegräumen kümmern muss. Das liegt bei visuellen Komponenten, quasi in den Genen. Beim Block musst du dich selbst kümmern. Ich weis, den Heaptrace lesen ist am Anfang eine Qual
Das gibt sich mit der Zeit, wenn die Übung kommt.
Code: Alles auswählen
procedure TForm1.FormCreate(Sender: TObject);
begin
blockTwo := TBlock.Create(PaintBox1.Canvas); // <-- hier erzeugt, nirgends freigegeben.
blockTwo.setColor := $00D5A060;
gridTwo := TGrid.Create(Form1.Canvas);
end;

Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
Re: Objekte und andere Probleme (Beispiel App / Code)
@af0815
Verstehe ( glaub ich zumindest ). Sollte dann ja langen das Teil erstmal im Form.Destroy mit freeandnill zu bearbeiten oder?.
Zumindest kommt jetzt ein anderer Error
Der andere war nachdem du es gesagt hast, schon nachvollziehbar
aber bei dem fühl ich mich grad wie ne Kuh im Wald.
Verstehe ( glaub ich zumindest ). Sollte dann ja langen das Teil erstmal im Form.Destroy mit freeandnill zu bearbeiten oder?.
Zumindest kommt jetzt ein anderer Error


- af0815
- Lazarusforum e. V.
- Beiträge: 6770
- 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:
Re: Objekte und andere Probleme (Beispiel App / Code)
Das ist kein Error, sondern sagt dir, das alles passt.
0 unfreed menory blocks
das ist das beste, was man haben kann. Man kann den Dialog abschalten, wenn alles ok ist. SUch mal nach heaptrace hier im Forum
0 unfreed menory blocks
das ist das beste, was man haben kann. Man kann den Dialog abschalten, wenn alles ok ist. SUch mal nach heaptrace hier im Forum
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
Re: Objekte und andere Probleme (Beispiel App / Code)
@AF0815 dann ist ja gut. 
Ja werde mich hier mal schlau machen in den vorhandenen Beiträgen, heaptrace betreffend.
Etwas das mit in dem Programm aufgefallen ist. Wenn man den Block bewegt ohne das Fenster zu vergrößern hat man das er etwas ruckelt. Wenn das Fenster größer gezogen wird, ist die Bewegung viel fließender. Und der Block zieht der Maus etwas hinterher. (Hab hier einen 144hz Monitor da fällt das direkt auf.)
Woran könnte das liegen? Nutze ich die Invalidates falsch?
Hab die Aktuelle Version mal hochgeladen.
ps. Eure Tipps sind Goldwert

Ja werde mich hier mal schlau machen in den vorhandenen Beiträgen, heaptrace betreffend.
Etwas das mit in dem Programm aufgefallen ist. Wenn man den Block bewegt ohne das Fenster zu vergrößern hat man das er etwas ruckelt. Wenn das Fenster größer gezogen wird, ist die Bewegung viel fließender. Und der Block zieht der Maus etwas hinterher. (Hab hier einen 144hz Monitor da fällt das direkt auf.)
Woran könnte das liegen? Nutze ich die Invalidates falsch?
Hab die Aktuelle Version mal hochgeladen.
ps. Eure Tipps sind Goldwert

- Dateianhänge
-
Lazarus_Delphi_C#_Demo - V3.zip
- (1.73 MiB) 44-mal heruntergeladen
- af0815
- Lazarusforum e. V.
- Beiträge: 6770
- 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:
Re: Objekte und andere Probleme (Beispiel App / Code)
Schau mal hier nach https://lazarusforum.de/viewtopic.php?f ... ce#p127664Rhyt hat geschrieben: Fr 2. Dez 2022, 00:45 Ja werde mich hier mal schlau machen in den vorhandenen Beiträgen, heaptrace betreffend.
Wenn das Ergebnis in eine Datei geht, hat man den Vorteil, das der Dialog von Heaptrace nicht aufpopt. Das kann sehr nervig werden, wenn man genügend Leaks produziert. Da ist eine Datei besser. Ausserdem deaktiviert sich das ganze dann automatisch wenn man Heaptrace ausschaltet.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
Re: Objekte und andere Probleme (Beispiel App / Code)
@af0815
Vielen Dank!
Was wäre denn die gängige Herangehensweise, wenn ich z.b. über einen Knopf immer mehr Blöcke hinzufügen wollen würde? Hab da etwas herumprobiert, und auch irgendwie etwas gefunden das irgendwie funktioniert... allerdings ist der Quellcode langsam richtig unübersichtlich, da ich jedesmal durch eine Liste mit den Blöcken durchzählen muss wenn irgendetwas mit denen gemacht werden soll. Gibt es da eine einfachere Möglichkeit ?
Das erscheint mir echt umständlich irgendwie. Allerdings funktioniert es.
Vielen Dank!
Was wäre denn die gängige Herangehensweise, wenn ich z.b. über einen Knopf immer mehr Blöcke hinzufügen wollen würde? Hab da etwas herumprobiert, und auch irgendwie etwas gefunden das irgendwie funktioniert... allerdings ist der Quellcode langsam richtig unübersichtlich, da ich jedesmal durch eine Liste mit den Blöcken durchzählen muss wenn irgendetwas mit denen gemacht werden soll. Gibt es da eine einfachere Möglichkeit ?
Code: Alles auswählen
var
obList: Tlist;
implementation
//Objekt Liste erstellen.
procedure TForm2.FormCreate(Sender: TObject);
begin
obList := TList.Create;
AddBlock;
TBlock(obList.Items[0]).Draw(Form2.Canvas);
end;
//Hinzufügen der Blöcke
procedure TForm2.AddBlock;
var
block: TBlock;
begin
obs := obs + 1;
block := TBlock.Create(Form2.Canvas);
obList.Add(block);
block.Id:=obList.Count;
block.Text:= inttostr( block.id);
Invalidate;
end;
//Auf eine Procedure zugreifen von einem Block
procedure TForm2.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: integer);
var
i: integer;
begin
for i := 0 to obList.Count - 1 do
if obList.items[i] <> nil then
begin
TBlock(obList.Items[i]).MouseTouch(X, Y);
end;
end;
Das erscheint mir echt umständlich irgendwie. Allerdings funktioniert es.