![]() |
Delphi-Version: 10.3 Rio
Seltsame Pfadbearbeitung
Hi zusammen
Mit folgender Prozedur will ich eine Inidatei erstellen:
Delphi-Quellcode:
Dabei liefert mir mein ShowMessage:
function TOpenFileFrame.ChangeFolderIcon(LDeskIniPath, LBmpFile: String; IconIndex: Integer): Boolean;
var desktopini: TIniFile; LDesktopIniParent : String; begin LDeskIniPath := IncludeTrailingPathDelimiter(LDeskIniPath); [B]LDesktopIniParent := ExtractFilePath(LDeskIniPath);[/B] ShowMessage('LDeskIniPath := ' + LDeskIniPath +sLineBreak+ 'LDesktopIniParent := ' + LDesktopIniParent +sLineBreak+ '**************************************'); try if DirectoryExists(LDesktopIniParent) then begin desktopini := TIniFile.Create(LDeskIniPath); try desktopini.WriteString('.ShellClassInfo', 'IconFile', LBmpFile); desktopini.WriteInteger('.ShellClassInfo', 'IconIndex', IconIndex); finally desktopini.Free; Result := true; end; end else begin Application.MessageBox('Error: The Foldericon could not change!' + #13#10 + 'Directory doesn''t exist!', 'Error', 16 + 0); // Warnkreuz + OK-Button Result := false; exit; end; except Application.MessageBox('Error: The Foldericon could not change!', 'Error', 16 + 0); // Warnkreuz + OK-Button Result := false; exit; end; end;
Delphi-Quellcode:
folgendes:
ShowMessage('LDeskIniPath := ' + LDeskIniPath +sLineBreak+
'LDesktopIniParent := ' + LDesktopIniParent +sLineBreak+ '**************************************'); Zitat:
Diese Zeile:
Delphi-Quellcode:
LDesktopIniParent := ExtractFilePath(LDeskIniPath);
sollte, wenn ich die Help nicht komplett falsch verstanden habe, den Inhalt von LDesktopIniParent so setzen: Zitat:
Gruss Delbor PS: Die Funktion entstand aufgrund dieses ![]() |
AW: Seltsame Pfadbearbeitung
.. was steht denn in dem Parameter/Argument LDeskIniPath?
Dem Parameter fügst Du noch ein "\" am Ende hinzu. ExtractFilePath gibt Dir alles bis zum letzten "\" zurück. Grüße Klaus |
AW: Seltsame Pfadbearbeitung
Delphi-Quellcode:
.. schaumal ob es so funktioniert.
function TOpenFileFrame.ChangeFolderIcon(LDeskIniPath, LBmpFile: String; IconIndex: Integer): Boolean;
var desktopini: TIniFile; LDesktopIniParent : String; begin LDesktopIniParent := ExtractFilePath(LDeskIniPath); LDeskIniPath := IncludeTrailingPathDelimiter(LDeskIniPath); ShowMessage('LDeskIniPath := ' + LDeskIniPath +sLineBreak+ 'LDesktopIniParent := ' + LDesktopIniParent +sLineBreak+ '**************************************'); try if DirectoryExists(LDesktopIniParent) then begin desktopini := TIniFile.Create(LDeskIniPath+'deskptop.ini'); try Das von Dir verlinkte Beispiel weicht von Deiner Implementierung ab. Grüße Klaus |
AW: Seltsame Pfadbearbeitung
Hi Klaus01
LDeskIniPath wird in der aufrufenden Prozedur initialisiert:
Delphi-Quellcode:
Gruss
LDeskIniPath := MainPage.ProjectPath + 'desctop.ini';
ShowMessage('LDeskIniPath := ' + LDeskIniPath +sLineBreak+ 'LDeskIniPath := ' + ExtractFilePath(LDeskIniPath) +sLineBreak+ '**************************************'); LBmpFile:= LDeskIniPath + 'desctop.bmp'; LBitmap.SaveToFile(LBmpFile); LiconIndex := 0; ChangeFolderIcon(LDeskIniPath, LBmpFile, LiconIndex); Delbor |
AW: Seltsame Pfadbearbeitung
.. gut was dann passiert:
Pfad +'desktop.ini' hier trailingPathDelimiter anfügen Pfad+'desktop.ini\' hier ist also eine Pfad aus dem Dateinamen geworden. extractFilePath(Pfad+'desktop.ini\') -> Pfad+'desktop.ini\' Grüße Klaus |
AW: Seltsame Pfadbearbeitung
Hi Klaus01
Showmessage liefert jetzt korrekt: [Window Title] HilfeTest-Projekt [Content] LDeskIniPath := F:\Embarcadero Project Corner\Delphi Tokio TestCorner\HTML-HelpCorner\HelpTestApp\desctop.ini\ LDesktopIniParent := F:\Embarcadero Project Corner\Delphi Tokio TestCorner\HTML-HelpCorner\HelpTestApp\ ************************************** [OK] Entsprechend deinem Beispiel habe ich lediglich zwei Codezeilen vertauscht. Danke für deine Info: Zitat:
Gruss Delbor |
AW: Seltsame Pfadbearbeitung
Deshalb benutzen wir immer const Parameter. Da kann man dann nicht aus Versehen einen der übergebenen Parameter ändern, nur um sich dann zu wundern, dass er irgendwo in der Methode nicht mehr seinen Wert hat.
(Und nebenbei ist es in einigen Fällen schneller.) Sprich:
Delphi-Quellcode:
Wobei wir auch keine Objektreferenzen als var-Parameter verwenden würden.
function TOpenFileFrame.ChangeFolderIcon(const ADeskIniPath, ABmpFile: String; const AIconIndex: Integer): Boolean;
var ADesktopIni: TIniFile; const ADesktopIniParent: String; |
AW: Seltsame Pfadbearbeitung
Hi jaenicke
Auch dir vielen Dank - die Sache mit den Const-Parametern sollte ich mir wohl angewöhnen. Zitat:
Delphi-Quellcode:
Die Parameter heissen hier genau gleich wie die lokalen Vaiablen in der aufrufenden Methode, in dem sie mit einem 'L' beginnen anstatt mit einem 'A'.
function TOpenFileFrame.ChangeFolderIcon(LDeskIniPath, LBmpFile: String; IconIndex: Integer): Boolean;
var desktopini: TIniFile; LDesktopIniParent : String; Vom Styleguid abweichend ist auch mein Umgang mit der Deklaration lokaler Variablen: das einleitende 'var' befindet sich immer eingerückt in der ersten Zeile der lokalen Deklarationen, während die Parameterliste mit der abschliesseden Klammer und bei Funktionen der Typangabe(hier Boolean) sich auch schon mal auf 2 Zeilen erstrecken kann. Das, was du als Var-Parameter gelesen hast, ist also eigentlichschon eine lokkale Varable. Das ist sozusagen mein 'Erbe' aus Delphi-1-Tagen, macht meines Erachtens aber durchaus Sinn, da dadurch oft etliche Zeilen eingespart werden können. Andrerseits kann ich mit Konstrukten wie:
Delphi-Quellcode:
procedure foo; begin if x mod 2 = 0 then y:= a+b;end;
herzlich wenig anfangen, auch wenn dies in Pascal (noch?) möglich ist. Gruss Delbor |
AW: Seltsame Pfadbearbeitung
Oh, ja, ich sollte nicht ganz so schnell lesen. Die Einrückung ist eigentlich für zu lange Zeilen mit Parametern üblich, so dass ich die Klammerung glatt übersehen habe.
Zitat:
Wir halten uns schlicht an den Styleguide, dann gibt es auch keine Unklarheiten, der Code ist sauber strukturiert und wir können jederzeit den Codeformatter ausführen (in den aktuellen Quelltexten meistens ohne Änderungen). |
AW: Seltsame Pfadbearbeitung
Hi jaenicke
Zitat:
Zitat:
Zitat:
Delphi-Quellcode:
Auf der andern Seite der Akzeptanzskala steht zB. solches:
[Prozedurkopf]
var desktopini: TIniFile; LDesktopIniParent : String; begin
Delphi-Quellcode:
Da geschieht noch rein gar nichts, trotzdem ist ein durchschnittlicher Bildschirm schon zu einem guten Teil 'zugemüllt'.
procedure TOpenFileFrame.TVFilesExplorerEdited(Sender: TObject; Node: TTreeNode;
var S: string); var NameRec: PNameRec; LBitMap: TBitmap; LiconIndex :Integer; LIsdirectory, LIsDB: Boolean; ImageList : TDataObjectlist<TBitmap>; LCaption, LBmpFile, LRealName, LDeskIniPath: string; begin Gruss Delbor |
AW: Seltsame Pfadbearbeitung
Zitat:
Delphi-Quellcode:
Und wenn einem das zu viele lokale Variablen sind, sollte man über einen Split in mehrere Methoden nachdenken.
procedure TOpenFileFrame.TVFilesExplorerEdited(Sender: TObject; Node: TTreeNode;
var S: string); var NameRec: PNameRec; LBitMap: TBitmap; LiconIndex :Integer; LIsdirectory: Boolean; LIsDB: Boolean; ImageList : TDataObjectlist<TBitmap>; LCaption: string; LBmpFile: string LRealName: string; LDeskIniPath: string; begin Abgesehen davon müssen die Variablendeklarationen auch gar nicht sichtbar sein. Ein Mouse-Hover zeigt schließlich auch den Typ an. |
AW: Seltsame Pfadbearbeitung
Hi Uwe Raabe
Zitat:
Zitat:
Gruss Delbor |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:43 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 by Thomas Breitkreuz