Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
Страниц: 1 2 3 [4] 5 6 7 ... 10
 31 
 : 30-01-2025 11:53 
Автор mikkijon - Последний ответ от RXL
Таблицу сперва надо создать, прежде чем в нее вставлять строки. Создание таблицы включает задание имени таблицы, а так же имен и типов колонок. Для SQLite можно не задавать типы, они будут по умолчанию строками.

 32 
 : 30-01-2025 09:41 
Автор mikkijon - Последний ответ от mikkijon
Приветствую Друзья!!!
   Объясните пожалуйста мне, один нюанс в табличной модели. Я уже который день голову ломаю
Начну с самого начала вернувшись обратно к своей любимой теме, "Создание СУБД"..... Изучаю я по книге: Прохорёнок Н.А. Дронов В.А. - Python 3 и PyQt6 Разработка приложений.
там указан листинг:
Код:
from PyQt6 import QtCore, QtGui, QtWidgets, QtSql
import sys
def addRecord():
    if stm.value("category") == []:
        # Вставляем пустую запись, которую пользователь сможет ввести нужные данные
        stm.insertRecord(stm.rowCount())

def deleteRecord():
    # Удаляем запись из модели
    stm.removeRecord(tv.currentIndex().row())
    stm.select

app = QtWidgets.QApplication(sys.argv)
window = QtWidgets.QWidget()
window.setWindowTitle("Добавление и удаление записи")
# Устанавливаем соединение с базой данных
con = QtSql.QSqlDatabase.addDatabase("QSQLITE")
con.setDatabaseName("data.sqlite")
con.open()
# Создаем модель
stm = QtSql.QSqlTableModel(parent=window)
stm.setTable("category")
stm.sort(1, QtCore.Qt.SortOrder.AscendingOrder)
stm.select()
# Задает заголовки
stm.setHeaderData(0, QtCore.Qt.Orientation.Horizontal, "Номер записи")
stm.setHeaderData(1, QtCore.Qt.Orientation.Horizontal, "Категория")
vbox = QtWidgets.QVBoxLayout()
tv = QtWidgets.QTableView()
tv.setModel(stm)
tv.setColumnWidth(1, 60)
tv.setColumnWidth(2, 150)
vbox.addWidget(tv)
btnAdd = QtWidgets.QPushButton("&Добавить запись")
btnAdd.clicked.connect(addRecord)
vbox.addWidget(btnAdd)
btnDel = QtWidgets.QPushButton("&Удалить запись")
btnDel.clicked.connect(deleteRecord)
vbox.addWidget(btnDel)
window.setLayout(vbox)
window.resize(400, 250)
window.show()
sys.exit(app.exec())
  Проблема в том, что если таблице нет записей то при нажатии на кнопке, "&Добавить запись", таблица не переходит в режим редактирования и вsходит сообщение:
Цитата
Process finished with exit code -1073740791 (0xC0000409).
И как не меняй функцию:
Цитата
"addRecord"

 if stm.value("category") == []:
        # Вставляем пустую запись, которую пользователь сможет ввести нужные данные
        stm.insertRecord(stm.rowCount())
или
 if stm.Null == True:
        # Вставляем пустую запись, которую пользователь сможет ввести нужные данные
        stm.insertRecord(stm.rowCount())
все равно выходит сообщение:
Цитата
Process finished with exit code -1073740791 (0xC0000409)

 33 
 : 14-01-2025 18:52 
Автор Boriska - Последний ответ от Boriska
на MFC делал так,
Код:
класс моей кнопки
class ElipsBtn :
    public CButton
{
protected:
    afx_msg void PreSubclassWindow();
    DECLARE_MESSAGE_MAP()
};

void ElipsBtn::PreSubclassWindow()
{
    CButton::PreSubclassWindow();

    // Устанавливаем элиптический регион для кнопки
    CRect rect;
    GetClientRect(&rect);

    CRgn rgn;
    rgn.CreateEllipticRgn(0, 0, rect.Width(), rect.Height());
    SetWindowRgn(rgn, TRUE);
}

//код вставленный в BOOL CMyElipsWndDlg::OnInitDialog()

//эта часть делает окно элипсным
CRect rect;
GetClientRect(&rect);
CRgn rgn;
rgn.CreateEllipticRgn(10, 40, rect.Width(), rect.Height());
SetWindowRgn(rgn, TRUE);

//эта должна делать кнопку элипсной, но не делает
// Привязываем вашу кнопку к пользовательскому классу
CButton* pButton = (CButton*)GetDlgItem(IDC_ELIPS_BTN); // ID вашей кнопки
if (pButton)
{
m_btnCustom.SubclassWindow(pButton->GetSafeHwnd());
}

 34 
 : 14-01-2025 13:15 
Автор WWX - Последний ответ от Ochkarik
WWX,
Цитата
To edit the Registry and disable paging kernel-mode stacks

Click Start > Run and type regedit.
In the left pane of the Registry Editor, navigate to HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager.
In the right pane, right‐click GlobalFlag and select Modify.
With Base Hexadecimal, type value 80000, which corresponds to FLG_DISABLE_PAGE_KERNEL_STACKS.
Click OK and exit the Registry Editor.
Reboot the guest system for this change to take effect.
https://learn.microsoft.com/ru-ru/windows-hardware/drivers/debugger/gflags-flag-table
оказывается. чем люблю такие вопросы - сам образовываюсь)))

 35 
 : 14-01-2025 12:54 
Автор WWX - Последний ответ от WWX
Ну, то что локальные переменные размещаются на стеке я знал, а вот всё остальное... не знал. Буду знать – одной параноей меньше.
Спасибо в любом случае.
В общем-то иначе вообще не понятно как жить – например, обработчики прерываний (ISR'ы) тогда бы не могли безопасно иметь своих локальных переменных, учитывая на каких IRQL им приходится выполняться.
Насчёт флага, я так понял, что это флаг некоторой тулзы для отладки или типа того... Могу ошибаться...

 36 
 : 12-01-2025 06:49 
Автор Boriska - Последний ответ от Boriska
MFC, API. Вчера научился делать элипсное окно из диалога на MFC при помощи региона, а вот кнопки на нем не удалось сделать элипсные. И нарыл вот у вас статью по компонентам https://club.shelek.ru/viewart.php?id=318#post_live-menu прочту.

А насчет C#, там я компоненты делал и все получалось, но были они все только прямоугольные, хотелось бы тоже "скруглять". Да на Windows Forms.

 37 
 : 12-01-2025 03:47 
Автор Boriska - Последний ответ от Джон
Привет, эммм не совсем понятно, так на (в) чём ты хочешь их делать? MFC или таки на С#? Если последнее, то Windows Forms? WPF?

зы я понимаю, что вопрос задан в теме MFC, но всё-таки

 38 
 : 11-01-2025 10:30 
Автор Boriska - Последний ответ от Boriska
Привет ув. форумчане.
Пишу программы на MFC и на С#. Когда то хотел сделать на MFC (API) свой контрол, ничего не вышло. На С# делал, но это были только прямоугольные контролы как сумма базовых. Подскажите куда рыть-копать чтобы разобраться как можно делать окна (контролы) произвольной формы, цвета, поведения и т.д. Если я чего то накалякал не того, исправьте мой опус чтобы постановка задачи стала правильной.

 39 
 : 10-01-2025 15:38 
Автор WWX - Последний ответ от Ochkarik
WWX, Если переменная объявлена в теле функции - она размещается в стеке (текущего контекста - читай процесса).
А стек.... хороший вопрос.... Стек процесса наверное должен быть в несвопируемой области. По крайней мере пока процесс активен. Тем более он обычно небольшой, три страницы всего...
Using the Kernel Stack
да, вроде пишут что при активном процессе - его стек в памяти. в неактивном - может быть выгружен, но это можно отключить при помощи KeSetKernelStackSwapEnable().
еще вот тут пишут про флаг какой то Disable paging of kernel stacks - FLG_DISABLE_PAGE_KERNEL_STACKS . видимо это какой то флаг, только непонятно чего. процесса наверное? и наверное это не очень хорошая практика.
Цитата
Stack swapping can occur only if the thread is in a wait state that was caused by a request from a user-mode application. Stack swapping never occurs for wait states that are initiated by kernel-mode components, regardless of whether stack swapping is enabled.

 40 
 : 10-01-2025 14:45 
Автор WWX - Последний ответ от WWX
Ух, большое спасибо за развёрнутый ответ.

Я не указал, что перед этой ф-цией у него стоит директива:
Код: (C++)
#pragma LOCKEDCODE
чем по идее и обеспечивается невыгружаемость; но, похоже, сути дела это не меняет.

На самом деле эта ф-ция, говоря простым языком, – обработчик IOCTL'ов и вызывается, как я понимаю, на уровне PASSIVE_LEVEL.
Т. е. с одной стороны когда управление "проходит" по этому (PAGED_CODE) макросу – IRQL не слишком высокий, но ненадолго повысится вдальнейшем внутри этой ф-ции.
(Похоже что, почти нашёл почти ошибку у самого Они.)

Как я понял по вашим ссылкам, по-умолчанию ф-ция и так размещается в неперемещаемой памяти, если не указывать чего-то вроде:
Код: (C)
#pragma alloc_text(PAGE, DispatchControl)

Правда у меня возникла небольшая параноя:
Если переменная oldirql (в которой сохраняется старый IRQL) объявлена как локальная в этой (DispatchControl) ф-ции (а где бы ей ещё быть?), так вот, если она объявлена как локальная, то может ли так получиться, что на момент вызова
Код: (C++)
KeReleaseSpinLock(..., oldirql);
она (переменная) будет выгружена из памяти?

Т. е. сама ф-ция вроде бы помещается в .text который будет гарантированно в невыгружаемой памяти. А есть ли гарантия, что её локальные данные также будут в невыгружаемой памяти? (Ведь на момент вызова KeReleaseSpinLock – IRQL должен быть DISPATCH_LEVEL.)

Страниц: 1 2 3 [4] 5 6 7 ... 10
Powered by SMF 1.1.21 | SMF © 2015, Simple Machines