Copy screenshot context help press 's'.fix asserts.

Копирование окна контекстной помощи в буфер обмена по нажатию 's'.
This commit is contained in:
lsv 2026-03-04 11:53:56 +05:00
parent e54809faf2
commit 2989801a84
4 changed files with 47 additions and 2 deletions

View file

@ -79,6 +79,15 @@ file(GLOB_RECURSE SOURCES
##########################################################
add_executable(${PROJECT_NAME} )
# После сборки — разделить символы и приложение
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E echo "Extracting debug symbols..."
COMMAND objcopy --only-keep-debug ${PROJECT_NAME} ${PROJECT_NAME}.debug
COMMAND objcopy --strip-debug ${PROJECT_NAME}
COMMAND objcopy --add-gnu-debuglink=${PROJECT_NAME}.debug ${PROJECT_NAME}
COMMENT "Split debug symbols into separate .debug file"
VERBATIM
)
target_compile_definitions(${PROJECT_NAME} PRIVATE $<$<CONFIG:Debug>:_DEBUG>)
target_sources(${PROJECT_NAME} PUBLIC pgAdmin3.cpp ${SOURCES})
if(CROSS_COMPILE STREQUAL "Windows")

View file

@ -522,7 +522,7 @@ int ctlSQLGrid::CopyTableToHtml(wxString htmlquery) {
if (isRowsArray) rowPos = rows.Item(i);
if (GetRowSize(rowPos) == 0) continue;
htm += "<tr>\n";
htm += wxString::Format("<td id=\"cn\"><pre>%d</pre></td>", rowPos + 1);
htm += wxString::Format("<td id=\"cn\"><pre>%ld</pre></td>", rowPos + 1);
for (int c = 0; c < cols.Count(); c++) {
wxString text = GetCellValue(rowPos, cols[c]);
htm += wxString::Format("<td id=\"c%d\"><pre>%s</pre></td>", c, escapeHtml(text, true));

View file

@ -192,6 +192,42 @@ public:
if (event.GetKeyCode() == WXK_UP) htmlWindow->ScrollLines(-1);
if (event.GetKeyCode() == WXK_HOME) htmlWindow->ScrollPages(-1000);
if (event.GetKeyCode() == WXK_END) htmlWindow->ScrollPages(1000);
//std::cout << "key code " << event.GetKeyCode() << " " << std::endl;
if (event.GetKeyCode() == 'S') {
wxSize clientSize = this->GetClientSize();
// Создаём битмап того же размера
wxBitmap bitmap(clientSize.x, clientSize.y, -1); // -1 — лучший формат для экрана
// Создаём DC для рисования в битмап
wxMemoryDC memDC;
memDC.SelectObject(bitmap);
// Очищаем фон (опционально, если окно не полностью перерисовано)
memDC.SetBackground(*wxWHITE_BRUSH);
memDC.Clear();
// Используем wxClientDC для чтения содержимого окна
wxClientDC clientDC(this);
// Переносим данные с clientDC в memDC (копируем прямоугольник)
// Важно: координаты — относительно окна!
memDC.Blit(0, 0, clientSize.x, clientSize.y, &clientDC, 0, 0);
// Освобождаем DC
memDC.SelectObject(wxNullBitmap);
// Открываем буфер обмена
if (wxTheClipboard->Open())
{
// Добавляем данные (можно добавить несколько форматов, если нужно)
wxDataObjectComposite* dataobj = new wxDataObjectComposite();
dataobj->Add(new wxBitmapDataObject(bitmap));
wxTheClipboard->SetData(dataobj);
wxTheClipboard->Close();
}
else
{
wxLogError("No open clipboard.");
}
}
});

View file

@ -429,7 +429,7 @@ bool pgAdmin3::OnInit()
dialogTestMode = true;
// Setup the image handlers and appearance factory before we do any GUI or config stuff
::wxInitAllImageHandlers();
//::wxInitAllImageHandlers();
appearanceFactory = new pgAppearanceFactory();