diff --git a/mainApk.pas b/mainApk.pas index bbcfff3..271f421 100644 --- a/mainApk.pas +++ b/mainApk.pas @@ -470,11 +470,8 @@ begin FDetToast.TextSettings.Font.Size := 12; FDetToast.Opacity := 0.7; - // Defilant : une entree avec dix champs personnalises depasse l'ecran d'un - // telephone, et les lignes ne sont connues qu'a l'ouverture. - FDetBody := TVertScrollBox.Create(Self); - FDetBody.Parent := FLayDetail; - FDetBody.Align := TAlignLayout.Client; + // Le corps defilant n'est PAS cree ici : il est recree a chaque ouverture + // d'entree, voir ShowDetail. FDetTitle := TLabel.Create(Self); FDetTitle.Parent := FLayDetail; @@ -542,10 +539,17 @@ begin if FTotpTimer <> nil then FTotpTimer.Enabled := False; FTotpValue := nil; FTotpCode := ''; - // Detruites explicitement plutot que par DeleteChildren : le conteneur est - // un TVertScrollBox, dont les enfants comprennent ses propres barres. + // LE CONTENEUR ENTIER EST DETRUIT, pas seulement ses lignes. + // + // Reutiliser le TVertScrollBox donnait un ordre d'affichage qui ALTERNAIT : + // correct a la premiere ouverture, inverse a la suivante. Ni la convention + // d'empilement ni un Index explicite ne l'ont stabilise. Puisque la premiere + // population est fiable, on n'en fait jamais de seconde - un conteneur neuf + // par entree. Ca coute la creation d'un controle, ca supprime une classe + // entiere de bizarreries. for LRow in FRowCtls do LRow.Free; SetLength(FRowCtls, 0); + FreeAndNil(FDetBody); SetLength(FRowValues, 0); SetLength(FRowShown, 0); SetLength(FRows, 0); @@ -570,6 +574,12 @@ var begin Touch; ClearDetailRows; + // Conteneur neuf. Align=Client, donc il ne dispute sa place ni au titre + // (Top) ni au pied (Bottom) : l'ordre de creation lui est indifferent. + FDetBody := TVertScrollBox.Create(Self); + FDetBody.Parent := FLayDetail; + FDetBody.Align := TAlignLayout.Client; + FCurrent := FVault.Entry(AVaultIndex); FDetTitle.Text := FCurrent.Display; FDetToast.Text := ''; @@ -594,9 +604,13 @@ begin // Les pieces jointes ne sont pas encore enregistrables sur le telephone, // mais taire leur existence serait pire : on saurait sur le poste qu'une // entree porte un document, et pas ici. + // Taille dans l'INTITULE, pas collee au nom : un nom de fichier arabe suivi + // d'une taille latine melange deux sens de lecture dans la meme ligne, et le + // rendu bidirectionnel de FMX en fait n'importe quoi. Separes, chacun se + // lit dans son sens. for I := 0 to High(FCurrent.Attachments) do - Add('Piece jointe', FCurrent.Attachments[I].FileName + ' ' + - HumanSize(FCurrent.Attachments[I].SizeBytes), False); + Add('Piece jointe - ' + HumanSize(FCurrent.Attachments[I].SizeBytes), + FCurrent.Attachments[I].FileName, False); Add('Dossier / etiquettes', LMeta, False); // Le sous-type n'existe que pour les modeles (carte, cle SSH, serveur...) ;