Статьи Галерея Форум Чат Файлы HowTo Ссылки Поиск
Текущее время: 15 дек 2019, 08:01




Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: GUI на C#.
СообщениеДобавлено: 19 май 2004, 22:38 
Неотъемлемая часть форума
Аватара пользователя

У нас с: 06.02.2002
Сообщения: 9760
Откуда: Менск
Вобщем, если кому-то лениво копать самому... Вот что-то типа helloworld. М.б. после него кому-то станет интересно и я буду копать mono не в одиночку.

Код:
using System;
using Gtk;

class MyTEST
{
static TextView tv;
   static void Main ()
   {
      Application.Init ();
      Gtk.Window win = new Gtk.Window ("MyTEST");
      win.SetDefaultSize (400, 300);
      win.DeleteEvent += new DeleteEventHandler (OnWinDelete);
      VBox vbox = new VBox (false, 0);
      HBox hbox = new HBox (false, 0);
      win.Add (vbox);
      tv = new TextView ();
      tv.Buffer.Text = "Hello World";
      vbox.PackStart (tv, true, true, 0);
      Button btn = new Button("Button 1");
      btn.Clicked += new EventHandler (SomeButtonClickA);
      vbox.PackStart (btn, true, true, 0);
      vbox.PackStart (hbox, true, true, 0);
      Button btnA = new Button("Button 2");
      btnA.Clicked += new EventHandler (SomeButtonClick);
      Button btnB = new Button("Button 3");
      btnB.Clicked += new EventHandler (SomeButtonClick);
      hbox.PackStart (btnA, true, true, 0);
      hbox.PackStart (btnB, true, true, 0);
      win.ShowAll ();
      Application.Run ();
   }
   static void OnWinDelete (object o, DeleteEventArgs args)
   {
      Application.Quit ();
   }
   static void SomeButtonClick (object o, EventArgs args)
   {
      Console.WriteLine ("Dont touch the key");
   }
   static void SomeButtonClickA (object o, EventArgs args)
   {
      Console.WriteLine ("Dont touch the key");
      Console.WriteLine (tv.Buffer.Text);
   }

}



Уж не знаю, насколько эт проавильно. но тем не менее...
собирать так:
Код:
mcs hw-gtk.cs -r:gtk-sharp

Необходимые пакеты:
gtk-sharp
mono
mono-mcs
Остально - по зависимостям. Работает вполне приятно... Если прикрутить binfmt-misc - будет еще приятнее...


Пакеты можно брать в unstable, сборка для stable - тут.
Код:
deb http://www.debianplanet.org/mono stable main
deb-src http://www.debianplanet.org/mono stable main


Скриптик для поднятия bifmt-misc выглядит так:
Код:
#!/bin/sh
# Copyright (C) 2002 Alp Toker <alp@atoker.com>
# Licensed under the terms of the GNU GPL

if [ ! -e /proc/sys/fs/binfmt_misc/register ]; then
   /sbin/modprobe binfmt_misc
   mount -t binfmt_misc none /proc/sys/fs/binfmt_misc
fi

if [ -e /proc/sys/fs/binfmt_misc/register ]; then
   echo ':CLR:M::MZ::/usr/bin/mono:' > /proc/sys/fs/binfmt_misc/register
else
   echo "No binfmt_misc support"
   exit 1
fi

exit 0

Длря работы в ядре надо включить формат исполнимых файлов MISC. - после этого можно запускать программы просто как ./program.exe
Если кому-то это показалось интересным, то я и дальше буду выкладывать всякие свои полуфабрикаты с комментариями. Если нало - можно написать коментарии к примеру, но там ИМХО и так все понятно. Кроме того интересные вещи появляются в /usr/share/dotnet/gtk-sharp-examples/ после установки пакета gtk-sharp-examples. Ессно следует ставить какйо-нить monodoc - мне больше нарвится monodoc-http.

_________________
Опыт растет прямо пропорционально выведенному из строя оборудованию


Вернуться к началу
 Не в сети Профиль  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 19 май 2004, 23:11 
Неотъемлемая часть форума
Аватара пользователя

У нас с: 06.02.2002
Сообщения: 9760
Откуда: Менск
по просьбам общественности...
Код:
using System;
using Gtk;

Здесь мы говорим, что будeт испоьзванs модули System и Gtk. Иерархию методов и свойств для этих методов см. в monodoc.
Код:
class MyTEST
{
static TextView tv;

Начлало программы MyTEST. Объявлена статическая переменная tv типа TextView.
Код:
   static void Main ()
   {
      Application.Init ();

Функция main. С нее начинается выполнение программы.
Код:
      Gtk.Window win = new Gtk.Window ("MyTEST");
      win.SetDefaultSize (400, 300);

Создали объект win типа Gtk.Window путам вызова конструктора с параметром "MyTEST" По сути - это окно с заголовком MyTEST
Код:
      win.DeleteEvent += new DeleteEventHandler (OnWinDelete);

Зарегистрировали обработчик события удаления окна - функцию OnWinDelete.
Код:
      VBox vbox = new VBox (false, 0);
      HBox hbox = new HBox (false, 0);

Создали два контейнера - горизонтальный и вертикальный.
Код:
      win.Add (vbox);

Добавили вертикальный контейнейр в окно.
Код:
      tv = new TextView ();
      tv.Buffer.Text = "Hello World";

Создали объект tv и заслали в него строчку "Hello World".
Код:
      vbox.PackStart (tv, true, true, 0);

Поместили объект tv в вертикальный контейнер.
Код:
      Button btn = new Button("Button 1");

Создали объект типа Button с надписью "Button 1"
Код:
 
      btn.Clicked += new EventHandler (SomeButtonClickA);

И зарегистрировали обработчик нажатия.
Код:
      vbox.PackStart (btn, true, true, 0);
      vbox.PackStart (hbox, true, true, 0);
      Button btnA = new Button("Button 2");
      btnA.Clicked += new EventHandler (SomeButtonClick);
      Button btnB = new Button("Button 3");
      btnB.Clicked += new EventHandler (SomeButtonClick);
      hbox.PackStart (btnA, true, true, 0);
      hbox.PackStart (btnB, true, true, 0);

Тута делаются еще кнопки, записхиваются в контейнеоры и регистрируются обработчики.
Код:
      win.ShowAll ();
      Application.Run ();
   }

Теперь ЭТО показать на экране. Можно даже потрогать ;) Конец Main()
Код:

   static void OnWinDelete (object o, DeleteEventArgs args)
   {
      Application.Quit ();
   }
   static void SomeButtonClick (object o, EventArgs args)
   {
      Console.WriteLine ("Dont touch the key");
   }
   static void SomeButtonClickA (object o, EventArgs args)
   {
      Console.WriteLine ("Dont touch the key");
      Console.WriteLine (tv.Buffer.Text);
   }

}

Это - функции обработчики событий. Console определен System. Там впрочем и помимо Console есть много чего интересного. С.м. monodoc.

_________________
Опыт растет прямо пропорционально выведенному из строя оборудованию


Вернуться к началу
 Не в сети Профиль  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 20 май 2004, 11:24 
Неотъемлемая часть форума
Аватара пользователя

У нас с: 25.07.2003
Сообщения: 623
Откуда: Minsk
Llama писал(а):
по просьбам общественности...


хе-хе.. прикольно! :-)))

_________________
Never touch the running program!!!


Вернуться к началу
 Не в сети Профиль  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 20 май 2004, 13:10 
Администратор
Аватара пользователя

У нас с: 09.09.2001
Сообщения: 1338
2 Llama: Выкладывай, выкладывай, если это планируется делать и дальше, так могу тебе WebLog выделить, чтоб ты туда всяческие программерские штуки. Лично мне это интересно, тем более что про C#.


Вернуться к началу
 Не в сети Профиль Личный альбом  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 20 май 2004, 15:44 
Неотъемлемая часть форума
Аватара пользователя

У нас с: 20.06.2002
Сообщения: 827
Откуда: Брюссель
Я тебя Llama люблю и уважаю :) , да только если ты вздумал приводить примеры кода, можно было сделать его покрасивше, даже такой маленький кусочек, а именно, избавиться от статических членов и вспомнить о том, что C# - это ОО язык.

Код:
using System;
using Gtk;

namespace Test{
    class MyWindow : Gtk.Window{
        TextView tv;
        MessageDialog dialog;
       
        public MyWindow() : base("MyTest"){
           
            SetDefaultSize (400, 300);
            SetDefaultSize (400, 300);
            DeleteEvent += new DeleteEventHandler (OnWinDelete);
           
            BuildItself();
           
            ShowAll();
            Application.Run();
        }
       
        void BuildItself(){
              VBox vbox = new VBox (false, 0);
              HBox hbox = new HBox (false, 0);
              Add (vbox);
              tv = new TextView ();
              tv.Buffer.Text = "Hello World";
              vbox.PackStart (tv, true, true, 0);
              Button btn = new Button("Say it");
              btn.Clicked += new EventHandler (SomeButtonClickA);
              vbox.PackStart (btn, true, true, 0);
              vbox.PackStart (hbox, true, true, 0);
              Button btnA = new Button("Button 2");
              btnA.Clicked += new EventHandler (SomeButtonClick);
              Button btnB = new Button("Button 3");
              btnB.Clicked += new EventHandler (SomeButtonClick);
              hbox.PackStart (btnA, true, true, 0);
              hbox.PackStart (btnB, true, true, 0);       
        }
       
        void OnWinDelete(object o, DeleteEventArgs args) {
            Application.Quit ();
        }
       
        void SomeButtonClick(object o, EventArgs args) {
            Say("Don't touch the key");
        }
       
        void SomeButtonClickA(object o, EventArgs args) {
            Say(tv.Buffer.Text);
        }   
       
        void Say(string message)  {
            dialog = new MessageDialog(this, DialogFlags.Modal,
                MessageType.Info, ButtonsType.Ok, message);
            dialog.Run();
            dialog.Destroy();
        }       
   
        static void Main(){
            Application.Init();
            new MyWindow();
        }     
    }
}



_________________
Изображение


Вернуться к началу
 Не в сети Профиль  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 21 май 2004, 21:38 
Спасибо, идея хорошая :-)
Буду рад увидеть новый код.
Кстати, как обстоят дела с проектом альтернативного .Net окружения, внутри проекта Mono? Чтобы программы ставить там, где .Net не стоит.


Вернуться к началу
  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
[ All resources are available under GNU GPL ] [ Support ] [ Hosted by DataHata | MyCloud.by ] [ Powered by phpBB® Forum Software © phpBB Group ]

LVEE Winter LVEE Rambler's Top100