zugriff von aussen

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)

Beitrag von pluto »

Code: Alles auswählen

Tlabel(MyNotebook.pages[0].FindComponent('Label1')).caption:='hallo Test1';
Ach stimmt theo das müsste der Fehler sein dann musst du khh pages durch page setzten

Ich finde allerdings diesen Verhalten von Lazarus seltsam. Das alle Komponenten von seinen Parent verwaltet werden. Ich meine in Delphi war das auch anders(oder?).
MFG
Michael Springwald

khh
Beiträge: 489
Registriert: Sa 5. Apr 2008, 09:37
OS, Lazarus, FPC: Win Vista,Win 7 (L 0.9.29 FPC 2.4.1)
CPU-Target: 32Bit /64 Bit
Wohnort: Nähe Freiburg i.Br.

Beitrag von khh »

hallo zusammen,
pages durch page setzten
hab ich gemacht, habs sogar selbst gemerkt :D

leider steigt das prog immer noch mit einem
access violation aus.

:cry:

Gruss KH

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 »

Dann findet er wohl Label1 nicht mach mal folgendes:

Code: Alles auswählen

if Assigned(MyNotebook.pages[0].FindComponent('Label1')) then
ShowMessage('gefunden')
else
ShowMessage('nicht gefunden');
MFG
Michael Springwald

khh
Beiträge: 489
Registriert: Sa 5. Apr 2008, 09:37
OS, Lazarus, FPC: Win Vista,Win 7 (L 0.9.29 FPC 2.4.1)
CPU-Target: 32Bit /64 Bit
Wohnort: Nähe Freiburg i.Br.

Beitrag von khh »

hallo zusammen,
ich hab jetzt noch die Variante von Theo ausprobiert:

procedure TmainForm.Button1Click(Sender: TObject);
var aPage:TPage;
aComp:TComponent;
begin
aPage:=MyNotebook.Page[0];
if Assigned(aPage) then
begin
AComp:=APage.FindComponent('mylabel1');
if Assigned(AComp) then
begin
if (AComp is TLabel) then
begin
TLabel(AComp).Caption:='Test';
end;
end;
end;


end;


hier:
>>>> if Assigned(AComp) then

fliegt er auch raus ,
apage hat den Wert TPage0X1414C50
acomp hingegen ???0x0 :(

was kann ich noch tun?

Gruss KH


PS sorry dass die Einrückungen hier verloren gegangen sind.

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 »

Du musst natürlich mylabel1 anpassen. Das ist der Name der Komponente. Ich könnte mir vorstelle das die Komponente bei dir anders heißt. Eine andere Lösung weiß ich im Moment auch nicht mehr.
MFG
Michael Springwald

khh
Beiträge: 489
Registriert: Sa 5. Apr 2008, 09:37
OS, Lazarus, FPC: Win Vista,Win 7 (L 0.9.29 FPC 2.4.1)
CPU-Target: 32Bit /64 Bit
Wohnort: Nähe Freiburg i.Br.

Beitrag von khh »

hallo michael
if Assigned(MyNotebook.pages[0].FindComponent('Label1')) then
ShowMessage('gefunden')
else
ShowMessage('nicht gefunden');
stimmt er geht in den else-zweig, aber warum?

der name des labels wird in einer while schleife zugewiesen, i wird mit 1 initialisiert.
mylabel1.name := 'mylabel' + inttostr(i);

Gruss KH

khh
Beiträge: 489
Registriert: Sa 5. Apr 2008, 09:37
OS, Lazarus, FPC: Win Vista,Win 7 (L 0.9.29 FPC 2.4.1)
CPU-Target: 32Bit /64 Bit
Wohnort: Nähe Freiburg i.Br.

Beitrag von khh »

Du musst natürlich mylabel1 anpassen
hab ich doch gemacht s.o

Gruss KH

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 »

zählst du denn i auch hoch ? in der while schleife ?
Lass dir doch mal alle Komponenten von pages[0] ausgeben...
also sowas

Code: Alles auswählen

var
  i:Integer;
begin
  for i:=0 to notebook1.pages[0].componentencount do begin
    writeln('"',notebook1.pages[0].component[i].name,'"');
  end;
end;
kann sein das componentencount falsch geschrieben ist. und auch component
gehört denn das Labelauch wirklich zu pages[0] ?
also der Parent sollte zu pages[0] gehören.
MFG
Michael Springwald

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

Beitrag von theo »

khh hat geschrieben: stimmt er geht in den else-zweig, aber warum?
Hast du Tomaten auf den Augen? ;-)
Wenn du nach "Label1" suchst und das Ding heisst "mylabel1", dann kann es nicht gefunden werden

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 »

Ich dachte das hätte er in seinen code geändert...
MFG
Michael Springwald

khh
Beiträge: 489
Registriert: Sa 5. Apr 2008, 09:37
OS, Lazarus, FPC: Win Vista,Win 7 (L 0.9.29 FPC 2.4.1)
CPU-Target: 32Bit /64 Bit
Wohnort: Nähe Freiburg i.Br.

Beitrag von khh »

zählst du denn i auch hoch ? in der while schleife ?
klar, sonst bekäme ich ja schon beim anlegen der pages nen fehler.
das bringt mich aber auf die idee, das der Fehler auch an der anlage der pages liegen kann
ich lese die Beschriftung, die gleichzeitig der name der page ist aus einem file ein :
while not eof(f) do
begin

Readln(f,Beschriftung);

myPage := TPage.create(self);
myPage.Caption:= Beschriftung;
myPage.Name := Beschriftung;
mypage.Parent:= self;
// noch ein Label
myLabel := TLabel.create(self);
mylabel.name := 'mylabel' + inttostr(i);
mylabel.caption := mylabel.name;
mylabel.Parent := mypage;
i := i + 1;
end;

vileicht liegt auch schon da irgendwo der Fehler ?

Gruss KH

khh
Beiträge: 489
Registriert: Sa 5. Apr 2008, 09:37
OS, Lazarus, FPC: Win Vista,Win 7 (L 0.9.29 FPC 2.4.1)
CPU-Target: 32Bit /64 Bit
Wohnort: Nähe Freiburg i.Br.

Beitrag von khh »

Hast du Tomaten auf den Augen?

natürlich nicht, das ding heisst schon mylabel1, ich hab nur die pasage
von michael hier zitiert :-(

Gruss KH

khh
Beiträge: 489
Registriert: Sa 5. Apr 2008, 09:37
OS, Lazarus, FPC: Win Vista,Win 7 (L 0.9.29 FPC 2.4.1)
CPU-Target: 32Bit /64 Bit
Wohnort: Nähe Freiburg i.Br.

Beitrag von khh »

for i:=0 to notebook1.pages[0].componentcount do begin
Korrektur:

componentcount = 0 !!!

mh, warum? die label sind doch zu auf den Tpages zu sehen ??

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 zu sehen schon aber hier machst du:
myPage := TPage.create(self);
wem gehört diese seite ?

Zeigt doch mal den Code wie du die Komponenten erstellst. und nutzte dabei bitte die Code-Tags
code=laz
/code

allerdings muss du noch [] um code=laz und /code machen.

Das ist das Icon wo Laz darauf steht.
Das erleichtert uns das lesen.
MFG
Michael Springwald

khh
Beiträge: 489
Registriert: Sa 5. Apr 2008, 09:37
OS, Lazarus, FPC: Win Vista,Win 7 (L 0.9.29 FPC 2.4.1)
CPU-Target: 32Bit /64 Bit
Wohnort: Nähe Freiburg i.Br.

Beitrag von khh »

alsooo

Code: Alles auswählen

procedure TMyNotebook.erzeugen;
 var
  Datei, Beschriftung : ansistring;
  i: integer;
  f: Textfile;
 
 begin
 
       try
         // Eigenschaften des Notebook
         Top  :=  10 ;
         Width:= 1000 ;
         Left :=   10;
         visible:= false;
         name := 'Notebook1';
         // page hinzufügen
         Datei := 'data/einstellungen/label.txt;
         AssignFile(f,Datei);
         Reset(f);
         i := 1;
         while not eof(f) do
         begin
 
            Readln(f,Beschriftung);
 
            myPage := TPage.create(self);
            myPage.Caption:= Beschriftung;
            myPage.Name := Beschriftung;
            mypage.Parent:= self;
 
            myLabel := TLabel.create(self);
            mylabel.name := 'mylabel' + inttostr(i);
            mylabel.caption := mylabel.name;
            mylabel.Parent := mypage;
 
            i  := i + 1;
 
         end;
        finally
 
       close(f);
     end;
end;
diese Proc wird im constructor von TMy1Notebook
aufgerufen.
im Mainform erstelle ich dann nur die Instanz mit
Mynotebook := TMyNotebook.create(self);
Mynotebook.Parent := panel1;
Mynotebook.Visible:= true;


da fällt mir grad auf, vieleicht ist ja hier der Fehler, da liegt ja noch ein Panel drunter!?

Gruss KH

Antworten