哪位老大点评一下俺个人中意的ecere

betty_betty2008 2011-12-13
参考网址:www.ecere.com

贴一段代码:
import "ecere"
 
class Friends : struct
{ 
    public:
     char * name; 
     char * job; 
     int age; 
 
};
Array<Friends> friends  
{ 
    [{"Erika", "waitress", 18}, 
     {"汤姆斯", "程序员", 25}, 
     {"乔治", "警察", 26}, 
     {"Michael", "producer", 38}, 
     {"Jane", "steward", 28} ]
}; 
 
 
class Form1 : Window
{
   text = "人员数据";
   background = activeBorder;
   borderStyle = sizable;
   hasMaximize = true;
   hasMinimize = true;
   hasClose = true;
   size = { 576, 432 };
   anchor = { horz = -11, vert = 3 };
   nativeDecorations = true;

   bool bfirst, blast;

   DataField nameField { dataType = class(String), width = 50,header = "姓名",editable = true  };
   DataField jobField { dataType = class(String), width = 80 ,header = "工作",editable = true };
   DataField ageField { dataType = class(int),  header = "年龄",editable = true };

   Form1()
  {
         DataRow row;
         Iterator<Friends> i { friends };
         int j=0;
 
         bfirst=true;
         blast=true; 
 
         listBox1.AddField(nameField);
         listBox1.AddField(jobField);
         listBox1.AddField(ageField);
 
 
        for(i:friends)        
         {
 
            row = listBox1.AddRow();
            row.tag = j;
            row.SetData(nameField, i.name);
            row.SetData(jobField, i.job);
            row.SetData(ageField, i.age);
            j++;
 
         }
 
 
  }
   Label lblInfo { this, text = "信息", inactive = false, font = { "Tahoma", 20 }, size = { 516, 149 }, position = { 40, 176 }, isGroupBox = true };
   Button btnFirst 
   {
      this, text = "(F)第一条", altF, size = { 70, 29 }, position = { 64, 344 };

      bool NotifyClicked(Button button, int x, int y, Modifiers mods)
      {
         listBox1.SelectRow(listBox1.firstRow);
         listBox1.Activate();
 
         bfirst=true;
         blast =false;
         Update(null);
         return true;
      }
   };
   Button btnPrev 
   {
      this, text = "(P)上一条", altP, size = { 70, 29 }, position = { 144, 344 };

      bool NotifyClicked(Button button, int x, int y, Modifiers mods)
      {
 
         if(!listBox1.currentRow || listBox1.currentRow.previous)
            listBox1.SelectRow(listBox1.currentRow ? listBox1.currentRow.previous : listBox1.lastRow);
                   
         listBox1.Activate();
         blast=false;
         if(!listBox1.currentRow.previous)
            bfirst = true;
         Update(null);
         return true;
      }
   };
   Button btnNext 
   {
      this, text = "(N)下一条", altN, size = { 71, 29 }, position = { 224, 344 };

      bool NotifyClicked(Button button, int x, int y, Modifiers mods)
      {
         if(!listBox1.currentRow || listBox1.currentRow.next)
            listBox1.SelectRow(listBox1.currentRow ? listBox1.currentRow.next : listBox1.firstRow);
    
         listBox1.Activate();
         bfirst=false;
         if(! listBox1.currentRow.next)
            blast=true;
         Update(null);
         return true;
      }
   };
   Button btnLast 
   {
      this, text = "(L)末一条", altL, size = { 69, 29 }, position = { 304, 344 };

      bool NotifyClicked(Button button, int x, int y, Modifiers mods)
      {
         listBox1.SelectRow(listBox1.lastRow);
         listBox1.Activate();
 
         blast=true;
         bfirst=false;
 
         Update(null);
         return true;
      }
   };
   Button btnExit 
   {
      this, text = "(x)退出", altX, size = { 66, 29 }, position = { 464, 344 };

      bool NotifyClicked(Button button, int x, int y, Modifiers mods)
      {
         if(MessageBox{type=okCancel,text="关闭",contents="确定要退出吗?"}.Modal()==ok)
            Destroy(0);
         return true;
      }
   };
   Label lblName { lblInfo, this, "姓名:", size = { 278, 33 }, position = { 48, 32 } };
   Label lblJob { lblInfo, this, "工作:", size = { 302, 33 }, position = { 48, 72 } };
   Label lblAge { lblInfo, this, "年龄:", size = { 318, 33 }, position = { 48, 104 } };
   ListBox listBox1 
   {
      this, size = { 500, 132 }, position = { 40, 24 }, moveRows = true, true, true, hasHeader = true, sortable = true;

      bool NotifySelect(ListBox listBox, DataRow row, Modifiers mods)
      {
         Friends temp{};
         temp.name=listBox.currentRow.GetData(nameField);
         temp.job=listBox.currentRow.GetData(jobField);
         temp.age=listBox.currentRow.GetData(ageField);         
         lblName.SetText("姓名:%s",temp.name);
         lblJob.SetText("工作:%s",temp.job);
         lblAge.SetText("年龄:%d",temp.age);
         Update(null);
         delete temp;
         return true;
      }
   };

   void OnRedraw(Surface surface)
   {
       btnPrev.disabled =bfirst;  
       btnNext.disabled =blast;  
   }
}
 
Form1 form1 {};
                                                                                                                         
achun 2011-12-13
多么期待有 D 原生的啊,这个依然是MinGW,D本身是跨平台的,可以不依赖与其他开发环境的,但是GUI这方面很缺乏啊
hqs7636 2011-12-13
很强大!

eC 是啥?这库跟d没关系吧
betty_betty2008 2011-12-13
hqs7636 写道
很强大!

eC 是啥?这库跟d没关系吧


在C上面盖的一层,先把eC原码编码成C代码最后编译成机器码,具体实现菜鸟不懂,需老大出来点评。
shawind 2011-12-13
把它自己的语言翻译成C语言,然后再编译,与zimbu,vala的工作方式差不多。
hqs7636 2011-12-13
原始的c库在哪?用d包装一下也不错,比gtk,qt好吧,
Colorful 2011-12-14
老实说,这些 GUI 库在 Windows Runtime 面前弱爆了。最理想的状况是有一个 D 的 Projection。其实 D 的类型系统和 C# 很相似啊。
betty_betty2008 2011-12-14
Colorful 写道
老实说,这些 GUI 库在 Windows Runtime 面前弱爆了。最理想的状况是有一个 D 的 Projection。其实 D 的类型系统和 C# 很相似啊。

主要觉得ecere和C走得很近(基本上就是一家子),另外对3D和声音库包装的很好。
cubemap 2011-12-14
下载尝试了一下,这东西,超赞啊,有C++/CLI的感觉,但更灵活,有些地方接近动态语言了。
和D语言相比,兼容C语言是个很大的优势。
决定长期关注这个语言
betty_betty2008 2011-12-14
cubemap 写道
下载尝试了一下,这东西,超赞啊,有C++/CLI的感觉,但更灵活,有些地方接近动态语言了。
和D语言相比,兼容C语言是个很大的优势。
决定长期关注这个语言

github:
https://github.com/ecere/sdk
用mingw32 直接make,超方便,如果不喜欢代码编缉器的风格,可以在编译前修改\ide\src\designer\CodeEditor.ec然后再编译。更详细地看论坛了。
个人最喜欢的是UI设计器双向转换,UI拖拉能生成代码,手工的代码能立即在UI设计器里生成相应的控件。

不好意思,不该在这里说这么多。
Global site tag (gtag.js) - Google Analytics