Последние сообщения

Страницы: [1] 2 3
1
Android версия, перспективы / Какой должна быть Android версия Timik
« Последний ответ от Main Moderator Декабрь 27, 2014, 02:30:11 am »
Будем рады услышать мнения о том, какой должна быть Android версия Timik.
Пользовательский интерфейс, решаемые задачи, отчеты, соображения о любой функциональности...
2
В версии 2.0 уже появилась возможность символьно решать задачи изгиба балок, причем в двух плоскостях изгиба. Поэтому панель решения задач вынесена влево - вверху, и состоит из 4 кнопок получения различных видов решений.
Timik 2.0

3
Вопрос актуален
обновил silverlight, поменял браузер не помогает

4
Здравствуйте ! Проблема следующая, нету кнопки   start в правом верхнем углу ? Чтобы это могло быть ? пробовал с двух компьютеров, результат один.
5
Timik Windows Phone / Timik Mobile вышел в свет
« Последний ответ от Main Moderator Август 18, 2013, 11:47:14 pm »
Англоязычная версия Timik Mobile доступна в магазине Windows Phone.
Пару скриншотов релиза









6
Что такое Тимик / Timik 2.0 Beta
« Последний ответ от Main Moderator Август 18, 2013, 11:07:32 pm »
Уважаемые пользователи!
Для тестирования доступна версия 2.0 приложения Timik Online Helper.

Приглашаем к тестированию.
В числе новых особенностей укажем на изгиб балки в двух плоскостях, а также уникальную возможность генерирования полностью символьных решений. Как говорят, лучше один раз увидеть, чем сто раз услышать.
Видео обзор приложения
Изгиб балки онлайн. Сопромат XXI.
7
В большей мере о WPF / Template, Style, Trigger. Sample #1
« Последний ответ от Sergey Январь 21, 2013, 12:58:06 am »
Сегодня мы рассмотрим пример, в котором используются стиль, шаблон и триггер (Template, Style and Trigger). Перечисленные инструменты, в большей степени характерные для XAML, позволяют самым удивительным образом настраивать интерфейс пользователя.

Итак, задача будет состоять в том, чтобы настроить классический ToggleButton (кнопка с залипанием). Именно, в зависимости от того, нажата ли кнопка или нет, показывать соответствующий значок.
Инструментарий: Expression Blend, Expression Design, Visual studio.
Expression Design - великолепный графический инструмент для подготовки векторной графики и изображений для последующего использования в проектировании UI - интерфейса пользователя. Самое привлекательное состоит в том, что формат сохранения векторной графики может быть в том числе и XAML с контейнером Canvas и (или) Viewbox. Сочетание последних контейнеров предназначено именно для отображения графики. Если чуть глубже, то в этих контейнерах реализовано адаптированное расположение графических элементов, основанное на их действительных размерах.

Результат представлен рисунком ниже:


Итак, файл кода остается совершенно пустым - все реализуется в XAML. Код экземпляра, унаследованного от Window имеет вид
Код: XML
  1. <Window x:Class="MainWindow"
  2.    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3.    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4.    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  5.    Title="MainWindow" Height="156" Width="291">
  6.         <Window.Resources>
  7.                 <ResourceDictionary>
  8.                         <ResourceDictionary.MergedDictionaries>
  9.                                 <ResourceDictionary Source="TSResources.xaml"/>
  10.                         </ResourceDictionary.MergedDictionaries>
  11.                 </ResourceDictionary>
  12.         </Window.Resources>
  13.     <Grid>
  14.         <Grid.ColumnDefinitions>
  15.             <ColumnDefinition/>
  16.         </Grid.ColumnDefinitions>
  17.         <Grid.RowDefinitions>
  18.             <RowDefinition Height="Auto"/>
  19.             <RowDefinition/>
  20.         </Grid.RowDefinitions>
  21.         <Grid.Background>
  22.             <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
  23.                 <GradientStop Color="Black" Offset="0"/>
  24.                 <GradientStop Color="White" Offset="1"/>
  25.             </LinearGradientBrush>
  26.         </Grid.Background>
  27.         <DockPanel
  28.                   LastChildFill="False"
  29.                   Grid.RowSpan="1"
  30.                   Grid.Row="0"
  31.                   Grid.Column="0">
  32.             <ToggleButton MinWidth="50" MinHeight="30"
  33.                         Style="{StaticResource OpenCloseStyle}">
  34.             </ToggleButton>
  35.             <ToggleButton MinWidth="50" MinHeight="30"
  36.                 Style="{StaticResource OpenCloseStyle}"/>
  37.             <ToggleButton MinWidth="50" MinHeight="30"
  38.                 Style="{StaticResource OpenCloseStyle}"/>
  39.         </DockPanel>
  40.     </Grid>
  41. </Window>
  42.  
Ясно, что вся "основная" работа по настройке вида кнопки происходит в словаре ресурсов - в файле TSResources.xaml.
Его код представлен ниже:
Код: XML
  1. <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  2.    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">  
  3.         <DataTemplate x:Key="ArrowToOpen">
  4.         <Viewbox
  5.                         Height="20" Width="20">
  6.             <Canvas Width="122.717" Height="82.377" Clip="F1 M 0,0L 122.717,0L 122.717,82.377L 0,82.377L 0,0">
  7.                 <Path Width="122.717" Height="82.377" Stretch="Fill" StrokeThickness="2.88" StrokeLineJoin="Round" Stroke="#FF000000" Fill="#FFFFFFFF" Data="F1 M 61.172,80.937L 41.5788,61.3659L 2.90447,22.7035C 0.951843,20.7509 0.951843,17.585 2.90447,15.6324L 15.6324,2.9045C 17.585,0.951859 20.7508,0.951859 22.7035,2.9045L 61.2962,41.5235L 100.014,2.9045C 101.966,0.951859 105.132,0.951859 107.085,2.9045L 119.813,15.6324C 121.765,17.585 121.765,20.7508 119.813,22.7034L 81.2563,61.26L 61.172,80.937 Z "/>
  8.             </Canvas>
  9.         </Viewbox>
  10.     </DataTemplate>
  11.     <DataTemplate x:Key="ArrowToClose">
  12.         <Viewbox
  13.                         Height="20" Width="20">
  14.             <Canvas Width="82.377" Height="122.717" Clip="F1 M 0,0L 82.377,0L 82.377,122.717L 0,122.717L 0,0">
  15.                 <Path Width="82.377" Height="122.717" Stretch="Fill" StrokeThickness="2.88" StrokeLineJoin="Round" Stroke="#FF000000" Fill="#FFFFFFFF" Data="F1 M 80.937,61.5453L 61.3658,81.1385L 22.7035,119.813C 20.7509,121.765 17.585,121.765 15.6324,119.813L 2.90448,107.085C 0.951843,105.132 0.951843,101.966 2.90448,100.014L 41.5234,61.421L 2.90442,22.7034C 0.951782,20.7507 0.951782,17.585 2.90442,15.6323L 15.6323,2.90442C 17.585,0.951782 20.7508,0.951782 22.7034,2.90442L 61.2599,41.4609L 80.937,61.5453 Z "/>
  16.             </Canvas>
  17.         </Viewbox>
  18.     </DataTemplate>
  19.         <Style x:Key="OpenCloseStyle" TargetType="ToggleButton">
  20.                 <Style.Triggers>
  21.                         <Trigger Property="IsChecked" Value="False">
  22.                                 <Setter Property="ContentTemplate" Value="{StaticResource ArrowToOpen}"></Setter>
  23.                         </Trigger>
  24.                         <Trigger Property="IsChecked" Value="True">
  25.                                 <Setter Property="ContentTemplate" Value="{StaticResource ArrowToClose}"></Setter>
  26.                         </Trigger>
  27.                 </Style.Triggers>
  28.         </Style>
  29. </ResourceDictionary>
  30.  
Обратим внимание на два обстоятельства:
1. В Visual Studio строка ссылки на файл ресурсов Source="TSResources.xaml" воспринимается ошибкой. Мы выбрали Expression Blend - здесь есть удивительная особенность. После создания файла ресурсов перейдя во вкладку ресурсов справа, "залинковать" ресурс, например, к окну приложения. В частности, следующая часть кода вставлена автоматически Expression Blend.



Затронутый вопрос указания ссылки на файл в XAML, да и шире, вопрос подключения, скажем, внешнего класса (класса из проекта библиотеки в другой сборке) в область видимости файла XAML - довольно каверзная вещь. Например, опытным путем замечено, что файл XAML может не видеть класс "сторонней" библиотеки, хотя внешне все сделано правильно. Часто оказывается достаточным просто перекомпилировать решение при выставленной опции Any CPU (Build -> Configuration Manager). Удивительно, но факт довольно неприятный, особенно когда часами тщетно пытаешься найти причину ошибки.
Код: XML
  1.         <Window.Resources>
  2.                 <ResourceDictionary>
  3.                         <ResourceDictionary.MergedDictionaries>
  4.                                 <ResourceDictionary Source="TSResources.xaml"/>
  5.                         </ResourceDictionary.MergedDictionaries>
  6.                 </ResourceDictionary>
  7.         </Window.Resources>
  8.  
2. Строки вида "F1 M 0,0L 82.377,0L 82.377,122.717L 0,122.717L 0,0" указывают на язык (скрипт) плоской графики, применяемый дополнительно внутри XAMl. Ничто не мешает им пользоваться и непосредственно в коде.

8
В большей мере о WPF / Data Binding. Start #2 Custom Sort
« Последний ответ от Sergey Декабрь 27, 2012, 08:41:54 pm »
Пользовательская сортировка.

Случаев, когда может понадобиться указанная особенность очень много. Основная идея - автоматизированный (встроенный) механизм сравнения. Итак, добавляем третью колонку в ListView:
Код: XML
  1. <!-- Third Column -->
  2. <GridViewColumn DisplayMemberBinding="{Binding SpammIndexInForums}">
  3.                     <GridViewColumn.Header>
  4.                         <TextBlock Text="Spamm Index"/>
  5.                     </GridViewColumn.Header>
  6. </GridViewColumn>
  7.  
Как видим, отображаемые данные завязаны на SpammIndexInForums - новое свойство у StudentClass. Добавим это свойство и изменим конструктор класса
Код: vb.net
  1. Public Sub New(StudentName As String, _
  2.                    StudentAge As String, _
  3.                    SpammIndex As Integer)
  4.         Me.StudentName = StudentName
  5.         Me.Age = StudentAge
  6.         Me.SpammIndexInForums = SpammIndex
  7. End Sub
  8.  
Функцию, генерирующую коллекцию студентов перепишем в виде
Код: vb.net
  1. Public Sub GetStudentsGroup()
  2.         Dim NewFormedCollection = New ObservableCollection(Of StudentClass)
  3.         NewFormedCollection.Add(New StudentClass() With
  4.                                 {.StudentName = "Nicola", .Age = "39", .SpammIndexInForums = 3})
  5.         NewFormedCollection.Add(New StudentClass() With _
  6.                                 {.StudentName = "Peter", .Age = "43", .SpammIndexInForums = 5})
  7.         NewFormedCollection.Add(New StudentClass() With _
  8.                                 {.StudentName = "Sergey", .Age = "24", .SpammIndexInForums = 2})
  9.         NewFormedCollection.Add(New StudentClass() With _
  10.                                 {.StudentName = "Jan", .Age = "34", .SpammIndexInForums = 0})
  11.         NewFormedCollection.Add(New StudentClass() With _
  12.                                 {.StudentName = "Jeorge", .Age = "18", .SpammIndexInForums = 4})
  13.  
  14.         For i As Integer = 0 To 5
  15.             NewFormedCollection.Add(New StudentClass() With {.StudentName = "Boris" & i.ToString,
  16.                                                              .Age = (58 - i).ToString, _
  17.                                                              .SpammIndexInForums = 6 - i})
  18.         Next
  19.  
  20.         Me.StudentsGroup = NewFormedCollection
  21.     End Sub
  22.  
В StackPanel добавим третью кнопку - пользовательская сортировка, а обработчик события для нее наполним следующим содержанием:
Код: vb.net
  1.  Private Sub BtnSpammSort_Click(sender As Object, e As RoutedEventArgs) Handles BtnSpammSort.Click
  2.         ' ========================
  3.         CurrentViewOfStudents.SortDescriptions.Clear()
  4.         CurrentViewOfStudents.CustomSort = New ComparerSpammer()
  5.         ' ========================
  6.     End Sub
  7.  
Получаем следующий результат сортировки по "индексу спама, посылаемого студентом":

И, наконец, важная вещь, делающая возможной такую сортировку - объявление и приведение коллекции к особому виду. Изменения в коде главного окна:
Код: vb.net
  1. ' Dim CurrentViewOfStudents As ICollectionView
  2.     Dim CurrentViewOfStudents As ListCollectionView
  3.     Public Sub New()
  4.  
  5.         ' This call is required by the designer.
  6.         InitializeComponent()
  7.  
  8.         ' Add any initialization after the InitializeComponent() call.
  9.         CurrentViewOfStudents = CType(
  10.          CollectionViewSource.GetDefaultView(ListBoxStudentsName.ItemsSource), ListCollectionView)
  11.     End Sub
  12.  
Продолжение следует...
9
В большей мере о WPF / Data Binding. Start #2 Sort, Filter and grouping
« Последний ответ от Sergey Декабрь 27, 2012, 06:48:59 pm »
Довольная хитрая вещь кроется в разметке
Код: XML
  1. <GridViewColumn.CellTemplate>
  2.                             <DataTemplate>
  3.                                 <TextBlock Text="{Binding Age}"/>
  4.                             </DataTemplate>
  5. </GridViewColumn.CellTemplate>
  6.  
В нашем случае, при отображении лишь простого текста, нет необходимости в использовании шаблона ячейки. Есть, как всегда, "встроенное чудо" под названием DisplayMemberBinding. Формат его таков:
Код: XML
  1. <GridView>
  2.                     <!-- First Column -->
  3.                     <GridViewColumn DisplayMemberBinding="{Binding StudentName}">
  4.                         <GridViewColumn.Header>
  5.                             <TextBlock Text="Name"/>
  6.                         </GridViewColumn.Header>
  7.                     </GridViewColumn>
  8.                     <!-- Second Column -->
  9.                     <GridViewColumn DisplayMemberBinding="{Binding Age}">
  10.                         <GridViewColumn.Header>
  11.                             <TextBlock Text="Age"/>
  12.                         </GridViewColumn.Header>
  13.                     </GridViewColumn>
  14. </GridView>
  15.  
Результат выполнения кода остается прежним.
10
В большей мере о WPF / Data Binding. Start #2 Sort, Filter and grouping
« Последний ответ от Sergey Декабрь 27, 2012, 06:17:32 pm »
Как провести сортировку "одновременно" - по двум свойствам? И как отображать сразу два свойства?

Изменим разметку главного окна, окультурив контейнеры (Grid, добавим StackPanel) и добавив вторую кнопку сортировки:
Код: XML
  1. <Window
  2.    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3.    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4.    xmlns:classes="clr-namespace:ClassLibrary;assembly=ClassLibrary"
  5.    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" x:Class="MainWindow"
  6.    Title="MainWindow" d:DesignWidth="244.5" d:DesignHeight="318">
  7.     <Window.Resources>
  8.         <classes:StudentCollectionClass x:Key="StudentCollectionInstance"/>
  9.     </Window.Resources>
  10.     <Grid>
  11.         <Grid.ColumnDefinitions>
  12.             <ColumnDefinition Width="Auto"/>
  13.             <ColumnDefinition/>
  14.         </Grid.ColumnDefinitions>
  15.         <ListView Background="LightGreen"
  16.                         x:Name="ListBoxStudentsName"
  17.                         ItemsSource="{Binding StudentsGroup,
  18.                          Source={StaticResource StudentCollectionInstance}}"
  19.                         MinWidth="200" Grid.Column="1">
  20.             <ListView.View>
  21.                 <GridView>
  22.                     <!-- First Column -->
  23.                     <GridViewColumn>
  24.                         <GridViewColumn.CellTemplate>
  25.                             <DataTemplate>
  26.                                 <TextBlock Text="{Binding StudentName}"/>
  27.                             </DataTemplate>
  28.                         </GridViewColumn.CellTemplate>
  29.                         <GridViewColumn.Header>
  30.                             <TextBlock Text="Name"/>
  31.                         </GridViewColumn.Header>
  32.                     </GridViewColumn>
  33.                     <!-- Second Column -->
  34.                     <GridViewColumn>
  35.                         <GridViewColumn.CellTemplate>
  36.                             <DataTemplate>
  37.                                 <TextBlock Text="{Binding Age}"/>
  38.                             </DataTemplate>
  39.                         </GridViewColumn.CellTemplate>
  40.                         <GridViewColumn.Header>
  41.                             <TextBlock Text="Age"/>
  42.                         </GridViewColumn.Header>
  43.                     </GridViewColumn>
  44.                 </GridView>
  45.             </ListView.View>
  46.         </ListView>
  47.         <StackPanel HorizontalAlignment="Left" VerticalAlignment="Top">
  48.             <Button x:Name="BtnSort"
  49.                                 Content="Sort Name"
  50.                                 HorizontalAlignment="Left"
  51.                                 VerticalAlignment="Top"
  52.                                 Width="75"/>
  53.             <Button x:Name="BtnSortAge"
  54.                                 Content="Sort Age"
  55.                                 HorizontalAlignment="Left"
  56.                                 VerticalAlignment="Top"
  57.                                 Width="75"/>
  58.         </StackPanel>
  59.     </Grid>
  60. </Window>
  61.  
Конечно, можно было бы "вкладывать" свойства-описания элементов внутрь тегов XAML, сократив немного код. Но приведенный подход демонстрирует "принцип глубокой вложенности" элементов XAML.
Изменим код главного окна:
Код: vb.net
  1. Imports System.ComponentModel
  2.  
  3. Class MainWindow
  4.     Dim CurrentViewOfStudents As ICollectionView
  5.     Public Sub New()
  6.  
  7.         ' This call is required by the designer.
  8.         InitializeComponent()
  9.  
  10.         ' Add any initialization after the InitializeComponent() call.
  11.         CurrentViewOfStudents = _
  12.          CollectionViewSource.GetDefaultView(ListBoxStudentsName.ItemsSource)
  13.     End Sub
  14.  
  15.     Private Sub BtnSort_Click(sender As Object, e As RoutedEventArgs) Handles BtnSort.Click
  16.         ' ========================
  17.         CurrentViewOfStudents.SortDescriptions.Clear()
  18.         CurrentViewOfStudents.SortDescriptions.Add(New SortDescription("StudentName", _
  19.                                                        ListSortDirection.Ascending))
  20.         ' ========================
  21.     End Sub
  22.  
  23.     Private Sub BtnSortAge_Click(sender As Object, e As RoutedEventArgs) Handles BtnSortAge.Click
  24.         ' ========================
  25.         CurrentViewOfStudents.SortDescriptions.Clear()
  26.         CurrentViewOfStudents.SortDescriptions.Add(New SortDescription("Age", _
  27.                                                        ListSortDirection.Ascending))
  28.         ' ========================
  29.     End Sub
  30. End Class
  31.  
И немного "разнообразим" возрасты студентов в классе - поставщике StudentCollectionClass
Код: vb.net
  1. For i As Integer = 0 To 5
  2.             NewFormedCollection.Add(New StudentClass() With _
  3.                                                            {.StudentName = "Boris" & i.ToString,
  4.                                                              .Age = (58 - i).ToString})
  5. Next
  6.  
Получаем следующий результат:


Последовательное нажатие кнопок приводит к сортировке по имени или возрасту.
Страницы: [1] 2 3