Компьютерный форум NoWa.cc

Компьютерный форум NoWa.cc (https://nowa.cc/index.php)
-   .NET (https://nowa.cc/forumdisplay.php?f=298)
-   -   Вопросы по C# (https://nowa.cc/showthread.php?t=96702)

pluton 17.05.2007 20:16

Вопросы по C#
 
Предлагаю в этой теме обсуждать проблемы при программировании на C#

Первый вопрос. Как изменить изображение на pictureBox? Например, сделать его чёрно-белым.
Я думаю, для этого надо получить image с pictureBox, но не знаю как это сделать.

EugeneFirst 18.05.2007 15:54

Ответ: Вопросы по C#
 
Получить изображение просто. Вот обработать его - намного сложнее.
(Если, конечно это не банальное stretch|expand)
Тут без математики не обойтись. Есть книги по обработке изображений.
Я как раз собираюсь дописать в свой фото-сайт обработку (маленькие ч/б иконки в списке фоток, вместо цветных монстров). Отпишусь, как сделаю

pluton 18.05.2007 18:55

Ответ: Вопросы по C#
 
Цитата:

Сообщение от EugeneFirst (Сообщение 950517)
Получить изображение просто

как именно?

Цитата:

Сообщение от EugeneFirst (Сообщение 950517)
Вот обработать его - намного сложнее

я нашёл пример обработки изображений в C#. так что это не проблема

Rowex 25.06.2007 12:40

Ответ: Вопросы по C#
 
А в чём проблема? Так и получаешь pictureBox.Image

pluton 25.06.2007 18:52

Ответ: Вопросы по C#
 
Цитата:

Сообщение от Rowex (Сообщение 1025253)
А в чём проблема? Так и получаешь pictureBox.Image

спасибо, я уже нашёл

ahropak 21.09.2007 11:28

Ответ: Вопросы по C#
 
pluton, ты ColorMatrix использовал в своём решении? Потому что с этим классом легко изображением манипулировать.

LeGront 15.10.2007 19:41

Ответ: Вопросы по C#
 
Как на С# сделать чтоб появлялось всплывающее окошечко на подобие пришедшего сообщения в QIPe?

pluton 15.10.2007 20:11

Ответ: Вопросы по C#
 
Цитата:

Сообщение от LeGront (Сообщение 1201228)
Как на С# сделать чтоб появлялось всплывающее окошечко на подобие пришедшего сообщения в QIPe?

по-быстрому опишу:
тебе надо сделать форму, у которой:
TopMost = true;
ShowInTaskbar = false;
FormBorderStyle = none;
при создании формы устанавливаешь координаты и размер
дальше при событии Paint на форме рисуешь чё ты хош
зы. будут вопросы - спрашивай

ahropak 17.10.2007 21:48

Ответ: Вопросы по C#
 
LeGront, а в обработчике таймерового события Tick можешь изменять координаты формы или её прозрачность для получения эффектов "всплывания/выезжания" или "материализации" соответственно.

asn_asn 20.10.2007 14:15

Ответ: Вопросы по C#
 
Где найти такой хороший учебник-справочник, в электронном виде поделитесь.

pluton 20.10.2007 20:16

Ответ: Вопросы по C#
 
Цитата:

Сообщение от asn_asn (Сообщение 1210829)
Где найти такой хороший учебник-справочник, в электронном виде поделитесь

вот в этой теме есть: http://nowa.cc/showthread.php?t=14475

czukowski 20.10.2007 22:49

Ответ: Вопросы по C#
 
Цитата:

Сообщение от asn_asn (Сообщение 1210829)
Где найти такой хороший учебник-справочник, в электронном виде поделитесь.

Справочник лежит в папке, где установлен c#, в виде файла .doc

Svintuss 23.10.2007 11:12

Ответ: Вопросы по C#
 
Подскажите, ктонить знает какой нибудь удобный способ править RTF разметку объектами С#. Проблема в следующем: ну всем хорош RichTextBox одно плохо - нет методов рамку вокруг абзаца нарисовать. Можно конечно вручную вставлять RTF разметку, но для этого ее надо по порядочному отпарсить.

legat 14.11.2007 14:32

Ответ: Вопросы по C#
 
Отвечу asn_asn, что хорошие книги по С# можно найти на сайте
www.natahaus.ru, только нужно на нем зарегистрироваться и тогда поиск на ключевое слова "C#" в твоем распоряжении.

EvgeniuXP2 14.11.2007 20:17

Ответ: Вопросы по C#
 
Как сделать:

на форме в C# пишу код, который отображает прямоугольник прямо на самой форме. Надо сделать, чтобы с помощью вертикальной прокрутки (или горизонтальной) позиция нарисованного прямоугольника менялась... Т.е. сделать эффект, что будто бы перемещаем рабочую область и нарисованный прямоугольник уходит за пределы формы...какие это события? очень нужно...

P.S:

В C# можно объявлять русские пременные/функции (процедуры) и классы :)

pluton 14.11.2007 22:26

Ответ: Вопросы по C#
 
EvgeniuXP2, подскажи где достать полосу прокрутки?
а то я не нашёл. контрола такого нету. в свойствах формы вроде тоже нельзя включить скроллбары

Riccon 14.11.2007 22:32

Ответ: Вопросы по C#
 
Свойство у формы или контрола Panel - AutoScroll

Добавлено через 5 минут
Цитата:

Сообщение от EvgeniuXP2 (Сообщение 1258660)

Надо сделать, чтобы с помощью вертикальной прокрутки (или горизонтальной) позиция нарисованного прямоугольника менялась... какие это события? очень нужно...

this.Scroll += new System.Windows.Forms.ScrollEventHandler(this.Form1 _Scroll);

pluton 15.11.2007 00:30

Ответ: Вопросы по C#
 
EvgeniuXP2, для рисования используется событие Paint.
при прокрутке - событие Scroll
т.е. код приблизительно такой:
Код:

int val;    // значение сдвига скроллбара
form_Paint(object, PaintEventHandler e)
{
    e.Graphics.DrawRectangle(Pens.Black, 10, 10 + val, ...);
}

form_Scroll(object, ScrollEventHandler e)
{
  val = e.NewValue;
}


EvgeniuXP2 16.11.2007 19:01

Ответ: Вопросы по C#
 
Цитата:

Сообщение от pluton (Сообщение 1259178)
EvgeniuXP2, для рисования используется событие Paint.
при прокрутке - событие Scroll
т.е. код приблизительно такой:
Код:

int val;    // значение сдвига скроллбара
form_Paint(object, PaintEventHandler e)
{
    e.Graphics.DrawRectangle(Pens.Black, 10, 10 + val, ...);
}

form_Scroll(object, ScrollEventHandler e)
{
  val = e.NewValue;
}


Спасибо. Но немного не то что нужно. Нашел в одном из примеров, там решение было простое: при выводе текста использовать вместо координат Х и Y: DisplayedRectangles. Для линии тоже просто написать: Х+DisplayRectangle.X,Y+DisplayRectangle.Y, Х2+DisplayRectangle.X,Y2+DisplayRectangle.Y. И все работает: при прокрутке линии уходят вверх/вниз или влево/вправо, в зависимости от перемещения вертикального/горизонтального ползунка :))

Добавлено через 6 минут
Еще вопрос, в книге по C# не нашел, есть только приблизительные наводки :(

Я нарисовал на форме прямоугольник, нужно в итоге сохранить в jpg/bmp формат. Графический файл загружать и сохранять с другим форматом нашел, а вот преобразовать из векторного в графический нет :( раньше функция была BitBlt (в делфи тоже есть), а тут вроде как заменили на metafile... но пример из Visual Studio 7.0 не пошел в Visual Studio 8.0 (оно и понятно, там вообще по другому)... в 8.0 примера не нашел :(, очень нужно...

Добавлено через 4 дня
Вопрос снимаю, чертыре дня убил, но нашел как сделать :)

Добавлено через 11 минут
пишу на память, так что извиняюсь за ошибки:

Цитата:

Сообщение от pluton (Сообщение 1258907)
EvgeniuXP2, подскажи где достать полосу прокрутки?
а то я не нашёл. контрола такого нету. в свойствах формы вроде тоже нельзя включить скроллбары

this.AutoScroll=true;
this.ScrollMinimize. задать размеры например, 1000x1000.

а также указать размер самой формы: this.Width, this.Height.

и на форме появятся скроллы.

pluton 18.11.2007 21:53

Ответ: Вопросы по C#
 
в c++ можно было так задавать макросы:
Код:

#define func(a, b) (a >= b)
как это сделать в решётке? директивой define можно задавать только символы:
Цитата:

#define lets you define a symbol, so that by using the symbol as the expression passed to the #if directive, the expression will evaluate to true
аналогично в c++ можно было задавать константы:
Код:

#define pi 3.14
в c# можно сделать
Код:

const double pi = 3.14;
как сделать через директивы препроцессора?

Riccon 19.11.2007 11:12

Ответ: Вопросы по C#
 
Цитата:

Сообщение от EvgeniuXP2 (Сообщение 1262409)

Добавлено через 4 дня
Вопрос снимаю, чертыре дня убил, но нашел как сделать :)

Как удалось решить проблему?

mikle 19.11.2007 19:05

Ответ: Вопросы по C#
 
pluton, С# - это ведь нормальный, современный язык с очень продуманной безопасностью. Поэтому на нем нельзя писать отвратительный небезопасный код, который даже на С++ лет эдак nнадцать уже никто не пишет :)

pluton 19.11.2007 21:42

Ответ: Вопросы по C#
 
Цитата:

Сообщение от mikle (Сообщение 1267178)
Поэтому на нем нельзя писать отвратительный небезопасный код

:) небезопасный код - это в смысле с указателями? его писать на c# можно. имхо, указатели - удобная весчь; может сейчас уже их меньше применяют, потому что есть всякие классы, объекты, авто сборщики мусора, и тд....
и всё таки как сделать макросы? это же безопасный код?

EvgeniuXP2 20.11.2007 19:39

Ответ: Вопросы по C#
 
Цитата:

Сообщение от Riccon (Сообщение 1266576)
Как удалось решить проблему?

через метафайл. Мне диаграммы нужно хранить в графическом формате, чтобы позже можно было распечатать их... формат emf идеально для этого подоходит - рабочая область в программе может быть ОЧЕНЬ большой (у bmp и jpg - 5000х5000 единиц для 1Гб памяти, у emf - можно выставить и 500 000 х 500 000 и занимать будет 2 кб + ACDSee или Paint его видят и можно сразу печатать как картинку :)).

Добавлено через 4 минуты
Цитата:

Сообщение от mikle (Сообщение 1267178)
pluton, С# - это ведь нормальный, современный язык с очень продуманной безопасностью. Поэтому на нем нельзя писать отвратительный небезопасный код, который даже на С++ лет эдак nнадцать уже никто не пишет :)

не совсем продуманный, так, например, если написать код:

boolean m;

If(m=1)

компилятор не воспримет за ошибку :)

EvgeniuXP2 22.11.2007 20:23

Ответ: Вопросы по C#
 
Еще вопрос, как такое сделать?:

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

pluton 22.11.2007 21:50

Ответ: Вопросы по C#
 
Цитата:

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

вот смотри:
код
Цитата:

Сообщение от EvgeniuXP2 (Сообщение 1272528)
узнавать длину, которая не должна превышать ширины прямоугольника....

не очень понял этот кусок

EvgeniuXP2 24.11.2007 14:47

Ответ: Вопросы по C#
 
незнаю, может я неправильно мыслю :)

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

создать прямоугольник по умолчанию, в котором можно ввести одну строку, если пользователь набирает и переходит на вторую строку, нижняя граница прямоугольника (его отображаемый контур) смещается ниже и таким образом пользователь может ввести вторую строку и т.д.

реализация:
можно сделать проще, установить моноширный шрифт и отслеживать сколько символов в одной строке и прямоугольник пересоздавать... а если не моноширный шрифт то как тогда проделать?

т.е. нужно постоянно узнавать либо длину строки (при редактировании) хотя бы в пикселях, чтобы отследить превышает ли она ширину прямоугольника и высоту прямоугольника менять автоматически, либо отслеживать пересекаются ли нарисованный прямоугольник и прямоугольник фонта, если да, то менять высоту нарисованного прямоугольника. Только я таких методов незнаю:-1) узнать длину строки в пикселях 2) когда в DrawString отправляю текст и прямоугольник, то я незнаю, сколько же текст на самом деле займет строк, и какая должна быть действительна высота прямоугольника, т.к. текст может полностью не влезть и в конце он может окзаться обрезанным, а мне текст нужно вывести в любом случае полный изменив высоту прямоугольника...

Svintuss 25.11.2007 03:08

Ответ: Вопросы по C#
 
Цитата:

Сообщение от EvgeniuXP2 (Сообщение 1275421)
незнаю, может я неправильно мыслю :)

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

создать прямоугольник по умолчанию, в котором можно ввести одну строку, если пользователь набирает и переходит на вторую строку, нижняя граница прямоугольника (его отображаемый контур) смещается ниже и таким образом пользователь может ввести вторую строку и т.д.

реализация:
можно сделать проще, установить моноширный шрифт и отслеживать сколько символов в одной строке и прямоугольник пересоздавать... а если не моноширный шрифт то как тогда проделать?

т.е. нужно постоянно узнавать либо длину строки (при редактировании) хотя бы в пикселях, чтобы отследить превышает ли она ширину прямоугольника и высоту прямоугольника менять автоматически, либо отслеживать пересекаются ли нарисованный прямоугольник и прямоугольник фонта, если да, то менять высоту нарисованного прямоугольника. Только я таких методов незнаю:-1) узнать длину строки в пикселях 2) когда в DrawString отправляю текст и прямоугольник, то я незнаю, сколько же текст на самом деле займет строк, и какая должна быть действительна высота прямоугольника, т.к. текст может полностью не влезть и в конце он может окзаться обрезанным, а мне текст нужно вывести в любом случае полный изменив высоту прямоугольника...

Слушай, а почему бы тебе не использовать скрытый ричтекстбкс(без вывода его на экран), такой же ширины, как и твой прямоугольник. он сам будет дробить текст на строки, и по его свойству Lines ты сможеш определять необходимую высоту твоего прямоугольника.
Может не совсем по канонам ООП, зато работает. Я подобную фичу использую для вывода на печать.

EvgeniuXP2 25.11.2007 16:10

Ответ: Вопросы по C#
 
Цитата:

Сообщение от Svintuss (Сообщение 1276387)
Слушай, а почему бы тебе не использовать скрытый ричтекстбкс(без вывода его на экран), такой же ширины, как и твой прямоугольник. он сам будет дробить текст на строки, и по его свойству Lines ты сможеш определять необходимую высоту твоего прямоугольника.
Может не совсем по канонам ООП, зато работает. Я подобную фичу использую для вывода на печать.

Попытка №1:

RichTextBox rtb = new RichTextBox();
rtb.Parent = this;
rtb.Location = new Point(Font.Height, Font.Height);
rtb.Size = new Size(100, 20);
rtb.Anchor |= AnchorStyles.Right;
rtb.Text = "Здесь мой текст, сколько строк он займет?";

и как теперь узнать программно, сколько строк в RichTextBox-е этот текст занял? (свойство Lines возвращает string [1]).

Svintuss 26.11.2007 11:01

Ответ: Вопросы по C#
 
Во первых, Location и Anchor тебе не нужны, поскольку текстбокс не выводится на экран (ну да это мелочи).
Во вторых, хорошо бы еще задать шрифт, а то он по умолчанию кажется 8-й ставит и даже очень длинные фразы может уместить в одну строку.
В третих, Lines возвращает массив строк, на которые текстбокс порезал твой текст. Т.е. количество строк узнается "rtb.Lines.Length". Т.к. фраза короткая, то он уместил ее в одну строку, что и вернул.
В целях отладки можно этот текстбокс все-таки гденить вывести на экран, потом в окончательном варианте скроеш.


Текущее время: 18:31. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2026, vBulletin Solutions, Inc. Перевод: zCarot
Copyright ©2004 - 2026 NoWa.cc

Время генерации страницы 0.05224 секунды с 9 запросами