От Delphi к С#. От Windows Forms к WPF

Наконец-то у меня программистский пост ))

Итак передо мной встала задача сделать себе достаточно сложный виндовый инструментарий. Этакую мини IDE для упрощения и ускорения разработки игр. Гугление показало, что самое популярное решение для таких задач это C#

Сначала я долго не мог к нему подступиться.
Visual Studio отпугивал меня своим размером. Я скачал гораздо менее масштабную SharpDevelop и ничего не понял.
SharpDevelop
Тогда я скачал новую делфи (Седьмая например не поддерживает png из коробки. Да и просто как-то не хочется отставать от прогресса)…. Внезапно она оказалась гораздо более похожей на SharpDevelop чем на Delphi7.
НоваяDelphi

В новой делфи список элементов справа, свойства слева, в SharpDevelop наоборот.
А если не видно разницы, зачем использовать «begin end;» вместо скобок?

Я так же подумал. Вообще делфишный синтаксис была моя единственная претензия к Delphi.
(Была у меня как-то задача написать маааленькую виндовую програмку уже после того как я наловчился работать с AS3 (Синтаксис похож на JS), так вот работать в делфи было неудобно и неприятно) поэтому я наконец установил Visual Studio.

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

Эти метания заняли дохрена времени. Дохренища. Поэтому, если ты, читатель, стоишь на распутье и тоже думаешь как бы подступиться к виндовому программированию, сразу ставь бесплатную версию VS не парь себе мозг. Да есть минусы. Но запаренный мозг того не стоит.

(И хотя тот же SharpDevelop сейчас меня уже не напугает, я не жалею что поставил VS. Жалею только, что тупил долго.)

Итак, наконец, началось мое знакомство с C#

И тут же новая засада. Есть два фремворка над C#, чтобы писать виндовый софт. Один из них называется Windows Forms, другой WPF. Да я убил еще Х дней пытаясь понять какой из них выбрать, в итоге почему-то выбрал Windows Forms.

И дело пошло. И пошло довольно быстро. Я был доволен Студией, Шарпом, и конечно же собой уже на следующий день. Да я гуглил каждую мелочь, но все это было очень легко и даже такие сложные задачи, как перетаскивание элемента мышкой по форме, перетаскивание картинки на форму в работающем приложении, масштабирование картинки мышкой (в работающем приложении). Все эти задачи решались гораздо быстрее, чем могло бы показаться.

Были конечно минусы. Например студия не может Ctrl+D (дублировать строку), к чему я очень привык, пока писал код играм в FlashDevelop. К счастью нашлась комбинация Ctrl+C+V, которая если ничего не выделять копирует всю строку. (Да перезаписывает буфер обмена, но что поделать). SharpDevelop к слову работает так же. Delphi же не может ни так, ни так.

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

Собственно я сделал приличный кусок своей софтинки работая неделю по 0,5-2 часа в день. (картинки я накидал мышкой в рабочую область в уже работающем приложении)

WF_1

Но как можно догадаться из заголовка, «что-то пошло не так». Посмотрите на картинки в центре рабочей зоны. Они не поддерживают прозрачность.

2016 год. Самая популярная среда программирования. Самый популярный десктопный язык. А прозрачность не поддерживается. У картинки есть возможность быть прозрачной относительно своего родителя и все. Но этого не достаточно для нормальной работы, как минимум потому, что родитель «обрезает» ребенка по своим границам (иначе бы я сделал просто «матрешку» из картинок).

Ну что ж. Спасибо Windows Forms, ты меня познакомила с C#, теперь я пойду к WPF.

WPF

первое впечатление: шок и ужас.

Если WF была понятна для любого, кто провел достаточно времени с формами делфей, то WPF, хоть и выглядит как-то похоже, но имеет под капотом принципиально другую логику.

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

Я так и не смог сделать вот этой простой вещи мышкой (В Windows Forms, я сделал мышкой весь интерфейс). Код, который как бы «автогенерируется» при добавлении элементов на форму на самом деле ручной целиком. (не считая начальной области, не имеющей отношения к происходящему на экране)

Возможно если у вас богатый опыт верстки HTML, вам этот подход очень понравится, но я был в шоке… Первые два часа. А потом втянулся… и в общем-то если перестроить мозги, то это даже будет нравиться.

Пока рано о чем-то говорить детально. На WPF  я пересел только сегодня. Сначала надо посмотреть, как пойдут задачи, которые я уже сделал в WF, и по итогам судить.

P.S Хоть пост и подразумевает обсуждение, но так же предполагается, что он будет полезен новичкам. Что я могу посоветовать.
1) Если вы ничего не умеете вообще, то слепите что-нибудь простое на html+php, это даст самый начальный опыт для начала знакомства с WPF
2) Если вы никогда не делали и не планируете делать сайты, да и приложения, требующие взаимопрозрачность картинок вас не интересуют, то можно брать WF. Но вообще-то WF морально устаревший, как я понял.
3) Если у вас хороший опыт работы с сайтами, то WPF без вариантов.
4) Если вы 50-летний махровый делфист и вам тяжело дается новое, но потянуло на сишную сторону, то WF, конечно.
5) Если вы не знакомы с сишным синтакисом и именно он вас пугает, то бросайте эту чушь. Знакомьтесь. Сишный синтаксис уже захватил мир и это никуда не уйдет. А дальше см п.1-4.

P.S.S Си шарп позволяет писать на русском. Ужас.

PictureBox Леваяминиатюрка = new PictureBox();
Леваяминиатюрка.Image = image;
Леваяминиатюрка.SizeMode = PictureBoxSizeMode.StretchImage;
Леваяминиатюрка.Width = 50;
Леваяминиатюрка.Height = 50;
flowLayoutPanel1.Controls.Add(Леваяминиатюрка);


Автор: Elsper.ru


VN:F [1.9.14_1148]
Rating: 0.0/10 (0 votes cast)

16 thoughts on “От Delphi к С#. От Windows Forms к WPF

  1. Java совсем-совсем не подошла? В сторону т. н. WIDE (веб IDE) не смотрел?

  2. Писец… кто-то еще на этом програмирует.
    А вообще сейчас в тренде html5 интерфейс. Это когда берется html код и берется компонент браузера. Далее в браузере этот код показывается.
    WPF просто куче народа не понравился. Путаный. Сам пытался его осознать, так и не поперло. Вата и шлак, хотя гуй красивый выходит. Вот например из старого проектика: http://take.ms/CjTyU4 К слову: я так его и не закончил. Решил, что лучше запилить все это в виде плагина, который я, собственно, сейчас и продаю. Или вот еще: http://take.ms/nLSZA — это заготовка бота. Тоже заброшен мной. Есть еще, но на другом, на старом, ноуте. Тут только бэкапы с рабочего стола, которые я перенес и то совершенно случайно.
    Красиво? Да. Но бесполезно. Гораздо лучше на этом фоне смотрится, например, QML или JavaFX. Понятнее. Яснее там все. Не то что гребаный XAML копать… А вы видели как в этой жопе делаются анимации, видели? Нет уж. Мне такого не надо.
    Что-же до Windows Forms — они не умирают и никогда не умрут. Просто о них не говорят. Это что-то вроде безотказного инструмента, который позволяет сваять нужный прокет не заморачиваясь лишним гемороем в виде дизайна и прочего. Ведь в конечном итоге что для пользователя важнее: анимашечки или функционал? Функционал.
    И еще. Делфи и 2016 год… я думал делфи умер в 2005…

  3. Спасибо за комменты. Я уж думал никого вообще прогерские посты не заинтересуют)))
    ___

    В сторону java даже не двигался. Ключевым пунктом задачи для меня была «виндовость», а это вроде как си шарп.

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

    Вопрос HTML5 вставал передо мной еще два года назад, когда я думал на чем писать игры. Так же ничего не зная и издалека все технологии были на одно лицо. Более того тогда был бум HTML5 игр, это было модно, это была истерика. Спонсоры давали бабло абсолютно на ровном месте за html5 игры, только потому, что это html5.
    Но HTML5 был не лучшим выбором для сложных проектов, типа игр.
    (В итоге я выбрал flash, о чем ни разу не пожалел. Да в инете технологию не обосрал только ленивый, но свои задачи она решает полностью. )

    Так что все имеющее прямое отношение к браузеру я отмел по причине неадекватной скорости работы.

    ___
    Вообще мне кажется веб и js пытаются применить за пределами веба просто потому, что не хотят учиться чему-то новому. Я не прав? Может я просто не в курсе или мои представления устарели?

  4. >Вообще мне кажется веб и js пытаются применить за пределами веба просто потому, что не хотят учиться чему-то новому. Я не прав?

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

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

  5. Вот все говорят DElphi умер … бла..бла..бла… — мне кажется это уже стало модным выражением. Объясните мне пожалуйста, объективные причины почему он умер ?!?! Скобки и begin end не в счет.

  6. Более того делфи даже поддерживает винду, мак, андроид, яйфон. И в общем-то развивается что-то там.

    ___
    Delphi тупо проиграли по «маркетингу», мне кажется. Просто стал немодным.

    Хотя конечно есть и другие причины.
    Тот же низкий порог вхождения сыграл сначала в плюс, сделав среду популярной (ну или тут больше заслуга пиратов), а потом наоборот в минус (низкий уровень программистов).
    Про низкий уровень от себя могу заметить, что хоть как-то развиваться, как программист, я стал только начав писать игры (а это сложные и довольно большие приложения) на AS3 (который, к слову тоже уже лет десять хоронят)

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

    Ну и еще одно.
    Под делфи долгие годы понималось delphi7. Он был выпущен в 2002 году. Я честно не знаю, почему так произошло. Но факт есть факт. Массовый Delphi остановился в 2002 году.

  7. Лично я использую Delphi7 в рабочих задачах до сих пор и смысла его заменять пока не вижу, хотя и очень хорошо присматривался к более свежим версиям. А для души использую VisualStudio C# и Unity3D. Более свежий Delphi был интересен в основном FireMonkey фреймворком, из-за его возможностей 3D, но тут победил Unity3d…

    Кстати в последнем Unity3D подрихтовали работу с 2D и GUI, не рассматривал такой вариант?

  8. Возможно я позже перейду с флеша на юнити или кокос.
    Но на данный момент с меня пока хватит новых навыков )

  9. Ты так с AppoDeal и работаешь? Задался тут вопросом впихнуть рекламу в игру, что можешь сказать о них?

  10. Да работаю.
    Хороший саппорт. Удобно с выплатами (вебмани). Ну и сама система делает то, что и обещает.

  11. Привет, по поводу программирования игр — посмотри на Haxe в связке с HaxeFlixel

    Это как развитие ActionScript, но мультиплатформенный и открытый. Есть куча библиотек, есть куча игр. HaxeFlixel очень развитая библиотека, мини игры, как у Kechapp, реально можно делать за неделю (если всё уже выучил 🙂

    Есть поддержка Tiled Editor и Ogmo Editor, в которых можно создавать уровни, просто рисуя спрайтами.

    техдемки смотри тут — haxeflixel.com/demos/
    сам язык haxe — на haxe.org
    но документация по haxeflixel важнее

    код писать можно в FlashDevelop, а можно в собственном форке ФлешДевелопа — HaxeDevelop
    есть плагин для Intellij Idea, но его не пробовал. Я сам сейчас на Джаве сижу, поэтому Idea очень уважаю — но она требует куда больше ресурсов, чем ФлешДевелоп

  12. Спасибо за совет, но от флеша я буду переходить или к более нативным платформам, или к юнити или к кокосу. Если когда то буду переходить.

    А менять флеш на флеш+ я не буду.
    На флеше уже огромные наработки. )

  13. Чистые ас3 либы в swc отлично подключаются в Haxe
    так что наработки можно перенести

    вот тут человек флешер хороший отчёт приводит по своей миграции на Haxe — flasher.ru/forum/blog.php?b=640

  14. И еще нюанс — из Haxe можно компилировать в HTML5-игры

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Спoнcopcкиe ссылки

Актуальная информация babytoy.ru на нашем сайте.