Bonjour,
Je me crée un logiciel d'édition de pages html pour mon usage personnel. Cependant, sous Linux Mint 21.3, je rencontre des problèmes que je n'ai pas avec Windows 7 (installé dans une VM).

Pour le contexte du logiciel, les SynEdit et TabSheet sont créés dynamiquement dans un PageControl qui lui est déjà présent.
Le problème que je rencontre, c'est que lorsque j'ouvre un fichier html mon application s'ouvre dans un répertoire nommé "Récemment utilisés". Si j'ouvre un deuxième fichier html, il s'ouvre encore dans "Récemment utilisés", alors que je souhaiterais qu'il conserve en mémoire le dossier d'origine.
Ensuite, quand je veux l'enregistrer, mon logiciel me propose par défaut le répertoire de l'application - il faut que je lui spécifie le chemin du fichier.

Serait-il possible que sous Mint, je puisse garder le chemin d'ouverture du fichier pour l'enregistrement?

Voici les codes des boutons pour ouvrir et enregistrer :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
 
// Bouton ouvrir HTML, HTML, CSS XML
procedure TForm1.btnOuvrirClick(Sender: TObject);
var
  openDialog: TOpenDialog;
  newTabSheet: TTabSheet;
  synEdit: TSynEdit;
  fileExt: string;
  highlighter: TSynCustomHighlighter;
  fileContent: TStringList;
begin
  openDialog := TOpenDialog.Create(nil);
  try
    openDialog.Filter := 'HTML Files|*.html|XHTML Files|*.xhtml|CSS Files|*.css|XML Files|*.xml|All Files|*.*';
    if openDialog.Execute then
    begin
      // Créer un nouvel onglet
      newTabSheet := TTabSheet.Create(PageControl2);
      // Utiliser UTF8Decode pour décodage, au cas où le nom du fichier contient des caractères spéciaux
      newTabSheet.Caption := UTF8Decode(ExtractFileName(openDialog.FileName));
      newTabSheet.PageControl := PageControl2;
      // Créer un nouveau composant SynEdit dans le nouvel onglet
      synEdit := TSynEdit.Create(newTabSheet);
      synEdit.Parent := newTabSheet;
      synEdit.Align := alClient;
      // Déterminer l'extension du fichier
      fileExt := LowerCase(ExtractFileExt(openDialog.FileName));
      // Sélectionner le bon analyseur de coloration syntaxique en fonction de l'extension
      if fileExt = '.html' then
      begin
        highlighter := SynHTMLSyn1;
      end
      else if fileExt = '.xhtml' then
      begin
        highlighter := SynHTMLSyn1;
      end
      else if fileExt = '.css' then
      begin
        highlighter := SynCssSyn1;
      end
      else if fileExt = '.xml' then
      begin
        highlighter := SynXMLSyn1;
      end
      else
      begin
        // Par défaut, utilisez un analyseur générique pour les autres types de fichiers
        highlighter := TSynCustomHighlighter.Create(synEdit);
      end;
      // Appliquer l'analyseur de coloration syntaxique au composant SynEdit
      synEdit.Highlighter := highlighter;
      // Charger le contenu du fichier en spécifiant l'encodage d'origine (Windows-1252)
      //synEdit.Lines.LoadFromFile(openDialog.FileName, TEncoding.GetEncoding(1252));
      // Réinitialiser le contenu de TSynEdit (effacer le contenu chargé avec Windows-1252)
      //synEdit.Clear;
      // Charger le contenu du fichier en spécifiant l'encodage UTF-8
      synEdit.Lines.LoadFromFile(openDialog.FileName, TEncoding.UTF8);
      //Sélectionner le nouvel onglet
      PageControl2.ActivePage := newTabSheet;
    end;
  finally
    openDialog.Free;
  end;
end;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
 
//Bouton Sauver
procedure TForm1.btnSaveClick(Sender: TObject);
var
  currentTabSheet: TTabSheet;
  synEdit: TSynEdit;
  filePath: string;
  fileName: string;
  originalFileName: string;
begin
  // Récupérer l'onglet actif
  currentTabSheet := PageControl2.ActivePage;
 
  // Vérifier si un onglet est actif
  if Assigned(currentTabSheet) then
  begin
    // Récupérer le composant SynEdit dans l'onglet actif
    synEdit := FindSynEditInTabSheet(currentTabSheet);
 
    // Vérifier si le composant SynEdit a été trouvé
    if Assigned(synEdit) then
    begin
      // Stocker le nom du fichier actif avant de le modifier
      originalFileName := currentTabSheet.Caption;
 
      // Configurer le SaveDialog avec l'extension appropriée
      SaveDialog1.DefaultExt := ExtractFileExt(originalFileName);
 
      // Assigner le nom du fichier actuel à la boîte de dialogue
      SaveDialog1.FileName := originalFileName;
 
      // Afficher la boîte de dialogue d'enregistrement
      if SaveDialog1.Execute then
      begin
        // Obtenez le nom du fichier avec l'extension appropriée
        fileName := SaveDialog1.FileName;
 
        // Sauvegardez le contenu de SynEdit dans le fichier
        synEdit.Lines.SaveToFile(fileName);
 
        // Mettez à jour le titre de l'onglet avec le nouveau nom de fichier
        currentTabSheet.Caption := ExtractFileName(fileName);
      end
      else
      begin
        // Si l'utilisateur annule, restaurez le nom du fichier actif
        currentTabSheet.Caption := originalFileName;
      end;
    end;
  end;
end;
Vous noterez que j'ai quelques lignes de codes cachées en commentaire, c'est tout à fait normal. Je nettoierais ça plus tard.

Comme je ne rencontre pas ce problème sous Windows, je pense que ça vient de Mint. Il faudrait donc contourner le système de Mint (certains logiciels y arrivent).

Je précise que je suis débutant. Si l'on me donne un bout de code sans en préciser le contexte (l'endroit où il faut l'écrire), je ne comprendrais pas.
J'utilise Lazarus 3.0RC1.