Access violation

Rund um die LCL und andere Komponenten
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)

Re: Access violation

Beitrag von pluto »

macht wohl dadurch sin, da ich dies ja überschreibe wenn ich das recht seh
ja. Virtual sagt, dass diese Methode überladen werden kann. Also ausgetauscht werden kann in einer abgeleiteten Klasse. Genau das machst du doch.
MFG
Michael Springwald

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2819
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Access violation

Beitrag von m.fuchs »

pluto hat geschrieben:ja. Virtual sagt, dass diese Methode überladen werden kann.
Öhm, nö. Überladen ist wiederum etwas anderes. Das bedeutet, dass eine Methode mehrfach mit unterschiedlicher Signatur (Parametertypen, -reihenfolge, -anzahl) existiert.
http://de.wikipedia.org/wiki/%C3%9Cberladen
pluto hat geschrieben:Also ausgetauscht werden kann in einer abgeleiteten Klasse. Genau das machst du doch.
Auch das ist so nicht wirklich korrekt. Austauschen kann man die Methoden auch ohne virtual und override, das ist dann das sogenannte Überschreiben.
http://de.wikipedia.org/wiki/%C3%9Cberschreiben

mfg
Micha
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2819
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Access violation

Beitrag von m.fuchs »

Noch als kleiner Nachtrag: Den Unterschied zwischen dem Überschreiben von virtuellen und nicht-virtuellen Methoden zeigt dieses kleine Programm:

Code: Alles auswählen

program Test;
{$MODE ObjFpc}
{$H+}
 
uses
  Classes, SysUtils;
 
type
  TParent = class(TObject)
    public
      procedure Methode;
      procedure VirtuelleMethode; virtual;
  end;
 
  TChild = class(TParent)
    public
      procedure Methode;
      procedure VirtuelleMethode; override;
  end;
 
procedure TParent.Methode;
begin
  WriteLn('Parent sagt Hallo.');
end;
 
procedure TParent.VirtuelleMethode;
begin
  WriteLn('Parent sagt Hallo.');
end;
 
procedure TChild.Methode;
begin
  WriteLn('Child sagt Hallo.');
end;
 
procedure TChild.VirtuelleMethode;
begin
  WriteLn('Child sagt Hallo.');
end;
 
var
  P1, P2: TParent;
  C: TChild;
 
begin
  P1 := TParent.Create;
  P2 := TChild.Create;
  C := TChild.Create;
 
  P1.Methode;
  P2.Methode;
  C.Methode;
 
  P1.VirtuelleMethode;
  P2.VirtuelleMethode;
  C.VirtuelleMethode;
end.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Maik81ftl
Beiträge: 619
Registriert: Mi 9. Mär 2011, 16:34
OS, Lazarus, FPC: Ubuntu10.04 LTS (L 0.9.31.0 FPC 2.4.4)
CPU-Target: 64Bit
Wohnort: seit 01.06.2011 in Wahlstedt

Re: Access violation

Beitrag von Maik81ftl »

naja. der austausch von virtual in override hilft schon erst mal, das die Meldungen net mehr auftreten.
Ubuntu 10.04 LTS ist meine Heimat. Lazarus ist meine Sprache :D und der Kreis Segeberg meine LIEBE :D

Dets
Beiträge: 61
Registriert: Di 11. Sep 2007, 16:59
OS, Lazarus, FPC: Ubuntu Maverick (L 0.9.28.2-10, FPC 2.4.0)
CPU-Target: 32Bit
Wohnort: Lage
Kontaktdaten:

Re: Access violation

Beitrag von Dets »

Bevor du Pic im Constructor benutzt, solltest du eine Instanz davon erzeugen.

greetz, Dets ...

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2819
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Access violation

Beitrag von m.fuchs »

Socke hat geschrieben:BTW: ich finde es etwas umständliche ein Steuerelement (d.h. grafisch) von einer reinen Komponente (d.h. nicht grafisch) abzuleiten. Mein Ansatz wäre TCustomControl oder ähnliches (in diesem Fall evtl. sogar TImage) -- das Laden und Zeichnen von Bildern ist auch nicht so aufwändig, als das man TImage dafür bräuchte.
Die "Lösung" von Maik81ftl widerspricht auch allen möglichen Architekturprinzipien. Wenn das wirklich mal eine Laufschrift werden soll, dann ist die Ableitung von TTimer unsinnig (von TImage übrigens auch). Schließlich sollen die User später weder die Timer-Funktionalitäten noch die des Images verwenden. Aber vielleicht verstehe ich auch den Zweck der Komponente nicht, ist leider alles ein wenig verworren.

mf
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Maik81ftl
Beiträge: 619
Registriert: Mi 9. Mär 2011, 16:34
OS, Lazarus, FPC: Ubuntu10.04 LTS (L 0.9.31.0 FPC 2.4.4)
CPU-Target: 64Bit
Wohnort: seit 01.06.2011 in Wahlstedt

Re: Access violation

Beitrag von Maik81ftl »

m.fuchs hat geschrieben:Die "Lösung" von Maik81ftl widerspricht auch allen möglichen Architekturprinzipien. Wenn das wirklich mal eine Laufschrift werden soll, dann ist die Ableitung von TTimer unsinnig (von TImage übrigens auch). Schließlich sollen die User später weder die Timer-Funktionalitäten noch die des Images verwenden. Aber vielleicht verstehe ich auch den Zweck der Komponente nicht, ist leider alles ein wenig verworren.

mf
Jain, die Zeit der Schrift soll einstellbar sein Default 100, würde dies am liebsten vom TImage ableiten, nur wie bekommen ich eine Paise von gewünschter Zeit rein?

Da fällt mir Spontan ASM ein aber die Zeitschleife da zu schreiben ist auch wiederrum aufwendig, da ich ja net weiß, wie schnell die CPUs bei einigen sind und dies in ca 5 Jahren wohl schon ü. 10GHz liegen könnten. da find ich den Kern von TTimer schon obtimaler, da der schon vordeniniert ist.
Ubuntu 10.04 LTS ist meine Heimat. Lazarus ist meine Sprache :D und der Kreis Segeberg meine LIEBE :D

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2819
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Access violation

Beitrag von m.fuchs »

Was spricht gegen die Nutzung eines TTimer ohne davon abzuleiten?
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Maik81ftl
Beiträge: 619
Registriert: Mi 9. Mär 2011, 16:34
OS, Lazarus, FPC: Ubuntu10.04 LTS (L 0.9.31.0 FPC 2.4.4)
CPU-Target: 64Bit
Wohnort: seit 01.06.2011 in Wahlstedt

Re: Access violation

Beitrag von Maik81ftl »

Garnix, nur das die zusammenführung mit einem TImage schwer wird.
Ubuntu 10.04 LTS ist meine Heimat. Lazarus ist meine Sprache :D und der Kreis Segeberg meine LIEBE :D

Eclipticon
Beiträge: 292
Registriert: Sa 5. Feb 2011, 20:38
OS, Lazarus, FPC: Windows XP VirtualBox (FPC 2.6.4, Laz 1.2.4)
CPU-Target: 32Bit
Wohnort: Wien

Re: Access violation

Beitrag von Eclipticon »

Aeh ... ich habe Michaels Tip eher so verstanden, dass Du von einer visuellen Komponente (TLabel oder TImage oder was auch immer) ableitest und diese dann einen TTimer instantiiert ...

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2819
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Access violation

Beitrag von m.fuchs »

Du brauchst vermutlich kein TImage. Das ist nur schwer zu sagen, weil die von dir gegebenen Informationen meist nicht leicht zu verstehen sind.
Ich vermute aber mal ins Blaue hinein, dass eine Ableitung von TCustomControl mit einem TTimer als privatem Feld genau deine Anforderungen erfüllen.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Maik81ftl
Beiträge: 619
Registriert: Mi 9. Mär 2011, 16:34
OS, Lazarus, FPC: Ubuntu10.04 LTS (L 0.9.31.0 FPC 2.4.4)
CPU-Target: 64Bit
Wohnort: seit 01.06.2011 in Wahlstedt

Re: Access violation

Beitrag von Maik81ftl »

m.fuchs hat geschrieben:Du brauchst vermutlich kein TImage. Das ist nur schwer zu sagen, weil die von dir gegebenen Informationen meist nicht leicht zu verstehen sind.
Ich vermute aber mal ins Blaue hinein, dass eine Ableitung von TCustomControl mit einem TTimer als privatem Feld genau deine Anforderungen erfüllen.
nun in dem falle macht wohl dieser kleine Programmauszug wohl sinn.

Aber im Nachhinein, wäre sogar die Überlegung diese Form als ein Standart bzw Package zu schreiben. hat man alles auf einen schlag.
Dateianhänge
Testfolder.zip
Allerdigns nur als code.
(4.58 MiB) 92-mal heruntergeladen
Ubuntu 10.04 LTS ist meine Heimat. Lazarus ist meine Sprache :D und der Kreis Segeberg meine LIEBE :D

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)

Re: Access violation

Beitrag von pluto »

Aber im Nachhinein, wäre sogar die Überlegung diese Form als ein Standart bzw Package zu schreiben. hat man alles auf einen schlag.
Ist das nicht etwas übertrieben?

Wenn ich die Frage richtig verstanden habe, würde ich es so mache wie es "m.fuchs" vorgeschlagen habe.

Ich vertausche immer gerne überschreiben mit überladen. Ich hatte eigentlich das richtige im Sinn *G*. Kennt ihr bestimmt.

Also: Es geht um ein Text, der sich bewegt. der von Links nach Rechts sich bewegen soll. Oder es geht um eine Art Fließ Text. Wo nach und nach ein weitere Teil kommen soll.
Eigentlich nicht weiter Problematisch.

ps:
Wie wäre es, wenn wir eine Art Bereich einrichten, wo wir Übungs- Komponenten bereit stellen? Ganz einfache. Die nur als Schablone dienen sollen.
MFG
Michael Springwald

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Access violation

Beitrag von Socke »

pluto hat geschrieben:Also: Es geht um ein Text, der sich bewegt. der von Links nach Rechts sich bewegen soll. Oder es geht um eine Art Fließ Text. Wo nach und nach ein weitere Teil kommen soll.
Eigentlich nicht weiter Problematisch.
Schlag mal ein Buch auf: da findest du Fließtext. Fließt dieser Text jetzt aber aus dem Buch hinaus, hast du fließenden -- oder sich bewegenden -- Text. :D soviel zum Verwechseln
pluto hat geschrieben:Wie wäre es, wenn wir eine Art Bereich einrichten, wo wir Übungs- Komponenten bereit stellen? Ganz einfache. Die nur als Schablone dienen sollen.
Da gabs doch mal ein Projekt im Forum der Forengruppe zur Lazarusunterstützung (siehe Beispiel oben, aber da find ich gerade recht wenig Zeit zu :oops:)
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Maik81ftl
Beiträge: 619
Registriert: Mi 9. Mär 2011, 16:34
OS, Lazarus, FPC: Ubuntu10.04 LTS (L 0.9.31.0 FPC 2.4.4)
CPU-Target: 64Bit
Wohnort: seit 01.06.2011 in Wahlstedt

Re: Access violation

Beitrag von Maik81ftl »

Socke hat geschrieben:
pluto hat geschrieben:Also: Es geht um ein Text, der sich bewegt. der von Links nach Rechts sich bewegen soll. Oder es geht um eine Art Fließ Text. Wo nach und nach ein weitere Teil kommen soll.
Eigentlich nicht weiter Problematisch.
Schlag mal ein Buch auf: da findest du Fließtext. Fließt dieser Text jetzt aber aus dem Buch hinaus, hast du fließenden -- oder sich bewegenden -- Text. :D soviel zum Verwechseln
Der text soll von unten nach oben laufen wie beim Abspann
Ubuntu 10.04 LTS ist meine Heimat. Lazarus ist meine Sprache :D und der Kreis Segeberg meine LIEBE :D

Antworten