Delphi-PRAXiS
Seite 1 von 2  1 2      

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 Installation einer Komponente (https://www.delphipraxis.net/75507-installation-einer-komponente.html)

smepal 20. Aug 2006 15:17


Installation einer Komponente
 
Also ich hab da ein Problem:
Ich habe mir eine Komponente geschrieben:
Delphi-Quellcode:
unit playlist;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Grids, StdCtrls, Buttons, ExtCtrls;

type
  TInfos = class
    Filename:string;
  public
    property Str:string read Filename write Filename;
  end;
type
 TTracks = record
  Title: String;
  time: String;
  path: String;
  no: Integer;
 end;




type
  TPlayList = class(TStringGrid)

  private
    function GetTracks(index:integer):TTracks; { Private-Deklarationen }
  protected

    { Protected-Deklarationen }
  public
  constructor Create (AOwner: TComponent); override;
  Procedure KeyDown(var Key: Word; Shift: TShiftState); override;
    { Public-Deklarationen }


  published
   procedure DeleteRow (RowNumber : Integer);
   procedure addFile (pfad, dauer, titel: String);
   procedure openM3u (m3u: String);
   procedure savem3u (m3u: String);
   property Track[index:integer]:TTracks read GetTracks;
   { Published-Deklarationen }
  end;

procedure Register;



implementation

constructor TPlaylist.Create(AOwner: TComponent);
var option: TGridOptions;
begin
inherited Create (AOwner);
options := [gorowselect] + [gocolsizing]+ [gofixedvertline] + [gofixedhorzline] + [govertline] + [gohorzline];

rowcount := 2;
 colcount := 3;
 fixedcols := 0;
 fixedrows := 1;
 defaultrowheight := 15;
 rowheights[0] := 18;
Cells[1,0] := 'Title';
Cells[2,0] := 'Length';
Cells[0,0] := 'No';
ColWidths[0] := 30;
colwidths[1] := 200;
colwidths[2] := 50;


end;

function TPlaylist.GetTracks (index: Integer): TTracks;
begin
Result.no := strtoint(cells[0, index]);
Result.Title:= cells[1, index];
  Result.time := cells[2, index];
  Result.path := cells[3, index];

end;

procedure TPlaylist.savem3u(m3u: String);
var i: Integer;
list: TStringlist;
begin
list := TStringlist.Create;
list.Add('#EXTM3U');
for i := 1 to rowcount-1 do
begin
list.Add('#EXTINF:'+cells[2,i]+','+ cells[1,i]);
list.Add(cells[3,i]);
end;
list.SaveToFile(m3u);
list.Free;
end;


procedure TPlaylist.openM3u (m3u: String);
var i, position: Integer;
 list: Tstringlist;
 path, time, title: String;
begin
list := TStringlist.Create;
list.LoadFromFile(m3u);

if list.Strings[0] = '#EXTM3U' then
   begin
      for i := 0 to list.Count - 1 do
        begin
        position := ansipos ('#EXTINF:' , list.Strings[i]);
                 if position = 1 then
                 begin
                 time := copy(list.strings[i],9,3);
                 title := copy(list.strings[i],13,1000);
                 path := list.Strings[i+1];
                 addfile(path,time,title);
                 end;
        end;
end;
end;

procedure TPlaylist.addFile (pfad, dauer, titel: String);
var i: Integer;
mo: TInfos;
begin
rowcount := rowcount + 1;




mo:=TInfos.create;
    mo.Filename:='';
    Objects[rowcount-2,3]:=mo;


cells[1, rowcount-2] := titel;
cells[2, rowcount-2] := dauer;
cells[0,rowcount-2] := inttostr(rowcount - 2);
cells[3,rowcount-2] := pfad;

end;

procedure Tplaylist.DeleteRow(RowNumber : Integer);
var
i : Integer;
begin



  for i := RowNumber to RowCount - 2 do
    Rows[i].Assign(Rows[i+ 1]);


  Rows[RowCount-1].Clear;
  RowCount := RowCount - 1;
 for i := 1 to rowcount do
 cells[0,i] := inttostr(i);
end;

procedure TPlaylist.KeyDown(var Key: Word; Shift: TShiftState);
begin
if key = vk_delete then
   if (row <> 0) then
      deleterow(row);
end;

procedure Register;
begin
  RegisterComponents('Standard', [TPlayList]);
end;




end.
Bei Delphi 3 kann ich sie ohne Probleme installieren und verwenden!
Bei Delphi 2005 PE meckert er bei dieser Zeile:

Delphi-Quellcode:
property Track[index:integer]:TTracks read GetTracks;
Zitat:

[Fehler] playlist.pas(45): E2188 Published-Eigenschaft 'Track' kann nicht vom Typ ARRAY sein

Ich krieg das einfach nicht hin!

SirThornberry 20. Aug 2006 16:32

Re: Installation einer Komponente
 
du Darfst keine Array-Properties im Published-Teil haben. Mag sein das es unter Delphi3 erlaubt ist, aber im Objectinspektor dürftest du es trotzdem nicht zu gesicht bekommen weil es nicht unterstützt wird.
Die Lösung des Problems ist einfach: Verschieb das Property in den Public-Teil

smepal 20. Aug 2006 18:27

Re: Installation einer Komponente
 
irgendwie kann ich auf die im published teil vereinbarten proceduren und auf die im public vereinbarten proceduren und property nicht zugreifen!
Bei Delphi 3 gehts!

SirThornberry 20. Aug 2006 18:48

Re: Installation einer Komponente
 
Proceduren, Funktionen etc. gehören nicht in den Published-Teil. Warum hast du die Proceduren im Published-Teil?
Und was heißt "ich kann nicht darauf zugreifen"? Welche Fehlermeldung kommt? Mir scheint es als ob du die Bedeutung von Public, Published etc. nicht kennst.

Meflin 20. Aug 2006 18:48

Re: Installation einer Komponente
 
Zitat:

Zitat von smepal
irgendwie kann ich auf die im published teil vereinbarten proceduren und auf die im public vereinbarten proceduren und property nicht zugreifen!

Auf public/published propertys kann man *immer* zugreifen. Also machst du irgendwas falsch. Ohne uns zu sagen was du machst, kann ich dir aber auch nicht sagen was du falsch machst...


Bernhard Geyer 20. Aug 2006 19:24

Re: Installation einer Komponente
 
Zitat:

Zitat von SirThornberry
Proceduren, Funktionen etc. gehören nicht in den Published-Teil. Warum hast du die Proceduren im Published-Teil?

Wird zwar vermutlich vom Fragesteller nicht so gedacht sein, aber wenn eine Procedure/Funktion im Published-Teil vorhanden ist sind RTTI-Infos vorhanden die man Ausnutzen kann. Für DUnit ist das z.B. nötig.

smepal 20. Aug 2006 20:51

Re: Installation einer Komponente
 
Also ich habe jetzt die Kompo bei Delphi 2005 PE erfolgreich installiert.
Wenn ich jetzt bei Delphi 3
Delphi-Quellcode:
playlist1.//...
eingebe kommt eine Dropdownliste mit diversen Auswahlmöglichkeiten. Unteranderem mit den von mir im Published Teil vereinbarten Funktionen.

Bei Delphi 2005 PE kommt diese Liste auch doch fehlen die von mir neu vereinbarten Funktionen!

mkinzler 20. Aug 2006 20:54

Re: Installation einer Komponente
 
De- und installiere das Package mal neu.

smepal 20. Aug 2006 21:04

Re: Installation einer Komponente
 
Habe ich gerade getan!
Erfolglos! :pale: :pale: :pale:

Meflin 20. Aug 2006 23:46

Re: Installation einer Komponente
 
Zitat:

Zitat von smepal
Habe ich gerade getan! Erfolglos!

Wenn wir jetzt mal davon absehen, dass Prozeduren und Funktionen nicht in den published, sondern in den public Teil gehören, wie hier bereits erwähnt wurde, dann würde ich einfach mal probieren ob es trotzdem funktioniert, auch wenn die funktionen in der Code-Vervollständigung nicht auftauchen. Evtl ist auch deine Unit falsch eingebunden bzw der Suchpfad nicht gesetzt. Und wenn das nichts Hilft dann beweg das Zeug mal dahin wo es hin gehört, nämlich in den public Teil :roll:



Alle Zeitangaben in WEZ +1. Es ist jetzt 18:40 Uhr.
Seite 1 von 2  1 2      

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