Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi FindComonent(dynamisch) (https://www.delphipraxis.net/120271-findcomonent-dynamisch.html)

JB-1990 8. Sep 2008 13:30


FindComonent(dynamisch)
 
Bin gerade am schreiben eines Editors mit Tabs. Läuft auch alles ganz gut, bis auf einige Proceduren (der Hauptteil) die FindComponent erfordern. Hab das zwar schonmal gemacht, allerdings hatte ich damals meine Objekte nicht dynamisch erstellt, da immer die gleiche Anzahl benötigt wurde und ich noch weniger Ahnung von der Materie hatte.
In meinem Editor kann man sich, im Integerzahlenbereich, Seiten erstellen...d.h. nicht mehr als 2^16 diese werden aber logischer weiße nur erstellt, wenn der Nutzer es wünscht.
Wenn der Nutzer eine neue Seite erstellt, wird in der PageControl ein Tabsheet erstellt, welches wiederum ein Richeditfeld enthält.
Sobald ich mit FindComponent dieses anspreche kommt das:

Im Projekt Editor ist eine Exception der Klasse EAccessViolation aufgetreten. Meldung:'Zugriffsverletzung bei Adresse 0045D638 in Modul 'Editor.exe'. Lesen von Adresse 00000248'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.

Hier mein Befehl
Delphi-Quellcode:
IF SaveDialog1.Execute THEN BEGIN
   TRichEdit(FindComponent('RE'+IntToStr(PC.ActivePageIndex+1))).lines.SaveToFile(SaveDialog1.FileName);
  END;
SaveDialog liegt aufm Formular, weiß nicht mehr weiter.

danke im voraus.

LG JB-1990

DeddyH 8. Sep 2008 13:45

Re: FindComonent(dynamisch)
 
Bist Du sicher, dass Du das RichEdit auf diese Weise finden kannst? Ich würde es mal so versuchen:
Delphi-Quellcode:
var RE: TRichEdit;
begin
  ...
  IF SaveDialog1.Execute THEN BEGIN
    RE := PC.Pages[PC.ActivePageIndex].FindComponent('RE'+IntToStr(PC.ActivePageIndex+1)) as TRichEdit;
    if Assigned(RE) then
      RE.lines.SaveToFile(SaveDialog1.FileName)
    else
      MessageBox(Handle,'Richedit nicht gefunden',nil,0);
  END;

JB-1990 8. Sep 2008 18:54

Re: FindComonent(dynamisch)
 
sicher bin ich mir ni, aber hab das bis jetzt noch ni anders gemacht,deswegen dacht ich, dass das geht, aber da PC parent von TS und das wiederrum parent von RE is...werds mal probieren

Delphi-Quellcode:
PC.Pages[...]
Is dann ein Zeiger auf die entsprechende Seite oder?

THX

mkinzler 8. Sep 2008 18:56

Re: FindComonent(dynamisch)
 
Ja, das ist eine Referenz auf die Aktive (sichtbare) Seite

JB-1990 8. Sep 2008 20:17

Re: FindComonent(dynamisch)
 
das mit dem speichern klappt jetzt, allerdings kommt immernoch eine EAccessViolation
kann es daran liegen, dass ich Delphi6 mit vista verwende?

mkinzler 8. Sep 2008 20:33

Re: FindComonent(dynamisch)
 
Spalte mal die den Befehl auf und schau es dir im Debugger an

JB-1990 9. Sep 2008 19:31

Re: FindComonent(dynamisch)
 
inwiefern soll ich den Befehl spalten? is doch ein zusammenhängender oder wie meinste das?

JB-1990 1. Dez 2008 19:36

Re: FindComonent(dynamisch)
 
habs jetzt einfach über ne TList gelöst.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:19 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz