• úvod
  • témata
  • události
  • tržiště
  • diskuze
  • nástěnka
  • přihlásit
    registrace
    ztracené heslo?
    TENCOKACISTROMYProgramovani v C#, F# a dalsich jazycich pro .NET, Mono a ostatni CLI implementace
    3MARIE
    3MARIE --- ---
    TENCOKACISTROMY: jo. kdyz to DLL zaregistruju pres regasm, tak to DLL nejspis spousti system ne ? takze se z te .NET aplikace chci napojit na tu stejnou DLL.
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    3MARIE: Cili se chces pripojit na jiz spustenej proces?
    3MARIE
    3MARIE --- ---
    TENCOKACISTROMY: delphi chci nainterfacovat na to DLL a z toho DLL potom chci posilat informace do .NET forms aplikace
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    3MARIE: Pockej a ty chces jen vyuzivat tu .NETovou assembly a nebo chces komunikovat mezi dvema bezicimi procesy?
    3MARIE
    3MARIE --- ---
    jeste me napadlo ze bych mezi tim DLL a Forms udelal taky COM link, ale v NET by to melo snad jit najak primo ne ?
    3MARIE
    3MARIE --- ---
    JACHYMKO: tak ten interface Delphi / .NET (exe) nejde z nejakyho duvodu rozchodit. Ale DLL Delphi zareferencujou v pohode. Takze bych to chtel udelat tak, ze Delphi komunikujou pres COM s DLL a DLL potom pres .NET s Forms applikaci (exe). Ted akorat nevim, jak propojit to DLL s Forms. Kdyz zareferencuju to DLL v Delphi i v .NET klientovi, tak vytvarim jeho instance, takze tudiz mi to do ty forms aplikace neproleze. Diky za radu.
    BAT
    BAT --- ---
    BAT: Tak jsem to prozatim prasacky vyresil takhle...

    Menu itemy vypadaji takto:
      <item Name="Polozka 1" ItemID="ITM1">
    DataTemplate pro menu itemy upraven takto:
      <MenuItem Header="{Binding XPath=@Name}" DisplayMemberPath="{Binding XPath=@ItemID}" Click="gsoTree_ContextMenu_Click">
    ...do DisplayMemberPath se ulozi retezec, podle ktereho potom uvnitr gsoTree_ContextMenu_Click poznam na kterou polozku menu se kliklo,
    a podle toho uz se muze provest patricna akce.
    DisplayMemberPath jsem nevybral nahodou, je to jedinej atribut menuitem do ktereho slo v datatemplate neco ulozit a pak to zase jinde ziskat.
    Sice je to pouzitelne, ale pripada mi to jako prasecina, a taky netusim jestli si timhle v budoucnu nenabehnu do nejakyho problemu.
    Takze pokud nekdo vite jak by to melo byt spravne, tak prosim poradte.
    BAT
    BAT --- ---
    Tak jsem to nakonec predelal pro WPF, a mam zas novej problem.

    Mam soubor "menu.xml" obsahujici definice ruznych menu, napr.:
      <Menus xmlns="">
        <Menu id="gsoTreeContextMenu">
          <item Name="Polozka 1"/>
          <item Name="Polozka 2"/>
        </Menu>
        ...
      </Menus>
    
    ...ktere takhle nabinduju:
      <XmlDataProvider x:Key="gsoMenuProvider" XPath="//Menus/Menu[@id='gsoTreeContextMenu']/*" Source="Resources\menus.xml" />
      ...
      <TreeView.ContextMenu>
        <ContextMenu>
          <ContextMenu.ItemsSource>
            <Binding Source="{StaticResource gsoMenuProvider}" XPath="//Menus/Menu[@id='gsoTreeContextMenu']/*" />
          </ContextMenu.ItemsSource>
        </ContextMenu>
      </TreeView.ContextMenu>
    
    No a ted bych do toho chtel dostat zpracovani udalosti kdyz se na urcitou polozku klikne.
    Predstavoval bych si to jako Hurvinek valku asi nejak takhle:
          <item Name="Polozka 1" Command="gsoTree_EditNode"/>
          <item Name="Polozka 2" Command="gsoTree_DeleteNode"/>
    
    Doufam, ze rozumite o co mi jde. Da se to nejak udelat?
    BAT
    BAT --- ---
    TENCOKACISTROMY: Ja se ty multiline nody puvodne snazil udelat podobnym zpusobem, ale porad bylo neco spatne (vetsinou dochazelo k tomu, ze se z neznameho duvodu text nody rozlozil do 3 radek) a obdelnik vyberu byl vuci "bounding boxu" nody posunuty do leva o -3px a dalsi drobne opticke vady... (ktere by asi sly vyresit, ale za ten cas by to asi nestalo)
    Rozhodne diky za pomoc, ale asi rovnou prejdu na WPF jak radi JACHYMKO.
    Obema moc dekuju, usetrili jste mi buh vi kolik hodin badani a googleni a pokusovani.
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    JACHYMKO: Pokud maji byt vsechny stejne vysoke, tak to jde.
    private void FTreeViewSample_Load(object sender, EventArgs e) {
    	this.treeView1.DrawMode = TreeViewDrawMode.OwnerDrawText;
    	this.treeView1.DrawNode += new DrawTreeNodeEventHandler(treeView1_DrawNode);
    	this.treeView1.ItemHeight *= 2;
    
    	var node_A = this.treeView1.Nodes.Add("First node");
    	var node_A_A = node_A.Nodes.Add("First node - first child");
    	var node_A_A_A = node_A_A.Nodes.Add("First node - first child - first child");
    	var node_A_B = node_A.Nodes.Add("First node - second child");
    	var node_A_C = node_A.Nodes.Add("First node - third child");
    	var node_B = this.treeView1.Nodes.Add("Second node");
    }
    
    void treeView1_DrawNode(object sender, DrawTreeNodeEventArgs e) {
    	var rectLine1 = e.Bounds;
    	rectLine1.Height /= 2;
    
    	var rectLine2 = e.Bounds;
    	rectLine2.Height /= 2;
    	rectLine2.Y += rectLine2.Height;
    
    	var textLine1 = e.Node.Text;
    	if ( null == textLine1 ){ textLine1 = string.Empty; }
    	var textLine2 = new string(textLine1.Reverse().ToArray());
    
    	var fontReqular = e.Node.NodeFont;
    	if (null == fontReqular) { fontReqular = e.Node.TreeView.Font; }
    
    	using (var brushLine1 = new SolidBrush(Color.Red)) {
    		e.Graphics.DrawString(textLine1, fontReqular, brushLine1, rectLine1);
    	}
    	using (var fontBold = new Font(fontReqular, FontStyle.Bold)) {
    		using (var brushLine2 = new SolidBrush(Color.Green)) {
    			e.Graphics.DrawString(textLine2, fontBold, brushLine2, rectLine2);
    		}
    	}
    }
    
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    BAT, JACHYMKO: To by melo jit normalne pomoci property DrawMode a udalosti DrawNode.
    SLUPKA
    SLUPKA --- ---
    BAT: Ale je, nevytvářej WinForms aplikace, ale WPF aplikaci...
    BAT
    BAT --- ---
    JACHYMKO: Tak to mam teda smulu, protoze v Express edici System.Windows.Controls vubec neni :(
    BAT
    BAT --- ---
    Potreboval bych si napsat custom control TreeView v MS Visual C# 2010 Express.

    Duvod:
    Potrebuju mit v ramci jedne TreeNode vice udaju zobrazenych ve dvou radcich a jeste ruznymi styly (tucnost, barva, velikost pisma, atp.).

    Muzete me nasmerovat na nejaky howto?

    C# je pro me nova vec a tak trochu tapu.
    Puvodne jsem myslel, ze bude stacit udelat si vlastni myTreeNode, ale tam jsem narazil pri pouziti v puvodnim TreeView ktery poruznu pouziva puvodni TreeNode (vyhniva to na duvodech jako myTreeNode != TreeNode, atp.).
    NECROMAN
    NECROMAN --- ---
    TENCOKACISTROMY: asmx umi vratit data jako xml nebo json... jinak uz jsem to vyresil - proste vratim objektovou strukturu a ten microsofti serializator to prevede na json. sice to navic strci do jednoho objektu a vsemu prida polozky __type, ale vytahat to z toho jde.
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    NECROMAN: Poslat jako string?
    NECROMAN
    NECROMAN --- ---
    Dotaz, jak pomoci asmx webservicy poslat vlastni json? Ona ma sma v sobe jakysi serializator, ktery ale do vystupu cpe navic promenne __type a take to vse zabali do objektu 'd'. Json string si umim sam vytvorit, ale ten samotny poslat nejde.
    NECROMAN
    NECROMAN --- ---
    Raj Aththanayake's Blog | VS2010 and ReSharper performances
    http://blog.rajsoftware.com/post/2011/02/01/VS2010-and-ReSharper-performances.aspx
    ESY
    ESY --- ---
    MILL: popravde netusim co chces:]]
    nahod ten obrazek co chces editovat a budem vsichni moudrejsi :]]
    Kliknutím sem můžete změnit nastavení reklam