![]() |
Eigenschaft existiert nicht?!
Hallo!
Folgendes problem, ich schreib momentan eine Komponente, sieht imoment wie folgt aus:
Code:
Wenn ich jedoch jetzt die Kompo installiere (ist zwar noch nicht 100%ig fertig, nur zum testen) und in die Property Path z.B.: C:\ eintrage erhalte ich eine FehlerMsg, die sagt: Eigenschaft existiert nicht, wenn ich jetzt versuche die Property über den sourcecode anzusprechen wird sie erst gar nicht mehr angezeigt in dem dropdown fenster(das sich nach ner weile nach dem . öffnet, ka wie man das nennt). Hatte jemand von euch schon mal das Problem und kennt eine Lösung???
unit SimpleFileView;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls; type TSimpleFileView = class(TCustomListView) private { Private-Deklarationen } fPath: String; procedure SetPath(Path: String); procedure ListDirectory(Dir: String); protected { Protected-Deklarationen } public { Public-Deklarationen } constructor Create(aOwner: TComponent); override; published { Published-Deklarationen } property Path: String read fPath write SetPath; property Align; property BorderStyle; property Color; property Ctl3D; property ColumnClick default False; property Columns; property Cursor; property Dragmode; property DragCursor; property Enabled; property Font; property Height; property HideSelection default False; property Hint; property IconOptions; property Items; property Left; property MultiSelect default False; property Name; property ParentColor; property ParentFont; property ParentShowHint; property PopupMenu; property ReadOnly default False; property ShowColumnHeaders default True; property ShowHint; property TabOrder; property TabStop; property Tag; property Top; property ViewStyle default vsReport; property Visible; property Width; property OnChange; property OnChanging; property OnClick; property OnColumnClick; property OnCompare; property OnDblClick; property OnDeletion; property OnDragDrop; property OnDragOver; property OnEdited; property OnEditing; property OnEndDrag; property OnEnter; property OnExit; property OnInsert; property OnKeyDown; property OnKeyPress; property OnKeyUp; property OnMouseDown; property OnMouseMove; property OnMouseUp; property OnStartDrag; {$IFDEF D3_OR_HIGHER} property HotTrack; property RowSelect default False; {$ENDIF} {$IFDEF D4_OR_HIGHER} property Anchors; property BiDiMode; property Constraints; property HotTrackStyles; {$ENDIF} end; procedure Register; implementation procedure Register; begin RegisterComponents('CR-Soft', [TSimpleFileView]); end; constructor TSimpleFileView.Create(aOwner: TComponent); var Column: TListColumn; begin inherited Create(aOwner); ViewStyle := vsReport; RowSelect := True; ReadOnly := True; Column := Columns.Add; Column.Caption := 'Dateiname'; Column.Width := Width - 30; IconOptions.WrapText := True; ColumnClick := False; If not (csDesigning in ComponentState) then ListDirectory(fPath); end; procedure TSimpleFileView.ListDirectory(Dir: String); var Search: TSearchRec; Item: TListItem; begin Items.Clear; If Dir[Length(Dir)] <> '\' then Dir := Dir + '\'; if FindFirst(Dir + '*.*', faDirectory, Search) = 0 then begin repeat If ((Search.Attr AND faDirectory) = faDirectory) AND (Search.Name <> '.') then begin Item := Items.Add; // if fBrackets then Item.Caption := '['+Search.Name+']' // else // Item.Caption := Search.Name; end; until FindNext(Search) <> 0; FindClose(Search); end; if FindFirst(Dir + '*.*', $23, Search) = 0 then begin repeat If (Search.Attr <> faDirectory) then begin Item := Items.Add; Item.Caption := Search.Name // Item.Caption := Copy(ExtractFileName(Search.Name), 1, Length(ExtractFileName(Search.Name)) - 4); end; until FindNext(Search) <> 0; FindClose(Search); end; end; procedure TSimpleFileView.SetPath(Path: String); begin if fPath <> Path then fPath := Path; if not (csDesigning in ComponentState) then ListDirectory(fPath); end; end. mfg phlux |
Kann es sein, dass du mit 2 SimpleFileView.dcu Dateien arbeitest, einer alten und einer neuen?
|
Moin Phlux,
also mit einer kleinen Ausnahme tut's Deine Kompo bei mir. Den genannten Fehler kann ich nicht nachvollziehen. Nur das
Delphi-Quellcode:
im constructor wird nicht funktionieren (bzw. tuts nicht) da zu diesem Zeitpunkt fPath noch nicht gesetzt ist.
If not (csDesigning in ComponentState) then
ListDirectory(fPath); Was auch garnicht notwendig ist, denn sollte Path im OI gesetzt worden sein, so wird bei der Initialisierung dieser Wert aus der Formularresource ausgelesen und in Path gesetzt. Da hierfür ja die Routine SetPath verwendet wird, wird ListDirectory in dieser Routine ausgeführt. |
@jbg: hab jetzt mal zur sicherheit die dcu datei aus dem lib verzeichniss gelöscht, mal schaun
@chris: jepp, danke scheint mir entfallen zu sein ;), nur wenn ich jetzt fPath im Constructor setze und if csDesigning... rausnehme kommt nur die nachricht " Element '' hat kein übergeordnetes Fenster ", ich versuch jetzt mal ne kombinatio aus beidem. Der sh** Fehler besteht aber immer noch, ich glaub ich fang die Kompo mit anderem Namen nochmal neu an! War ja noch nicht soviel :( |
Ich kenne mich mit der Komponentenentwicklung so gut wie überhaupt nicht aus, aber versuch es mal so: Schreibe jede Variable/Property/Funkion, die eine Instanz der Kompo ist so:
Code:
Chris
self.Eigenschaft := Irgendwas;
self.Variable := self.Eigenschaft; |
Zitat:
|
Moin Phlux,
ich hatte nur die beiden genannten Zeilen weggelassen, und die Kompo hat ansonsten keine Probleme gemacht. |
Das einzige Problem ist jetzt noch, wenn ich im Constructor ListDirectory(fPath) ausführe, meckert Delphi das : Element " hat kein übergeordnetes Fenster! Habe es auch schon ausprobiert in der Prozedur Loaded und CreateWnd die Prozedur ListDirectory auszuführen, haut aber immer noch nicht hin :(
|
Moin Phlux,
mit was soll ListDirectory denn im Constructor aufgerufen werden? Der Pfad, der im OI gesetzt wird steht noch nicht zur Verfügung, so dass Du einen Standardpfad angeben musst, z.B. aus paramstr(0) extrahiert. Was mir auch nicht klar ist: Wozu soll ListDirectory im Constructor aufgerufen werden? Wird Pfad im OI nicht gesetzt wird, völlig korrekt, nichts angezeigt. Wird der Pfad dort gesetzt, so wird auch das angezeigt, was im OI gesetzt wurde. |
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:47 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