Опрос
Вы участвуете в программе Windows Insider?
Популярные новости
Обсуждаемые новости

1
1 2
Не в сети
Сообщений: 2799
Благодарностей: 53
Предупреждений:
Из: United States Lewiston/Питер
Род занятий: Нейробиология

Доброго времени суток, господа-товарищи.
Мне тут подумалось, что WPF отлично подходит для реализации интерфейсов IM-клиентов. Надо сказать, что практически все существующие клиенты довольно скучны (за исключением iChat, но он ужасно малофункционален). Естественно, я пошел искать существующие примеры, и выяснил что из крупных игроков WPF решилась применить пока только Yahoo! Скачал, поиграл с ним немного - сделано все очень здорово, но...это клиент для IM-протоколов Yahoo и Windows Live, чего мне мало. Вот, собственно, и вопрос: кто что знает про разработку IM-клиентов с использованием WPF, есть ли еще интересные примеры?

#132856   | 13.02.08 23:52
Не в сети
Сообщений: 2640
Благодарностей: 134
Предупреждений:
Из: Russia Санкт-Петербург
Род занятий: филология

Увы, не встречал.

Последнее, что видел - программа Witty, для сети Twitter. Позволяет обмениваться с друзьями сообщениями, "что ты сейчас делаешь":
http://windowsvistablog.com/blogs/windowsexperience/archive/2007/12/26/twitter-with-friends-using-the-wpf-client-witty.aspx

Поблагодарили: swissglide

#132878   | 14.02.08 12:26
Не в сети
Сообщений: 2799
Благодарностей: 53
Предупреждений:
Из: United States Lewiston/Питер
Род занятий: Нейробиология

Raiker, спасибо. Для Twitter'а видел, для меня к сожалению смысла не имеет, мне он ни к чему, функции статуса в фейсбуке хватает... Забавно, я стал рыться одновременно с появлением статьи про YM. Как IM-программа мне он не очень нравиться, но как пример того, какие UI можно делать на WPF - просто супер. Перетащил MSN-контакты в него, поиграюсь немножко...

#132923   | 14.02.08 22:57
Не в сети
Сообщений: 2640
Благодарностей: 134
Предупреждений:
Из: Russia Санкт-Петербург
Род занятий: филология

Кое-что еще интересное. Continuum. Гаджет, в котором заключен вполне рабочий IM для протокола Live Messenger, полностью написанный на WPF с довольно неплохой графикой. Конечно функционала не хватает, но как сэмпл, коим он является, по-моему по крайней мере любопытно:



http://www.thirteen23.com/experiences/desktop/continuum/

#133742   | 28.02.08 01:51
Не в сети
Сообщений: 2799
Благодарностей: 53
Предупреждений:
Из: United States Lewiston/Питер
Род занятий: Нейробиология

Raiker, спасибо, я его видел, реализация не слишком удачная, к сожалению

#133745   | 28.02.08 03:01
Не в сети
Сообщений: 1782
Благодарностей: 101
Предупреждений:
Из: Russia Москва
Род занятий: .NET developer

Мужики, а как с WPF работать на Delphi? Можно было сворганить очень неплохой IM-клиент, типа QIP'а, вот только я не знаю, что делать с WPF в Delphi.


Предлагаю созвать народ и попытаться написать что-нибудь подобное на C#. Хотя бы даже WPF ICQ-клиент.

#134877   | 17.03.08 13:37
Не в сети
Сообщений: 2109
Благодарностей: 298
Предупреждений:
Из: Russia Екатеринбург
Род занятий: IT

Sgt.Riggs, hydra 3.0

Hydra 3.0 – поддержка технологий .NET в приложениях на Delphi

Компания RemObjects Software выпустила новую версию продукта Hydra 3.0, который позволит программистам на Delphi в полной мере оценить преимущества технологий .NET.

Разработчики приложений на Delphi нередко задумываются о переносе своих продуктов на платформу .NET, а также об использовании инновационных технологий, таких как Windows Presentation Foundation или LINQ, однако для этого им необходимо убедиться в полной сохранности инвестиций в базу кода на Delphi. С помощью продукта Hydra 3.0 программисты смогут расширять функциональность существующих программных продуктов за счет подключения новых модулей, разработанных в среде .NET.

Продукт предоставляет возможность встраивания модулей WinForm или WPF в существующие приложения на Delphi (включая проекты Delphi 6 и 7). Кроме того, производители гарантируют полную совместимость проектов Hydra 3.0 с проектами Hydra 2. В расширенный список поддерживаемых платформ вошли следующие продукты: Visual Studio 2005 (C#, Chrome и Visual Basic), Delphi 6 и 7, Borland Developer Studio 2005/2006 (C#, Delphi/Win32 и Delphi for .NET).

#134884   | 17.03.08 17:29
Не в сети
Сообщений: 1782
Благодарностей: 101
Предупреждений:
Из: Russia Москва
Род занятий: .NET developer

Lico, большое спасибо! Однако за этот пакет нужно платить 15k руб., которых у меня нет, поэтому прошу программистов с форума помочь с переносом кода C# на Delphi for .NET.

struct MARGINS
        {
            public MARGINS(Thickness t)
            {
                Left = (int)t.Left;
                Right = (int)t.Right;
                Top = (int)t.Top;
                Bottom = (int)t.Bottom;
            }
            public int Left;
            public int Right;
            public int Top;
            public int Bottom;
        }

        [DllImport("dwmapi.dll", PreserveSig = false)]
        static extern void DwmExtendFrameIntoClientArea(IntPtr hwnd, ref MARGINS margins);

        [DllImport("dwmapi.dll", PreserveSig = false)]
        static extern bool DwmIsCompositionEnabled();

        public class GlassHelper
        {
            public static bool ExtendGlassFrame(Window window, Thickness margin)
            {
                if (!DwmIsCompositionEnabled())
                    return false;

                IntPtr hwnd = new WindowInteropHelper(window).Handle;
                if (hwnd == IntPtr.Zero)
                    throw new InvalidOperationException("Окно необходимо показать перед расширением прозрачности.");

                // Set the background to transparent from both the WPF and Win32 perspectives
                window.Background = Brushes.Transparent;
                HwndSource.FromHwnd(hwnd).CompositionTarget.BackgroundColor = Colors.Transparent;

                MARGINS margins = new MARGINS(margin);
                DwmExtendFrameIntoClientArea(hwnd, ref margins);
                return true;
            }
        }

        protected override void OnSourceInitialized(EventArgs e)
        {
            base.OnSourceInitialized(e);
            if (System.Environment.OSVersion.Version.Major < 6 || !DwmIsCompositionEnabled())
                MessageBox.Show("Невозможно включить прозрачность.\r\n\r\nВозможно, отключен режим Aero или Вы используете не Windows Vista.", "Aero Glass", MessageBoxButton.OK, MessageBoxImage.Information);
            else
                GlassHelper.ExtendGlassFrame(this, new Thickness(-1));
        }

GlassHelper.ExtendGlassFrame(this, new Thickness(-1));
}[/code]


(на самом деле, он есть в этой статье)

Предлагаю собраться в этой теме и всем вместе думать по поводу ICQ-клиента на WPF ;)

#134893   | 17.03.08 22:12
Не в сети
Сообщений: 384
Благодарностей: 9
Предупреждений:
Из: Russia Москва
Род занятий:

Предлагаю собраться в этой теме и всем вместе думать по поводу ICQ-клиента на WPF


А чем принципиально отличается написание клиента на WPF от любой другой реализации? WPF это интерфейс, а функции протокола тут причем?

#135165   | 20.03.08 21:02
Не в сети
Сообщений: 1782
Благодарностей: 101
Предупреждений:
Из: Russia Москва
Род занятий: .NET developer

Espoir, на WPF симпатишней выглядит :-D На самом деле, хочется применить эту технологию.

А код написан на C#, он импортирует из библиотеки API DWM (Desktop Window Manager - Диспетчер рабочего стола) несколько функций для расширения рамки на клиентскую область окна, устанавливает Margins для окна, ... и таким образом получается "стеклянное окно".



Обновление:
Я самостоятельно перевёл вышеобозначенный код из C# в Delphi. Результат неутешительный: похоже, Borland (*CodeGear) придётся переделать все компоненты, чтобы это работало

#135190   | 21.03.08 16:06
Не в сети
Сообщений: 384
Благодарностей: 9
Предупреждений:
Из: Russia Москва
Род занятий:

Sgt.Riggs, вы все спутали и смешали.
API WDM - никакого отношения к WPF не имеет. Это часть нового API в Vista. Для того, чтобы их вызывать Вам ни .NET ни WPF не нужен. Вызывайте откуда хотите. Лишь бы среда программирования позволяла вызывать winAPI

WPF же это часть .NET 3.0/3.5, предназначен для создания интерфейсов - неважно каких, хоть IM хоть что угодно. Все остальное пишется, к примеру на .NET - на C#,VB или на вашей Delphi

Отсюда я еще раз повторяю свой вопрос, заданный выше - А чем принципиально отличается написание клиента на WPF от любой другой реализации?. К чему эта тема? Если к тому что на WPF получаются красивые интерфейсы, то да, это так

Берете любую общедоступную библиотеку с реализованным протоколом нужного IM, того же ICQ к примеру, или реализуете сами такую библиотеку, в любом случае к WPF это отношения не имеет.

#135391   | 24.03.08 16:53
Не в сети
Сообщений: 2799
Благодарностей: 53
Предупреждений:
Из: United States Lewiston/Питер
Род занятий: Нейробиология

Espoir, эта тема создана с целью поиска существующих IM-клиентов, которые используют WPF в качестве способа реализации интерфейса.

#135403   | 24.03.08 21:53
Не в сети
Сообщений: 1782
Благодарностей: 101
Предупреждений:
Из: Russia Москва
Род занятий: .NET developer

Espoir, я различаю API DWM и WPF, просто "стеклянность", вызываемая через этот API, лучше выглядит на приложениях WPF. Я, наверно, и правда всё смешал и не разъяснил толком

А в Delphi с имеющимися VCL-компонентами "стеклянность" не включишь, ибо тогда станет прозрачным и текст

#135410   | 25.03.08 02:34
Не в сети
Сообщений: 384
Благодарностей: 9
Предупреждений:
Из: Russia Москва
Род занятий:

Sgt.Riggs, текст не обязательно должен быть прозрачным.
Достаточно использовать возможности библиотеки "dwmapi.dll", информации о которой полно в сети.
К примеру.
Функции этой библиотеки:
DwmEnableComposition, DwmIsCompositionEnabled, DwmpRestartComposition, DwmRegisterThumbnail, DwmUnregisterThumbnail, DwmUpdateThumbnailProperties, DwmQueryThumbnailSourceSize и так далее и так далее и так далее - все эти функции дают вам полный контроль над прозрачностью.

К примеру на основе функции DwmExtendFrameIntoClientArea можно легко реализовать метод вроде SetGlassRegion который будет делать прозрачным только определенную часть окна - это достаточно просто. Сложнее, но тоже ничего особо революционного сделать верное отображение текста поверх прозрачной части - тут надо работать с DrawThemeTextEx ("UxTheme.dll"), DrawThemeText, CreateDIBSection ("gdi32.dll").

Как-то ради эксперимента я делал простое приложение, которое должно было выглядеть "в стиле Vista". Вот скриншотик

Как видите тут достаточно сложная композиция - и вся она написана вызовами стандартного API. Никакого WPF нет и в помине

#135482   | 26.03.08 11:28
Не в сети
Сообщений: 1782
Благодарностей: 101
Предупреждений:
Из: Russia Москва
Род занятий: .NET developer

Espoir, получить список функций я могу, написав маленькое приложение на Delphi. Более того, я это уже сделал ;) На WPF гораздо удобнее выглядит хотя бы окно контактов - сосредотачиваешься на имени и картинке, а фон приложения - стеклянный.

В реализации этой идеи мне нужна помощь человека/людей, которые смогли бы написать полностью функциональную библиотеку клиента ICQ (с соответствующей документацией) на C# или, в крайнем случае, Visual Basic (ну или на Chrome - там Object Pascal немного отличается от того, что в Delphi). Плюс мне понадобились бы советы знающих людей по организации списка контактов (пока я понятия не имею, как это делается).

Сейчас лето, времени изучить всё это добро у меня будет достаточно. Поэтому большое спасибо тем, кто сможет присоединиться.


P.S. Кстати, ещё бы понять, как создавать белый фон около букв (называется Glow), когда окно стеклянное. На CodeProject есть несколько статей, но большинство из них используют WTL, а ещё один использует функцию DrawThemeTextEx на таком уровне, что при попадании окна с текстом за пределы экрана этот текст стирается в прямом смысле.

#140392   | 26.06.08 16:28
Все права принадлежат © ms insider @thevista.ru, 2022
Сайт является источником уникальной информации о семействе операционных систем Windows и других продуктах Microsoft. Перепечатка материалов возможна только с разрешения редакции.
Работает на WMS 2.34 (Страница создана за 0.031 секунд (Общее время SQL: 0.01 секунд - SQL запросов: 98 - Среднее время SQL: 0.0001 секунд))
Top.Mail.Ru