Autor Beitrag
galagher
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2562
Erhaltene Danke: 46

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Di 03.01.12 17:38 
Hallo!

Ich habe eine Komponente TLabeledImage (ist im Package Visual.bpl) selbst entwickelt und konnte sie bisher (Delphi 6) immer nutzen, aber unter Delphi XE2 erhalte ich beim Versuch, sie auf die Form zu ziehen, die Meldung:

Zitat:
Zugriffsverletzung bei Adresse 14F6D116 in Modul 'Visual.bpl'. Lesen von Adresse 000006C.

Im Textfenster darunter:
Zitat:
[14F6D116]{Visual.bpl } LabeledImage.TLabeledImage.GetFont$qqrv (Line 119, "LabeledImage.pas" + 1) + $9
[5008C1A1]{rtl160.bpl } System.TypInfo.GetOrdProp (Line 2027, "System.TypInfo.pas" + 36) + $1
[20FEFB06]{designide160.bpl} ComponentDesigner.FindComponentDependencies (Line 3755, "ComponentDesigner.pas" + 15) + $9
...
Die Liste der Fehler ist noch länger.

Hier Zeile 119 der Datei LabeledImage.pas:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
function TLabeledImage.GetFont: TFont;
begin
 Result := FLabel.Font;  // <-- Zeile 119
end;
Das Auskommentieren nützt nichts.

Aber ein Formular, das bereits eine Komponente TLabeledImage enthält, lässt sich problemlos öffnen. Also denke ich, Delphi XE2 kann die Kompo zur Designzeit nicht darstellen. Zur Laufzeit kann ich die Kompo erzeugen und auch damit arbeiten.

Muss ich die Kompo vergessen oder kann ich da was machen?

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
Erichgue
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 86

Win XP/2000/7
TurboPacal 7.0; Delphi 2/5/7; BDS 2006/2010/XE6; C#; MSSQl 2000
BeitragVerfasst: Mi 04.01.12 14:32 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
function TLabeledImage.GetFont: TFont;
begin
 Result := FLabel.Font;  // <-- Zeile 119
end;


Liefert vermutlich NIL zurück.

Ist FLabel beim Aufruf von GetFont instanziert\zugewiesen?

Erich
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2562
Erhaltene Danke: 46

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Mi 04.01.12 17:15 
user profile iconErichgue hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
function TLabeledImage.GetFont: TFont;
begin
 Result := FLabel.Font;  // <-- Zeile 119
end;


Liefert vermutlich NIL zurück.
Ja, offenbar, denn ich hatte, als ich es schaffte, die Komponente auf die Form zu ziehen, die Meldung (sinngemäss): "NIL kann nicht zu TFont zugewiesen werden".

user profile iconErichgue hat folgendes geschrieben Zum zitierten Posting springen:
Ist FLabel beim Aufruf von GetFont instanziert\zugewiesen?
Das dachte ich zumindest, denn bisher hat's ja funktioniert.

Habe jetzt Prozedure SetName komplett entfernt, GetFont habe ich so abgeändert:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
function TLabeledImage.GetFont: TFont;
begin
  if Assigned(FLabel) then
    Result := FLabel.Font;
end;


Jetzt funktioniert's wieder!

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19338
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 04.01.12 17:17 
Nebenbei als Hinweis:
Du kannst in so einem Fall einfach Delphi beim Package als Hostanwendung eintragen, nen Haltepunkt setzen und kurz nachschauen was los ist. ;-)
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2562
Erhaltene Danke: 46

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Mi 04.01.12 17:30 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Nebenbei als Hinweis:
Du kannst in so einem Fall einfach Delphi beim Package als Hostanwendung eintragen, nen Haltepunkt setzen und kurz nachschauen was los ist. ;-)
Muss ich mir ansehen!

user profile iconErichgue hat folgendes geschrieben Zum zitierten Posting springen:
Ist FLabel beim Aufruf von GetFont instanziert\zugewiesen?
Wohl nicht, aber warum funktioniert es dann unter D6?

Vor allem:
user profile icongalagher hat folgendes geschrieben Zum zitierten Posting springen:
Das Auskommentieren nützt nichts.
Kann aber sein, dass da noch andere Bedingungen gegeben waren, die ich jetzt behoben habe.

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
AndyB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: Mi 04.01.12 20:04 
user profile icongalagher hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
function TLabeledImage.GetFont: TFont;
begin
  if Assigned(FLabel) then
    Result := FLabel.Font;
end;

Wo ist denn da der ELSE Teil?
Denn wenn man sich das ganze über die CPU Anzeige anschaut wird das jetzt zu:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
]function TLabeledImage.GetFont: TFont;
begin
  Result := TFont(Self); // << Speicherüberschreibungen sind da vorprogrammiert
  if Assigned(FLabel) then
    Result := FLabel.Font;
end;

_________________
Ist Zeit wirklich Geld?
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2562
Erhaltene Danke: 46

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Mi 04.01.12 23:14 
user profile iconAndyB hat folgendes geschrieben Zum zitierten Posting springen:
Wo ist denn da der ELSE Teil?


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
function TLabeledImage.GetFont: TFont;
begin
  if Assigned(FLabel) then
    Result := FLabel.Font
  else
    Result := Parent.Font;  //Parent.Font wird dzt. auch ohne diese Zeile von Delphi gesetzt,
end;                        //wenn man die Kompo auf die Form legt

Hab's noch nicht getestet, aber das ist doch die Lösung, oder?

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2562
Erhaltene Danke: 46

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Do 05.01.12 19:53 
user profile icongalagher hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconAndyB hat folgendes geschrieben Zum zitierten Posting springen:
Wo ist denn da der ELSE Teil?


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
function TLabeledImage.GetFont: TFont;
begin
  if Assigned(FLabel) then
    Result := FLabel.Font
  else
    Result := Parent.Font;  //Parent.Font wird dzt. auch ohne diese Zeile von Delphi gesetzt,
end;                        //wenn man die Kompo auf die Form legt

Hab's noch nicht getestet, aber das ist doch die Lösung, oder?


//Edit:
Korrekt ist:
ausblenden Delphi-Quelltext
1:
2:
  else
    Result := Font;

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!