Windows Forms.NET 2.0: Как потянуть значок PNG?

Функция jOOQ на дорожной карте

Вы не первый, кто с этой идеей. Существует ожидающий запрос функции для генерации таких классов «оболочки ключей» из коробки (пока недоступно в 3.11): https://github.com/jOOQ/jOOQ/issues/6124

[ 1112] Или это обсуждение: https://groups.google.com/forum/#!topic/jooq-user/53RZqoewa3g

В вашем распоряжении есть дополнительные приложения для этой функции. Как только такие типы существуют:

  • Вы можете присоединиться только путем сопоставления первичных ключей / внешних ключей, поскольку они больше не будут моделироваться произвольными числовыми типами
  • Будет невозможно забыть столбец в составном ключе при объединении или фильтрации, так как составной ключ станет одним значением

Случай составного ключа - тот, который делает это сложным для поддержки jOOQ из коробки, как разновидность сначала необходимо реализовать дополнительные функции, чтобы сгруппировать несколько столбцов в синтетический столбец. Кроме того, как уникальные ключи, так и внешние ключи могут накладываться друг на друга, поэтому существует немало крайних случаев, которые необходимо учитывать.

Реализация самостоятельно

Вы можете реализовать это самостоятельно. Если ваша схема имеет только суррогатные ключи из одного столбца, то вы можете переопределить класс JavaGenerator и сгенерировать дополнительный класс для таблицы, а также программно добавить соответствующие конфигурации forcedType и Converter в конфигурацию генератора кода.

Другие, возможно, сделали что-то подобное, но я не знаю ни о какой общедоступной реализации.

Реализация его в базе данных

В принципе, вы также можете реализовать это непосредственно в базе данных, например, если вы используете PostgreSQL. Вы можете обернуть свой UUID в составной тип и использовать его для своих первичных ключей / внешних ключей:

create type pk_a as (id bigint);
create type pk_b as (id bigint);

create table t_a(id pk_a primary key);
create table t_b(id pk_b primary key, a pk_a references t_a);

insert into t_a values(row(1)::pk_a);
insert into t_b values(row(2)::pk_b, row(1)::pk_a);

Генератор кода jOOQ должен подобрать эти типы и сделать то, что вам нужно. Конечно, есть довольно много предостережений, учитывая, что я почти никогда не видел эту практику в дикой природе: -)

11
задан 11 revs, 4 users 68% 8 October 2017 в 10:41
поделиться

3 ответа

Я задал подобный вопрос только что, но с не много удачи. Некоторые ответы в моем сообщении могут помочь Вам, был один путь, но это выглядит довольно твердым. Свяжитесь с моим сообщением здесь

0
ответ дан 3 December 2019 в 12:05
поделиться

The ResourceManager loads the icon based on the bits stored in the resources. However, the way it handles loading won't let you access the 256x256 icon (this information does not make its way into the System.Drawing.Icon that you are getting back).

I am sorry to disappoint you, but the only way which works that I am aware of is to load the icon through a P/Invoke of LoadImage and working with a file (yes, I know, that's not what you were looking for). So the new question should be: how do I extract the bits of a given resource so that I can store them to a file? I fear that this isn't possible either, having done some stepping through System.Resources.ResourceReader, as the resource data seems to be a collection of serialized .NET objects.

Anyway, for those who can afford to load the icon from a .ICO file (and for myself, as a future reference on how to load 256x256 icons), call IconConverter.LoadIcon:

using System.Runtime.InteropServices;

static class IconConverter
{
    public static System.Drawing.Icon LoadIcon(string path, int width, int height)
    {
        System.IntPtr hIcon;
        hIcon = LoadImage (System.IntPtr.Zero, path, IMAGE_ICON, width, height,
                           LR_LOADFROMFILE);
        if (hIcon == System.IntPtr.Zero)
        {
            return null;
        }
        return System.Drawing.Icon.FromHandle (hIcon);
    }

    const int IMAGE_ICON = 1;
    const int LR_LOADFROMFILE = 0x0010;

    [DllImport ("user32.dll", SetLastError=true, CharSet=CharSet.Auto)]
    static extern System.IntPtr LoadImage(System.IntPtr hInstance,
                                          string lpszName, uint uType,
                                          int cxDesired, int cyDesired,
                                          uint fuLoad);
}

Once you have the System.Drawing.Icon in the expected size, just paint it using graphics.DrawIconUnstretched.

3
ответ дан 3 December 2019 в 12:05
поделиться

Сегодня я сделал очень хорошую функцию для извлечения битовых карт 256x256 из иконок Vista.

Я использую ее для отображения большой иконки в виде битовой карты в окне "О программе".

Эта функция принимает в качестве параметра объект иконки. Таким образом, вы можете использовать его с любыми иконками - из ресурсов, из файлов, из потоков и так далее. Она работает на любой ОС, потому что она не использует Win32 API , это 100% управляемый код :-)

Bitmap ExtractVistaIcon(Icon icoIcon)

Я разместил здесь свою функцию: ExtractVistaIcon()

0
ответ дан 3 December 2019 в 12:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: