![]() |
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; |
Re: PageControl fehler bei ReadComponentRes
.. nutze delphi tags!
so schreibst du
Delphi-Quellcode:
solltest du dann auch nicht so lesen ?
fs.WriteComponentRes(PageControl1.Name, PageControl1)
Delphi-Quellcode:
s.ReadComponentRes(PageControl1.Name, PageControl1);
|
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:
|
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: |
Re: PageControl fehler bei ReadComponentRes
Die Tabshetts, müsstest du speichern/laden können wie dein PageControl.
|
Re: PageControl fehler bei ReadComponentRes
Kann ich nicht alles zusammen speichern? Muß das alles einzel sein?
|
Re: PageControl fehler bei ReadComponentRes
da es einzelne Componennten sind, muss es wohl einzelnd sein.
|
Re: PageControl fehler bei ReadComponentRes
wie wäre es mit einem array of ...
|
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:
Und beim Lesen der Tabsheets gibt's ein Problem.
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 |
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:
|
Re: PageControl fehler bei ReadComponentRes
Schreib mal folgendes in deine Unit:
Delphi-Quellcode:
Das behebt den Fehler, allerdings gibt's dann nen anderen, da bin ich noch dran.
initialization
RegisterClass(TTabSheet); finalization UnRegisterClass(TTabSheet); |
Re: PageControl fehler bei ReadComponentRes
Ich habe da schon sowas stehen werde mir das aber nochmal ansehen ändern und ein bischen probieren.
|
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... |
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. |
Re: PageControl fehler bei ReadComponentRes
Zitat:
Zitat:
|
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. |
Re: PageControl fehler bei ReadComponentRes
bitte neue(s) frage/thema neuer threat...schau dir mal (SDK) ShellExecuteEx und SHELLEXECUTEINFO an
|
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