Objekte und andere Probleme (Beispiel App / Code)

Für Fragen von Einsteigern und Programmieranfängern...
Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Objekte und andere Probleme (Beispiel App / Code)

Beitrag von Warf »

Rhyt 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 ?
"Field" weil es sich um so genannte Klassenfelder handelt

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

Re: Objekte und andere Probleme (Beispiel App / Code)

Beitrag von theo »

Allgemein kann man sich hier über "Stilfragen" schlau machen:
https://wiki.delphi-jedi.org/wiki/Proje ... tyle_Guide

Rhyt
Beiträge: 70
Registriert: Mo 28. Nov 2022, 20:22

Re: Objekte und andere Probleme (Beispiel App / Code)

Beitrag von Rhyt »

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)
heap.png
heap.png (21.67 KiB) 732 mal betrachtet

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
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)

Beitrag von af0815 »

Du gibst den Block, den du hier erzeugst nirgends frei.

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;
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.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Rhyt
Beiträge: 70
Registriert: Mo 28. Nov 2022, 20:22

Re: Objekte und andere Probleme (Beispiel App / Code)

Beitrag von Rhyt »

@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.
freenill.png
freenill.png (22.85 KiB) 714 mal betrachtet

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
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)

Beitrag von af0815 »

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
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Rhyt
Beiträge: 70
Registriert: Mo 28. Nov 2022, 20:22

Re: Objekte und andere Probleme (Beispiel App / Code)

Beitrag von Rhyt »

@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 :)
Dateianhänge
Lazarus_Delphi_C#_Demo - V3.zip
(1.73 MiB) 28-mal heruntergeladen

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
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)

Beitrag von af0815 »

Rhyt hat geschrieben:
Fr 2. Dez 2022, 00:45
Ja werde mich hier mal schlau machen in den vorhandenen Beiträgen, heaptrace betreffend.
Schau mal hier nach https://lazarusforum.de/viewtopic.php?f ... ce#p127664

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).

Rhyt
Beiträge: 70
Registriert: Mo 28. Nov 2022, 20:22

Re: Objekte und andere Probleme (Beispiel App / Code)

Beitrag von Rhyt »

@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 ?

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.
Screenshot_20221202_222259.png
Screenshot_20221202_222259.png (39.1 KiB) 651 mal betrachtet

Antworten