From bbbc7f5a08d598f4953555a181ef459c165ac714 Mon Sep 17 00:00:00 2001 From: Msystech Date: Wed, 19 Aug 2026 10:36:38 +0900 Subject: [PATCH] =?UTF-8?q?=EC=9A=94=EC=95=BD=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=ED=99=98=EC=9E=90=EB=A5=BC=20=EB=91=90=20=EB=B2=88=20=EC=A0=81?= =?UTF-8?q?=EC=A7=80=20=EC=95=8A=EA=B3=A0,=20=ED=9D=90=EB=A6=B0=20?= =?UTF-8?q?=EA=B8=80=EC=94=A8=EB=A5=BC=20=ED=91=9C=EB=A9=B4=20=EB=8B=A8?= =?UTF-8?q?=EC=9C=84=EB=A1=9C=20=EC=9E=A1=EB=8A=94=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## ① 요약이 환자를 두 번 적고 있었다 아래 버튼이 이미 "환자 해제 — 강한(0001381872) · 외래 2019-03-28 09:22 · 기준 …" 을 그대로 보여 주는데 요약도 같은 것을 다시 적었다. 두 줄로 늘어 결과 표를 밀어내고, 화면에 환자 이름이 필요 이상으로 여러 번 남았다. 환자가 있을 때는 침묵한다 — 버튼이 이미 말한다. 없을 때만 "변수 NULL — 구문만 검사" 를 남긴다(그 결과는 값이 아니라는 뜻이고, 그건 버튼 글자로는 알 수 없다). 빈 조각은 걸러 낸다 — 안 걸러 내면 "성공 · · 경고" 처럼 가운뎃점이 떠 있는다. ## ② 앞 수정이 부족했다 — 표면마다 경계가 따로 있다 카드 DockPanel 에만 힌트를 걸어 두고 고쳤다고 했는데 정작 SQL 글자는 계속 뭉개졌다. 본문은 SqlHighlightLayer 가 그리고 그 사이에 또 다른 중간 서피스가 있으며, 치환 변수 목록은 ListBox 템플릿 안에 ScrollViewer 를 품고 있다 — 카드에 건 힌트는 그 바깥이라 듣지 않는다(진단 표본 I 가 정확히 그 경우다). - SQL 편집 영역: 불투명 B.Surface 를 가진 안쪽 Border 에 힌트 - 검증 결과 창(TrialPane): 배경 + 힌트 - 치환 변수 목록: ItemsPanel 을 불투명하게 만들어 ScrollViewer 안쪽에 힌트(표본 J). VirtualizingStackPanel 을 쓴다 — StackPanel 로 바꾸면 변수 120개가 전부 실체화된다. ## 게이트가 초록불인데 화면만 틀린 것을 또 만들지 않기 위해 앞 커밋에서 실제 창 표본을 넣었지만 카드 제목만 쟀다. 제목은 켜졌고(150) 본문은 꺼져 있었는데 게이트는 통과했다 — 같은 함정을 한 번 더 밟았다. 사람이 실제로 들여다보는 표면을 다 재도록 바꿨다: G 카드 제목 색번짐 150 H SQL 본문 색번짐 8,114 I 치환 변수 목록 색번짐 22,047 대조군(B Effect·C1 힌트를 Effect 요소에·I 힌트 바깥 ScrollViewer)은 모두 0 이므로 이 숫자들은 뜻이 있다. ## 게이트 - dotnet test 323/323 - --cleartype 실패 0 (실제 창 표본 1개 → 3개) - --query-popup 실패 0 · --edit-smoke 실패 0 · --dialog-shots FAIL 0 (변수 목록 그룹 표시 유지 확인 — ItemsPanel 교체가 그룹을 깨지 않았다) - --db-render P062 md5 8d683835f5d81e7bb41c79071d6bf954 불변 Co-Authored-By: Claude Opus 5 --- .../Diagnostics/ClearTypeCheck.cs | 39 ++++++++++++++----- .../Views/QueryEditorWindow.xaml | 24 +++++++++++- .../Views/QueryEditorWindow.xaml.cs | 17 ++++---- 3 files changed, 61 insertions(+), 19 deletions(-) diff --git a/src/SheetMe.Designer/Diagnostics/ClearTypeCheck.cs b/src/SheetMe.Designer/Diagnostics/ClearTypeCheck.cs index a8039cf..80d78ff 100644 --- a/src/SheetMe.Designer/Diagnostics/ClearTypeCheck.cs +++ b/src/SheetMe.Designer/Diagnostics/ClearTypeCheck.cs @@ -51,14 +51,34 @@ internal static class ClearTypeCheck // 위 표본들은 기법이 듣는지를 잰다(합성 도형). 그것이 통과해도 // 실제 창에 기법을 안 걸었으면 글자는 계속 뭉개진다 — 실제로 그랬다. // 쿼리 편집 창은 카드에 그림자 Effect 가 있어 그 안 글자가 전부 중간 서피스를 탄다. + // 카드 제목만 재던 것으로는 부족했다 — 제목은 켜졌는데 SQL 본문은 계속 꺼져 있었다. + // 사람이 실제로 들여다보는 표면을 다 재야 한다: 본문·변수 목록·결과 요약. var real = OpenQueryEditorForClearType(); - if (real.Window is not null && real.Target is not null) + if (real is null) { - samples.Add(("G(실제 창) 쿼리 편집 카드 안 글자", real.Target, true)); + Lines.Add("SKIP G~J(실제 창) — 창을 띄우지 못해 판정 불가"); } else { - Lines.Add("SKIP G(실제 창) — 창을 띄우지 못해 판정 불가"); + foreach (var (label, name) in new[] + { + ("G(실제 창) 카드 제목", "SQL 편집기"), + ("H(실제 창) SQL 본문", "Highlight"), + ("I(실제 창) 치환 변수 목록", "VariableList"), + }) + { + var target = name == "SQL 편집기" + ? FindTextBlock(real, name) + : real.FindName(name) as FrameworkElement; + if (target is { ActualWidth: > 0 }) + { + samples.Add((label, target, true)); + } + else + { + Lines.Add($"SKIP {label} — 대상을 찾지 못해 판정 불가"); + } + } } // 창이 보이는 것과 합성기가 그려 낸 것은 다르다 — Loaded 직후 찍으면 빈 화면을 잰다. @@ -106,11 +126,12 @@ internal static class ClearTypeCheck /// 창은 화면 안(0,0)에 띄운다. BitBlt 는 화면에 실제로 그려진 픽셀만 읽으므로 /// 화면 밖(-10000)에 두면 아무것도 못 잰다. /// - private static (Window? Window, FrameworkElement? Target) OpenQueryEditorForClearType() + private static Window? OpenQueryEditorForClearType() { try { - var editor = new Views.QueryEditorWindow("MDataTable1", "select 1 from dual") + var editor = new Views.QueryEditorWindow("MDataTable1", + "select PatChtNum, PatNam from P_PatInf where ROWNUM <= 1") { Left = 0, Top = 0, @@ -118,14 +139,12 @@ internal static class ClearTypeCheck }; editor.Show(); editor.UpdateLayout(); - // 카드 제목은 13.5px SemiBold — 뭉개짐이 가장 먼저 보이는 자리다 - var target = FindTextBlock(editor, "SQL 편집기"); - return (editor, target); + return editor; } catch (Exception ex) { - Lines.Add($"SKIP G(실제 창) — {ex.GetType().Name}: {ex.Message}"); - return (null, null); + Lines.Add($"SKIP G~I(실제 창) — {ex.GetType().Name}: {ex.Message}"); + return null; } } diff --git a/src/SheetMe.Designer/Views/QueryEditorWindow.xaml b/src/SheetMe.Designer/Views/QueryEditorWindow.xaml index 710957a..93c92a9 100644 --- a/src/SheetMe.Designer/Views/QueryEditorWindow.xaml +++ b/src/SheetMe.Designer/Views/QueryEditorWindow.xaml @@ -317,7 +317,9 @@ - +