2020年4月12日 星期日

Design Pattern Bridge

Bridge 的目的在於認兩個類型的類別彼此之間不要有依賴的關係,而是都依賴介面。
如Render和Shape之間的關係。
Render有VectorRender及ScaleRender
Shape有Circle及Rectangle及...
如果以 inheritance 的方式來產生以VectorRender畫的Circle、以ScaleRender畫的Circle,那這樣類別的數量就會一直增加。
所以,我們讓Circle有一個IRender。
而IRender提供很多基本的方法,讓Circle可以透過這些方法畫出來。
因此,我們可以在建構Circle的時候,把真正的Render再放進去。
若是有新的Render,也都不用修改Circle。
2020年4月5日 星期日

Cheat Engine Step 7 Tutorial 中文翻譯

- Code Injection 可以讓你在Process中植入一段程式碼並且執行它。
- 在這個練習中,你會有一個生命值並且有一個按鈕。每次按一下按鈕會減少生命值1。你的任務就是使用Code Injection讓每次按按鈕增加生命值2。
1. 找到生命值的位置,並且找到有寫在寫入這個位置
2. 在disassemble中找到減少生命值的code,並且開啟 auto assembler window (ctrl +a)
3. 點擊template找到code injection並且給它減少生命值的位置,之後會自動產生可以讓你使用的組合碼

注意:
1. 在windows 2000 以前,你必需要找到一個記憶體區塊來放置 code ,但新的cpu已經不需要這樣做。
2. 在template中看到的 "place your code here" 就是放置你修改的code的地方
3. 有一個有用的指令碼為 "ADD instruction",以下是幾個範例
3-1. ADD [00901234],9 代表要增加9在這個00901234這個記憶體位置
3-2. ADD [ESP+4],9 代表要在ESP+4 這個記憶體位置的值再加上9
4. 你應該要刪掉原本的code,不然你需要一次新增生命值3。因為原本減1,再加上inject code + 2。所以總共 + 3
2019年9月2日 星期一

屬性值動態改變 (動畫)

屬性值動態改變 (動畫)

屬性值可以透過動態的功能做到動態改變。
改變值的元件依照值的類型而有所不同,如果是一般的數值,就可以使用
DoubleAnimation

DoubleAnimation

操作一個值 (Storyboard.TargetProperty),給予開始值(From)和結束值(To),會在指定的時間週期(Duration)內,將值從開始值變化到結束值

<DoubleAnimation Storyboard.TargetProperty="StrokeThickness" 
             From="0" To="2" Duration="0:0:0.5" 
             AutoReverse="True" RepeatBehavior="Forever"
             />

當變化完成後,若想倒轉回到原本的值,可以下AutoReverse。若想要重覆此流程,可以下RepeatBehavior。

RepeatBehavior有以下幾種用法

  • Forever 不斷重覆
  • 0:0:4 重覆直到4秒
  • 2x 重覆兩次
  • 0.5x 重覆半次

在DoubleAnimation中,要指定變化的屬性並不是透過DoubleAnimation中的屬性,而是要使用附加屬性 Storyboard.TargetProperty。因此,我們可以知道在DoubleAnimation的外層一定包著Storyboard

Storyboard

Storyboard用來決定

  • 要改變的屬性
  • 擁有此屬性的對像
  • 讓動畫前進、停止、暫停等動作
    Storyboard並不直接設定改變的屬性及對像,相反的是透過附加屬性在子系的xxxAnimation中去指定

觸發動畫的方法

  1. 直接在控制項的Triggers中,新增EventTrigger
    • 由於EventTrigger是看事件的,所以直接使用 < BeginStoryboard >

         <Rectangle Fill="#FFF4F4F5"  Height="100" Margin="215,186,0,0"  Width="100">
         <Rectangle.Triggers>
             <EventTrigger  RoutedEvent="Loaded">
                 <BeginStoryboard>
                     <Storyboard>
                         <DoubleAnimation Storyboard.TargetProperty="Opacity"  From="1.0" To="0" Duration="0:0:2" AutoReverse="True" RepeatBehavior="Forever"/>
                     </Storyboard>
                 </BeginStoryboard>
             </EventTrigger>
         </Rectangle.Triggers>
      
  2. 在控制項中的Triggers中,新增Trigger
  • 由於Trigger在設定的時候,就要指定值是什麼的時候才要觸發Trigger。所以會有值被修改造成觸發及值被修改後再次等待觸發兩種狀況。
    這兩種狀況發生時,要作動的內容分別寫在
    <Trigger.EnterActions>

    <Trigger.ExitActions>
  • Trigger只能設在Style中的Triggers,不能設在控制項中的Triggers。所以要在控制項中的Resource中設定Style來設定此Trigger

< Rectangle Stroke="Black" Fill="#FFF4F4F5"  Height="100" Margin="74,178,0,0"  Width="100">
    < Rectangle.Resources>
        < Style TargetType="Rectangle">
            < Style.Triggers>
                < Trigger Property="IsMouseOver"  Value="True">
                    < Trigger.EnterActions>
                        < BeginStoryboard>
                            < Storyboard>
                                < DoubleAnimation Storyboard.TargetProperty="StrokeThickness" From="0" To="4" Duration="0:0:1"/>
                            < /Storyboard>
                        < /BeginStoryboard>
                    < /Trigger.EnterActions>
                < /Trigger>
            < /Style.Triggers>
        < /Style>
    < /Rectangle.Resources>
< /Rectangle>
2019年8月29日 星期四

自定義控制項的 Background

自定義控制項的Background

在WPF的Control中, Background需要一個Brush。而Brush有以下幾種
  • Brush
  • SolidColorBrush
  • LinearGradientBrush
  • RadialGradientBrush
  • DrawingBrush
  • VisualBrush
    前四種是單純只有顏色變化的Brush,對於形狀沒有改變。
    而最後兩種,是會改變要上色的形狀。

DrawingBrush

DrawingBrush可以自行定義形狀。
DrawingBrush可以吃一個Drawing,透過組合多個Drawing,就可以產生我們要的形狀。
Drawing有以下的分類
  • GeometryDrawing – 繪製圖形。
    • LineGeometry - 畫線
    • RectangeGeometry - 畫方形
    • EllipseGeometry - 畫圓
    • PathGeometry - 畫任意路徑
  • ImageDrawing – 繪製影像。
  • GlyphRunDrawing – 繪製的文字。
  • VideoDrawing – 播放音訊或視訊檔。
  • DrawingGroup – 繪製其他繪圖。 您可以使用繪圖群組,來將其他繪圖結合為單一複合繪圖。
我們可以透過CombinedGeometry結合兩個Geometry作出交集、聯集的組合。然後設到GeometryDrawing中。
GeometryDrawing除了要設定圖案外,還要設定外框的顏色、粗細以及要填滿的顏色。
GeometryDrawing設定好了,再設定給DrawingBrush,而DrawingBrush再設定給Background就大功告成。
順序如下
  1. Background -> DrawingBrush
  2. DrawingBrush -> GeometryDrawing
  3. GeometryDrawing -> CombinedGeometry
  4. CombinedGeometry -> RectangeGeometry, ElipseGeometry
2019年8月28日 星期三

輸入法設定

在 Win10 讓輸入法更好切換或是不會誤按

1. 設定->裝置->輸入->進階鍵盤設定
就可以開啟Win7常見的設定畫面