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;Vous noterez que j'ai quelques lignes de codes cachées en commentaire, c'est tout à fait normal. Je nettoierais ça plus tard.
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;
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.
Partager