Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Программирование в среде .NET (ASP.NET,ADO.NET) на C#/VB.NET

Автор: AlexandrVS
Дата сообщения: 05.03.2009 11:22
Народ, кто знает можно ли сделать на шарпе заставку перед запуском главной формы с поддержкой полупрозрачности, без привлечения winapi. А то как то не верится что это нельзя сделать не подключая дополнительные функции gdi32.dll и user32.dll. У меня пока вариант с подключением следующих ф-й, хочу уйти от такого варианта.

[DllImport("gdi32.dll", ExactSpelling = true, SetLastError = true)]
public static extern IntPtr CreateCompatibleDC(IntPtr hDC);

[DllImport("user32.dll", ExactSpelling = true, SetLastError = true)]
public static extern IntPtr GetDC(IntPtr hWnd);

[DllImport("user32.dll", ExactSpelling = true)]
public static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC);

[DllImport("gdi32.dll", ExactSpelling = true, SetLastError = true)]
public static extern Bool DeleteDC(IntPtr hdc);

[DllImport("gdi32.dll", ExactSpelling = true)]
public static extern IntPtr SelectObject(IntPtr hDC, IntPtr hObject);

[DllImport("gdi32.dll", ExactSpelling = true, SetLastError = true)]
public static extern Bool DeleteObject(IntPtr hObject);

Надеюсь что можно по другому сделать, если бы не тени то 3 строчки кода всего
Автор: BaluBig
Дата сообщения: 05.03.2009 12:15
AlexandrVS
Так пойдет? Кода вообще писать не надо. Ну, там BackgroundImage по своему вкусу...

Код:
this.BackgroundImage = ((System.Drawing.Image)(resources.GetObject ("$this.BackgroundImage")));
this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.ClientSize = new System.Drawing.Size(512, 269);
this.ControlBox = false;
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "Form1";
this.Opacity = 0.5; // Прозрачность 50%
this.ShowIcon = false;
this.ShowInTaskbar = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Form1";
Автор: AlexandrVS
Дата сообщения: 05.03.2009 16:15
BaluBig
Вот с этим кодом у меня и проблема, я отображаю картинку png в которой есть тени и другие не полностью залитые места, использую так же как ты написал + TtrancparencyKey с цветом фона формы. Все работает по таймеру форма проявляется, все вырезается, но места где были тени, да лубая прозрачность заменяются на цвет фона не обробатываются. Вот если это победить то будет классно, а то так пока только с подключение dll-к виндовых получается.
Автор: V0lt
Дата сообщения: 05.03.2009 19:48
Я создаю контрол на основе стандартного. Как мне скрыть некоторые наследуемые свойства? Что бы в Properties их не было.
Автор: BaluBig
Дата сообщения: 05.03.2009 21:23
AlexandrVS
Тогда идем другим путем.
Всякие манипуляции с прозрачностью и цветом фона в дизайнере не делаем. Для формы создаем такой класс:

Код:
public class TransparentForm : Form
{
public TransparentForm()
{
this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
this.BackColor = Color.Transparent;
this.SetStyle(ControlStyles.Opaque, true);
}

protected override CreateParams CreateParams
{
get
{
CreateParams createParams = base.CreateParams;
createParams.ExStyle |= 0x00000020 // WS_EX_TRANSPARENT;
return createParams;
}
}

protected override void OnPaint(PaintEventArgs e)
{
// Выводим картинку с прозрачностью на экран
e.Graphics.DrawImage(WindowsFormsApplication1.Properties.Resources.Computer, 0, 0, Width, Height);
}
}
Автор: feor
Дата сообщения: 05.03.2009 21:26
V0lt
Использовать атрибут Browsable:

Код: [Browsable(false)]
public new int MaxLength
{
get { return base.MaxLength; }
set { base.MaxLength = value; }
}
Автор: AlexandrVS
Дата сообщения: 06.03.2009 10:08
BaluBig
Спасибо, это реально круто , с перерисовкой проблема решаема, думаю просто ещё несколько событий инвалидейтом обработать и все будет ок. Буду пробывать.
Автор: 085
Дата сообщения: 06.03.2009 11:33
Кто нибудь использует НХибернейт? Повешаюсь блин,не могу понять что делать с log4net.
Автор: 085
Дата сообщения: 06.03.2009 17:56
Разобрался.Может кому нибудь пригодится по нхибернейту
http://nhforge.org/blogs/nhibernate/archive/2008/09/06/how-to-configure-log4net-for-use-with-nhibernate.aspx
Автор: BaluBig
Дата сообщения: 06.03.2009 21:36
AlexandrVS
Ну, чем смог... А будет готовое решение - отпишись сюда, пригодится.
Автор: V0lt
Дата сообщения: 10.03.2009 18:54
хочу перейти с Visual Studio 2005 Express на Visual Studio 2008 Express.
Будут ли косяки со старыми проектами?
Для запуска моих прог хватит .NET 2.0?
Автор: BaluBig
Дата сообщения: 10.03.2009 21:15

Цитата:
Будут ли косяки со старыми проектами?
У меня вроде не было.

Цитата:
Для запуска моих прог хватит .NET 2.0?
Да. А вообще там выбирается версия Net Framework, под которую будет проект (кроме 1.X)

Автор: V0lt
Дата сообщения: 10.03.2009 23:01
BaluBig
OK, перейду, хоть русский MSDN будет

Нашел параметр BitConverter.IsLittleEndian. Это значит BitConverter.ToInt64 по разному может выполняться? Теперь мне надо везде проверки ставить и перетасовывать значащие байты? Имхо в М$ охренели
Автор: Lazy KoT
Дата сообщения: 11.03.2009 01:01
V0lt
Цитата:
BitConverter.ToInt64 по разному может выполняться?

На x86 - Little Endian, подробнее по архитектурам посмотри здесь.
Автор: BaluBig
Дата сообщения: 11.03.2009 21:20

Цитата:
хоть русский MSDN будет
Категорически не рекомендую Английский язык программисту необходим, так будет хоть какой-то практикум и навыки чтения документации на английском.
Автор: V0lt
Дата сообщения: 11.03.2009 22:09
BaluBig

Цитата:
Английский язык программисту необходим, так будет хоть какой-то практикум и навыки чтения документации на английском.

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

Добавлено:
может ком надо

Преобразование из Unsigned Integer Values of Variable Length (”vint“) в long

Код: long get_vint(BinaryReader br)
{

byte[] k = new byte[8];//массив для числа
k[0] = br.ReadByte();
if (k[0] == 0) return -1;//8 нулей не надо
byte n;//число байт=число нулей+1
byte one_bit = 0x80; //10000000;
for (n = 1; n < 8; n++)
{
if ((k[0] & one_bit) != 0) break;
one_bit /= 2;
k[n] = br.ReadByte();
}
k[0] ^= one_bit;
if (BitConverter.IsLittleEndian)//перетасовка значащих байт
{
byte t;
for (byte i = 0; i < n / 2; i++)
{
t = k[i];
k[i] = k[n - 1 - i];
k[n - 1 - i] = t;
}
}
return BitConverter.ToInt64(k, 0);
}
Автор: alecksey1984
Дата сообщения: 12.03.2009 09:37
Извиняюсь, возможно вопрос не к месту, но все же:
"Насколько актуально осваивать технологию .NET. Стоит ли переучиваться, если можно ссыль, где почитать достоинства и недостатки ... "
Автор: KChernov
Дата сообщения: 12.03.2009 12:05
alecksey1984

Цитата:
Насколько актуально осваивать технологию .NET

Смотря для чего.


Цитата:
Стоит ли переучиваться

Смотря с чего.
Автор: alecksey1984
Дата сообщения: 12.03.2009 14:10
KChernov
для написания программ-серверов на основе Indy, и общих VCL.
существует ли для .net платформы поддержка directX и/или OpenGL.
Автор: Nilgiri
Дата сообщения: 12.03.2009 21:14
alecksey1984

Цитата:
существует ли для .net платформы поддержка directX и/или OpenGL

Существует. Microsoft сейчас развивает платформу .NET очень активно, и большую часть своего ПО они пишут именно на .NET. Естественно существует и поддержка работы с графикой. А про преимущества и недостатки можно сказать так: .NET хороша для быстрой разработки прикладного софта за счет удобства использования большого количества уже разработанных классов, упрощающих повседневные задачи, различных упрощений языка (например, автоматической сборке мусора), удобной среде разработки, большому объему справочного материала. Однако, чем больше фишек, тем тяжелее это все обработать - соответственно языки платформы .NET плохо подходят для разработки ресурсоемкого ПО (такого, как драйверы устройств). Ну и естественно все это работает только под Windows, т.к. ИМХО всевозможные эмуляторы на никсах не дадут полной стабильности никогда.
Автор: BaluBig
Дата сообщения: 13.03.2009 11:14

Цитата:
для написания программ-серверов на основе Indy, и общих VCL.
В .NET Framework существуют собственные средства для решения тех задач, для которых нужен Indy. Оборачивать Indy для работы под .NET я особого смысла не вижу.
VCL для .NET - предать анафеме и сжечь Мертворожденный проект.


Добавлено:

Цитата:
различных упрощений языка (например, автоматической сборке мусора),
Это не упрощение языка, это функция среды выполнения - CLR.


Цитата:
Однако, чем больше фишек, тем тяжелее это все обработать - соответственно языки платформы .NET плохо подходят для разработки ресурсоемкого ПО (такого, как драйверы устройств).
Ну я бы не относил драйверы к ресурсоемкому ПО. Их особенность состоит в том, что они работают на уровне, на котором нет места прослойкам вроде .NET. А если кто-то боится, что наличие промежуточного кода IL сказывается на производительности, то это справедливо только для первого запуска участка кода. При котором IL компилируется в родной машинный код и при повторных запусках исполняется уже он. Понятное дело, JIT-компилятор не проводит таких сложных оптимизаций, как, скажем, компилятор С++. Но для подавляющего большинства задач это не критично.

Цитата:
ИМХО всевозможные эмуляторы на никсах не дадут полной стабильности никогда

Mono это не эмулятор. Это ровно то же самое, что сделал Microsoft. Благо все нужные спецификации открыты и стандартизованы. И проблема больше не со стабильностью, а с совместимостью кода. Полностью совместимыми Windows и *X не удастся сделать никогда. Поэтому кто хочет переносимости - сразу должен разрабатывать для Mono, а не для MS .NET Framework.


Автор: avkorets
Дата сообщения: 13.03.2009 15:27
ребят подскажите решение простой задачи..
таймером делаю рекурсивный поиск файлов - добавляю в лист вью.
Отображение на листвью при поиске стирается и строится новое- это чтоб вопросов лишних не было..
так вот собно вопрос.
при появлении нового файла или удалении какого либо из списка листвью нужно выполнить задачу ну например месадж бокс вызвать.
мож ссылку ткнете..или советом примером поможете??
чего под вечер тупняк =)
Автор: alecksey1984
Дата сообщения: 13.03.2009 16:34
Nilgiri
BaluBig
спасибо за совет. выбор очевиден - для решения моих задач не подойдет.
почитав мнения, пришел к выводу - .net - платформа, предназначенная изменить подход к организации работы программистов. по сути - бизнес-инструмент.
Автор: V0lt
Дата сообщения: 13.03.2009 17:39
Есть byte[] нужно получить string так, чтобы каждый байт преобразовался в один символ. Из имеющихся конвертеров ничего не нашел. Неужели придется каждый символ обрабатывать?
Автор: TeXpert
Дата сообщения: 13.03.2009 17:50
V0lt
Цитата:
Есть byte[] нужно получить string так, чтобы каждый байт преобразовался в один символ
В какой символ? А те, которые не имеют символьного представления? Их куда прикажешь?
Автор: Lazy KoT
Дата сообщения: 13.03.2009 17:51
avkorets
Цитата:
при появлении нового файла или удалении какого либо из списка листвью нужно выполнить задачу ну например месадж бокс вызвать.
Конкретизируй плз: как отследить что файл появился/исчез, или проблема с вызовом?

V0lt

Код: byte[] b = { 65, 65, 65 };
Console.WriteLine((new System.Text.ASCIIEncoding()).GetString(b));
Автор: V0lt
Дата сообщения: 13.03.2009 19:09
Lazy KoT


TeXpert

Цитата:
В какой символ? А те, которые не имеют символьного представления? Их куда прикажешь?

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

нашел баг

Код:
byte[] aa = { 1, 2, 3 };
byte[] bb = { 1, 2, 3 };
if (aa != bb) return false;
return true;
Автор: avkorets
Дата сообщения: 13.03.2009 23:15
Lazy KoT
да именно но с небольшой поправкой..
у меня таймером идет поиск раз в 2 минуты..так вот нужно отследить изменения с момента последнего поиска..если эти изменения есть то допустим вывести эти "изменения" мессаджбоксом..
соответственно при первом поиске "изменением" буду все найденные файлы..Так вроде понятнее =)
Автор: Lazy KoT
Дата сообщения: 14.03.2009 12:03
V0lt
Ну вообще-то так и должно быть. (: Ты же ссылки сравниваешь...
Цитата:
Базовым для всех массивов является тип System.Array, производный от System.Object. А это значит, что массивы всегда относятся к ссылочному типу и размещаются в управляемой куче, а переменная в приложении содержит не сам массив, а ссылку на него.

avkorets
Посмотри на System.IO.FileSystemWatcher.
Автор: BaluBig
Дата сообщения: 14.03.2009 12:25
V0lt

Цитата:
нашел баг
Ну приехали... Оператор равенства для класса System.Array (а равно как и для подавляющего большинства ссылочных типов) определяет равенство ссылок на экземпляр. Т.е. он определяет является ли aa там же самым экземпляром, что и bb. В твоем прмере это очевидно не так.

alecksey1984

Цитата:
.net - платформа, предназначенная изменить подход к организации работы программистов. по сути - бизнес-инструмент.
Не совсем. Это платформа, призванная освободить программиста от сугубо технических вопросов (указатели, хэндлы, выделение и освобождение памяти, т.е. все, на чем стоит, например Win32 API) для того, что бы программист мог заниматься решением своей прикладной задачи. К слову VCL служит для тех же целей.

avkorets
Тебе нужно данные при поиске помещать не сразу в ListView, а в какую-то промежуточную структуру. После того, как ты обойдешь все нужные каталоги ты сделаешь две вещи:
1. Для каждого элемента промежуточной структуры ты найдешь равный элемент в ListView. Те элементы, для которых равных не найдется - это новые файлы.
2. Для каждого элемента ListView ты найдешь равный элемент в промежуточной структурt. Те элементы, для которых равных не найдется - это удаленные файлы.
После того, как изменения обработаны, Listview очищается и все элементы из промежуточной структуры переносятся туда. Всё.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102

Предыдущая тема: Как удалить/добавить/отключить/включить устройство?


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.