Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi PageControl fehler bei ReadComponentRes (https://www.delphipraxis.net/24612-pagecontrol-fehler-bei-readcomponentres.html)

No Voices 23. Jun 2004 15:32


PageControl fehler bei ReadComponentRes
 
Und ich mal wieder.

kann jemand mit der folgenden Meldung was anfangen?

---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt NVDTA.exe ist eine Exception der Klasse EClassNotFound aufgetreten. Meldung: 'Klasse TTabSheet nicht gefunden'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
---------------------------

Nun, ich habe eine Form auf der eine PageControl1 liegt. Ich kann zur Laufzeit Tabsheet’s erzeugen und löschen. Auf jeder Page ist noch eine ShellListView die auf eine festen Ordner verwiest. Wenn ich also nun „Richtig mühevoll“ mir eine neue Page erstelle (per RechtsKlick), will ich natürlich das er denn zustand beim schließen des Progs speichert und beim starten wieder Lädt.

Das Speichern scheint zu gehen. Zumindest entsteht eine Datei wo auch die Reihenfolge der Tabs gespeichert wird.

Nur das laden nicht, da kommt halt diese Meldung.

Im Anschluß noch mein Code zur Fehlersuche und Änderung. DANKE!


procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
fs := TFileStream.Create(ProgPath + 'NV-DesktopTool-A.ini', FmCreate or FmShareDenyWrite);
try
fs.WriteComponentRes(PageControl1.Name, PageControl1)
finally
fs.free;
end;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
if FileExists(ProgPath + 'NV-DesktopTool-A.ini') then
Begin
fs := TFileStream.Create(ProgPath + 'NV-DesktopTool-A.ini', FmOpenRead or FmShareDenyNone);
try
fs.ReadComponentRes(PageControl1);
finally
fs.free;
end;
end;
end;

ibp 23. Jun 2004 22:38

Re: PageControl fehler bei ReadComponentRes
 
.. nutze delphi tags!

so schreibst du

Delphi-Quellcode:
fs.WriteComponentRes(PageControl1.Name, PageControl1)
solltest du dann auch nicht so lesen ?


Delphi-Quellcode:
s.ReadComponentRes(PageControl1.Name, PageControl1);

No Voices 24. Jun 2004 14:36

Re: PageControl fehler bei ReadComponentRes
 
Ja Netter Gedanke, hatte ich auch schon. Hast Du es getestet? Ich bin auch auf die idee gekommen und hatte dann "zu viele parameter". Zu beachten ist ja das er den ganzen inhalt der Pagecontrol speicern soll. Egal was und wieviel darauf ist. Kennst Du ne ganz andere Lösung oder jemand anders? :gruebel:

No Voices 28. Jun 2004 10:08

Re: PageControl fehler bei ReadComponentRes
 
Kann mir niemand helfen. Ich habe wirklich keine idee wie ich das mit den TabSheet's machen soll. Muß ich die dann auch irgendwie Createn, Sozusagen eine Stringlist wo er die Titel der Tabsheets speichert und dann beim starten die liste abarbeiten und jeden einzelnen sheet erzeugen?

Warum geht das nicht hin ??? :wall: :wall: :twisted:

MrKnogge 28. Jun 2004 10:13

Re: PageControl fehler bei ReadComponentRes
 
Die Tabshetts, müsstest du speichern/laden können wie dein PageControl.

No Voices 28. Jun 2004 10:19

Re: PageControl fehler bei ReadComponentRes
 
Kann ich nicht alles zusammen speichern? Muß das alles einzel sein?

MrKnogge 28. Jun 2004 10:23

Re: PageControl fehler bei ReadComponentRes
 
da es einzelne Componennten sind, muss es wohl einzelnd sein.

ibp 28. Jun 2004 10:27

Re: PageControl fehler bei ReadComponentRes
 
wie wäre es mit einem array of ...

Stevie 28. Jun 2004 10:33

Re: PageControl fehler bei ReadComponentRes
 
Wenn man sich die Datei anguckt, die gespeichert wird, sieht man doch, dass auch die Tabsheets gespeichert werden.
So ungefähr (in dfm-Form):
Delphi-Quellcode:
object PageControl1: TPageControl
  Left = 8
  Top = 8
  Width = 289
  Height = 193
  ActivePage = TabSheet1
  TabIndex = 0
  TabOrder = 0
  object TabSheet1: TTabSheet
    Caption = 'TabSheet1'
  end
  object TabSheet2: TTabSheet
    Caption = 'TabSheet2'
    ImageIndex = 1
  end
end
Und beim Lesen der Tabsheets gibt's ein Problem.

No Voices 28. Jun 2004 10:36

Re: PageControl fehler bei ReadComponentRes
 
Das wenn ich ein z.B. 2 Button auf einer Form habe, das ich dann beide button einzel speichern muß kann ich mir denken. Ich dachte nur wenn ich das PageControl speicher, Speichert er alles was da drauf ist. Ist das nicht der fall? Ich weis doch beim schreiben garnicht wieviele TabSheet's hinterher drauf sind. Wie soll ich das den machen??? :wiejetzt:

Stevie 28. Jun 2004 10:48

Re: PageControl fehler bei ReadComponentRes
 
Schreib mal folgendes in deine Unit:
Delphi-Quellcode:
initialization
  RegisterClass(TTabSheet);

finalization
  UnRegisterClass(TTabSheet);
Das behebt den Fehler, allerdings gibt's dann nen anderen, da bin ich noch dran.

No Voices 28. Jun 2004 10:58

Re: PageControl fehler bei ReadComponentRes
 
Ich habe da schon sowas stehen werde mir das aber nochmal ansehen ändern und ein bischen probieren.

Stevie 28. Jun 2004 11:03

Re: PageControl fehler bei ReadComponentRes
 
Ok, ich hab's!!!

Zunächst die Funktionsweise der Funktion ReadComponentRes:

Die Funktion lädt aus der Ressource die Werte und setzt sie auf die Komponente, die übergeben wird.
Wird aber nil übergeben, dann wird eine Instanz aus der Klasse erstellt, die in der Ressource steht.
Also geht die Funktion in die Ressource, lädt sich die Daten und sieht, dass dort ein TabSheet-Objekt
steht. Das TabSheet gibt's zwar schon, aber die Funktion hat nicht die Instanz, also will sie das Objekt
neu erzeugen. Dafür muss diese Klasse aber registriert sein, was bei TTabSheet nicht der Fall ist.
Tja, und deshalb gibt's auch das Phänomen, dass die TabSheets sich beim ersten Versuch verdoppeln, die die
du erstellt hast und die, die die Funktion aus der Ressource lädt und erzeugt.

Mein erster Vorschlag wäre, die TabSheets im Quelltext zu erstellen...

No Voices 28. Jun 2004 11:16

Re: PageControl fehler bei ReadComponentRes
 
Gute erklärung Danke. Leider Kann ich die TabSheet's nicht so im Code mit reinnehmen. Das ist ja sohn ding. Es soll ein tool werden wo ich nur Verknüpfungen drin habe also ein ("Start menü").
Die TabSheet's werden zu laufzeit erzeugt und bennant. Also woher soll ich wissen wieviele das sind. Auf jedem TabSheet ist eine ShellListView der nur auf einen Festen Ordner verweist, wo nun die Verknüpfungen lieghen. Es soll hinterher so sein das ich das Prog starte, Mir einen Tab aussuche (Programme, Games, Musik u.s.w). Wenn ich dan doppelclick auf Icon ausübe wird mein Prog geschlossen und das geclickte geöfnet. Diese Funktion Habe ich schon getestet, das geht. Es ist halt nur die sache mit dem Speichern und dem Laden.

Stevie 28. Jun 2004 11:24

Re: PageControl fehler bei ReadComponentRes
 
Zitat:

Zitat von Stevie
Mein erster Vorschlag wäre, die TabSheets im Quelltext zu erstellen...

Zitat:

Zitat von No Voices
Die TabSheet's werden zu laufzeit erzeugt und bennant.

Das ist doch genau das, was ich meine. Wenn also beim Programmstart keine TabSheets vorhanden sind, müsste es funzen!

No Voices 30. Jun 2004 09:29

Re: PageControl fehler bei ReadComponentRes
 
@ Sevie

Ok ich habe gestern das nochmal getestet. Habe folgendes eingefugt.

initialization
RegisterClass(TTabSheet);

finalization
UnRegisterClass(TTabSheet);

Und was soll ich sagen... es geht. DANKE!

Nun hatte ich noch das Problem mit dem Inhalt der TabSheets. Habe ich auch gelöst.

Ich frage die anzahl der Tab's ab und die Caption. Mit einer (For I := 0 To) erzeuge ich für jedes Tab eine ShellListView.

Also was das betrift geht alles. Danke für deine mühe.

Habe noch ne andere frage.

Ich habe Verknüpfungen die Ich in der ShellListView Anzeigen lasse. Wenn ich auf Verknüpfung Doppelt Klicke soll er mir die Exe öffnen. eine fremde EXE öffnen ist kein problem. Habe ich schon gemacht. Aber wie Bekomme ich den Path von der Exe auf die die Verknüpfunbg Verweist. Und das Rechtsklickmenü wenn ich auf der Verknüpfung bin soll auch abgestellt werden. Ich habe dazu schon einen beitrag gefunden. Aber einfach abschalten geht nicht das ich die Funktion (OnRechtsKlick) nicht habe.

ibp 30. Jun 2004 10:01

Re: PageControl fehler bei ReadComponentRes
 
bitte neue(s) frage/thema neuer threat...schau dir mal (SDK) ShellExecuteEx und SHELLEXECUTEINFO an

No Voices 2. Jul 2004 07:30

Re: PageControl fehler bei ReadComponentRes
 
Ok werde ich machen Danke!


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:31 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