v2026.5.47 — Vue « échelle de temps exacte » : aide à la saisie, erreurs mises en évidence, corrections de fiabilité

- Retour visuel au survol d'un créneau libre (zone surlignée + heure choisie qui suit la souris ; bulle fixe plage libre + durée disponible, jamais par-dessus un rendez-vous).
- Rendez-vous en erreur (début = fin) affiché en rouge et visible en échelle exacte ; avertissement + blocage à la création par-dessus. Interventions courtes visibles.
- Zone du nom du technicien pleine hauteur ; barre des heures collée sous la banderole.
- Fiabilité : navigation rapide entre dates, technicien retiré, deadlock de synchro du dossier, jour lu depuis le dossier d'emblée, doublon d'absence, réservations multiples le même jour, barre de progression et message de reconnexion.
- Synchro : bouton « Tester la communication », panneau réorganisé, script du poste 2026.1.8 (verrou d'index, icône persistante).
This commit is contained in:
2026-07-18 23:17:58 +02:00
parent 975a907f2b
commit 5f6802a3ab
8 changed files with 870 additions and 183 deletions
+29
View File
@@ -160,6 +160,35 @@ $ni.Icon = Get-TrayIcon
$ni.Text = 'Planification - synchronisation active'
$ni.Visible = $true
# v2026.1.8 - "toujours present si actif" : le NotifyIcon disparait quand
# explorer.exe redemarre (Windows rediffuse alors le message "TaskbarCreated").
# Sans le traiter, l'icone ne revient JAMAIS tant que le tray tourne. On ecoute
# ce message via une petite fenetre native et on re-affiche l'icone.
try {
Add-Type -ReferencedAssemblies System.Windows.Forms -TypeDefinition @'
using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;
public class PlanifTrayWatcher : NativeWindow {
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern uint RegisterWindowMessage(string lpString);
public static readonly uint TaskbarCreated = RegisterWindowMessage("TaskbarCreated");
private NotifyIcon _icon;
public PlanifTrayWatcher(NotifyIcon icon) {
_icon = icon;
this.CreateHandle(new CreateParams());
}
protected override void WndProc(ref Message m) {
if (m.Msg == TaskbarCreated && _icon != null) {
try { _icon.Visible = false; _icon.Visible = true; } catch {}
}
base.WndProc(ref m);
}
}
'@ -ErrorAction Stop
$script:trayWatcher = New-Object PlanifTrayWatcher($ni)
} catch {}
$menu = New-Object System.Windows.Forms.ContextMenuStrip
$miLog = $menu.Items.Add('Voir le journal de synchronisation')
$miLog.add_Click({ Show-LogWindow })