Avatar billede hestetoften Nybegynder
12. november 2005 - 22:32 Der er 2 kommentarer og
1 løsning

Fejl i mappeGennemLøb

Er der nogen der kan sige mig hvad der er galt med denne del af en kode til et pgr.

Det er ikke så meget resultatet af gennemløbet men hvorfor den fejler (Error msg) under gennemløb. ??

KODE:

unit MappeGennemLobU;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, Menus, ShellAPi, Buttons, StdCtrls, IniFiles, Registry,
  ComCtrls, ShlObj, ActiveX, ComObj, ActnList, ToolWin;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Memo1: TMemo;
    procedure StartSearch;
    procedure Button1Click(Sender: TObject);
    procedure SearchForFiles( path: string; var Value: TStringList; rec:Boolean);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  html,htmStr,style,sti,Titel,BGColor,FontName,Acolor,Ahover,linkStyle,GemAndring : string;
  AntalX, AntalIKat, taller, fixed, totCount,FontSize,ColCount : integer;
  arrText : array of string;
  arrTal : array of integer;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
  StartSearch;
  //ShowMessage('goddaw');
end;





//GetFolderLocation('favorites')
function GetFolderLocation(const FolderType: string): string;
{ Henter fra Registry den pladsering dine favoritter har }
var
SFolderKey : string;
begin
//ShowMessage('Stien i regedit er : \Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\ ??');
SFolderKey := '\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\' ;
  with TRegistry.Create do
    begin
      RootKey := HKEY_CURRENT_USER;
      if OpenKey(SFolderKey, true) then
      Result := ReadString(FolderType)
        else
        ShowMessage('stien "\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\" kan ikke åbnes');
      CloseKey;
      Free;
    end;
end;

function taelMapper: integer;
var
  ok,res : integer;
  srRec:    TSearchRec;
begin
res := 0;
//ShowMessage(GetFolderLocation('favorites'));
//ShowMessage('Kalder2');
ok :=0;
ok := FindFirst(GetFolderLocation('favorites')+'\*.*', faanyfile, srRec);
  while ok = 0 do
  begin
  ok := FindNext(srRec);
      if (srRec.Name <> '.') then
      if (copy(srRec.name,length(srRec.name)-3,1)) <> '.' then
      inc(res);
  end;
  FindClose(srRec);
  // ShowMessage(inttostr(res));
  //res :=9;
  Form1.Memo1.Lines.Add('TaelMapper= ' + inttostr(res)) ;
  result := res+1;


end;

function FindMappe(S:string): String;
// finder den aktuelle mappes eller fils navn ud fra url
var
  I : integer;
  res : string;
begin
i := length(S);
if s[i] = '\' then
dec(i);
while s[i] <> '\' do
begin
res := s[i] + res;
dec(i);
end;
result := res;
end;

function URLFromShortcut(const dotURL: string): string;
begin
  with TIniFile.Create(dotURL) do
  try
    try
      Result := ReadString('InternetShortcut', 'URL', '') ;
    except;
      Result := '';
    end;
  finally
    Free;
  end;
end;


procedure TForm1.StartSearch;
var
  filer:  TStringList;
  Save_Cursor:TCursor;
  antal : integer;
begin

antal := taelMapper-1;
memo1.Lines.Add('antal= '+inttostr(antal));
//ShowMessage()  ;
  SetLength(arrText, antal);//taelMapper
  SetLength(arrtal,antal);//taelMapper
  html := '';
  Save_Cursor := Screen.Cursor;
  Screen.Cursor := crHourGlass;    { Show hourglass cursor }
  try
  filer := TStringList.Create;
  try
      SearchForFiles(GetFolderLocation('favorites'), filer, True);
      //SearchForFiles('C:\Documents and Settings\larsen11\Dokumenter', filer, True);
  finally
      filer.Free;
  end;
  finally
    Screen.Cursor := Save_Cursor;  { Always restore to normal }
  end;
end;



procedure TForm1.SearchForFiles( path: string; var Value: TStringList; rec:Boolean);
var
  Filtype, kat:  string;
  srRec:    TSearchRec;
  ok,test:      Integer;
  TmpMappe, RowCol, br : string;

begin
  //Memo1.Clear;
  Filtype := '*.url';
  if path[Length(path)] <> '\' then
      path := path + '\';
  ok := FindFirst(path + filtype, faAnyFile-faDirectory, srRec);
  while ok = 0 do
  begin
      memo1.Lines.Add('findmappe= '+FindMappe(path)+' -- TmpMappe= '+ tmpmappe);

      if (srRec.Name[1] <> '.') and (srRec.Name <> '') then
        if TmpMappe <> FindMappe(path) then
        begin
          inc(taller);
          AntalIKat := 0;
          html := html + '<br>';
          TmpMappe := FindMappe(path);
          kat := '';
          // her skrives overskriften på kolonnen
          html := html + ''+#10#13+' <big><b>'+TmpMappe+'</b></big><br>';
        end;
        // her skrives linkene under overskriften
        html := html + ''+#10#13+'  <a href="'+URLFromShortcut(path+SRRec.name)+'" title="'+copy(srRec.Name,0,length(srRec.name)-4)+'">'+ copy(srRec.Name,0,length(srRec.name)-4)+'</a> &nbsp;<br>'+br ;
        //ListBox1.Items.Add('  '+srRec.Name + ' --> '+ URLFromShortcut(path+SRRec.name));
        Inc(AntalIKat);

        arrText[taller]:=  html;


//        MemoBackUp.Lines.Add(TmpMappe+','+URLFromShortcut(path+SRRec.name)+','+copy(srRec.Name,0,length(srRec.name)-4));
//        MemoBackUp.Lines.SaveToFile(ExtractFileDir(Application.ExeName) + '\DateToday.smb');

        arrTal[taller]:= AntalIKat;
      ok := FindNext(srRec);
    end;
        html:='';
        FindClose(srRec);
if rec then    // recurse sub-dirs
  begin
      if path[Length(path)] <> '\' then
        path := path + '\';
        memo1.Lines.Add('path= '+ path);
      ok := FindFirst(path +'*.*', faAnyfile, srRec);
      while ok = 0 do
      begin
        if srRec.Attr and faDirectory > 0 then    // it's a directory
            if srRec.Name[1] <> '.' then
            begin
              SearchForFiles( path + srRec.Name, Value, rec);
              end;
        ok := FindNext(srRec);
      end;
      FindClose( srRec);
  end;
end;


end.
Avatar billede doc404 Novice
13. november 2005 - 10:40 #1
Hvordan fejler den?

Og et par tips

Brug denne funktion til at hente de forskellige mapper - så behøver du ikke at være bruger specifik. Værdierne for CSIDL kan du finde her.

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/enums/csidl.asp


function GetShellFolderPath(CSIDL : integer) : string;
var
  szBuf : array[0..MAX_PATH] of char;
begin
  if SHGetFolderPath(0,CSIDL,0,0,szBuf) = S_OK then
    Result := IncludeTrailingPathDelimiter(szBuf)
  else
    Result := '';
end;

if path[Length(path)] <> '\' then path := path + '\'; kan erstattes (D7) med

path = IncludeTrailingPathDelimiter(Path);
Avatar billede hestetoften Nybegynder
15. november 2005 - 21:02 #2
Som I kan se er det mappen foretrukne det drejer sig om.
I mappen (Foretrukne) er der både filer og mapper.
Men hvis en af filerne i mappen (Foretrukne) ligger alfabetisk efter mapperne i (Foretrukne) opstår der en fejl.
Avatar billede hestetoften Nybegynder
14. januar 2006 - 07:45 #3
Lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester