Добавить любой RSS - источник (включая журнал LiveJournal) в свою ленту друзей вы можете на странице синдикации.
Исходная информация - http://forum.sources.ru. Данный дневник сформирован из открытого RSS-источника по адресу http://forum.sources.ru/yandex.php, и дополняется в соответствии с дополнением данного источника. Он может не соответствовать содержимому оригинальной страницы. Трансляция создана автоматически по запросу читателей этой RSS ленты. По всем вопросам о работе данного сервиса обращаться со страницы контактной информации.[Обновить трансляцию]
estra: У меню его в принципе нет, а выставлять его для формы нет никакого смысла.
Вся проблема в методе TMenuItem.MenuChanged, внутри которого есть строка
if Assigned(FOnChange) then FOnChange(Self, Source, Rebuild);
она вызывает метод MenuItem.SubItemChanged, который на каждый чих пересоздает меню.
...
RebuildHandle;
...
Захотим, например, скрыть 20 пунктов в цикле, меню будет 20 раз пересоздано,
отсюда и дикое мерцание...
Возникла необходимость скрывать пункты PopupMenu в момент, когда оно раскрыто.
Но это приводит к сильному мерцанию, избавиться от которого не удается.
Как можно избавиться от мерцания PopupMenu?
Понедельник, 14 Декабря 2020 г. 22:23
+ в цитатник
Thomaswrarl: Почему-то иногда не отображается, что в теме было новое сообщение. Например, только что зашёл, не увидел ни одной пометки о новых сообщениях. Но зашедши в раздел обнаружил несколько постов, которых я не читал. Только у меня так?
Понедельник, 14 Декабря 2020 г. 18:03
+ в цитатник
Qraizer: Походу это некий признак ошибки. Ну, да, часто возникает навязчивое желание не делать статус операции отдельным атрибутом, а как-нибудь замешать в inside boundary уже имеющегося атрибута. Проблемы, когда это невозможно, неизбежны.
Добавлено
P.S. Не стоит никогда так проектировать логику кода. Недаром практически во всех code style standard присутствует правило, запрещающее использование одной и той же переменной для различных целей. Хранить размер и одновременно признак ошибки как раз такой случай. Ну и никогда не следует смешивать типы данных по назначению. Какие свойства сущности нужны, вот такой тип данных и используем. Размер – значит size_t. Символ-байт – значит char. Число-байт – значит signed char. Итп.
Но вообще проблема шире. У меня вот, только что глянул, есть проект на 120к кода. При переносе с 32-х бит на 64 проблема возникла только в двух аспектах, и обе были связаны с изменившимся inside boundary range для size_t. Один из-за DWORD в использовавшихся функциях и структурах Win32, второй из-за 32-битности MS Office SDK, принимающего int через VARIANT. Проблема была решена путём написанного на коленке простенького safe_cast<> в точечных местах, общим числом в пять штук. Никаких десятков предупреждений и массового рефакторинга.
Понедельник, 14 Декабря 2020 г. 15:48
+ в цитатник
a_n_y_a: В консольном проекте std::bad_alloc ловится, а в диалоговом приложении MFC, нет. Изучал разные варианты.
Код консольного приложения:
#include "stdafx.h"
#include "MyInt.hpp"
#include
#include
#include
using namespace std;
int main()
{
std::locale Loc = std::locale::global(std::locale("russian"));
char *buf = NULL, *buf1 = NULL;
try
{
buf = new char[_I64_MAX_MY - 5];
buf1 = new char[_I64_MAX_MY - 5];
}
catch (std::bad_alloc)
{
wcout<< _T("Сработал std::bad_alloc ошибка выделения памяти для массива\n");
}
catch (...)
{
wcout << _T("std::bad_alloc не сработал\n");
};
int i;
wcout << _T("Введите любое число i=");
wcin >> i;
if (buf != NULL) delete[]buf;
if (buf1 != NULL) delete[]buf1;
return 0;
};
Константа _I64_MAX_MY и MAX_MY_INT принимает значение положительного диапазона целого, в зависимости от типа сборки, x86 или x64. Файл в прилагаемом проекте.
Код в диалоге:
void CMyThrowCatchDlg::OnBnClickedButton1()
{
// TODO: Add your control notification handler code here
char *buf = NULL, *buf1 = NULL;
try
{
buf = new char[MAX_MY_INT - 5];
buf1 = new char[MAX_MY_INT - 5];
}
catch (CMemoryException& mex)
{
CString s;
s = _T("Сработал CMemoryException ошибка выделения памяти для массива ");
AfxMessageBox(s);
}
catch (std::bad_alloc& ba)
{
CString s;
s = _T("Сработал std::bad_alloc ошибка выделения памяти для массива ");
AfxMessageBox(s);
}
catch (...)
{
CString s;
s = _T("std::bad_alloc, CMemoryException не сработал");
AfxMessageBox(s);
};
if (buf != NULL) delete[]buf;
if (buf1 != NULL) delete[]buf1;
};
Где грабли? Файл MyThrowCatchNew.rar - Проект диалога MFC, ThrowNew.rar - консольный проект. MyThrowCatchNew.rar (, : 0)
ThrowNew.rar (, : 0)