commit 7b9e5ea7d2b567d715af243568c5016c10de981f
Author: Markus Birth <mbirth@gmail.com>
Date:   Wed Jun 26 15:44:41 2002 +0200

    Initial commit

diff --git a/MDME.dfm b/MDME.dfm
new file mode 100644
index 0000000..7db27cd
--- /dev/null
+++ b/MDME.dfm
@@ -0,0 +1,1192 @@
+object Form1: TForm1
+  Left = 190
+  Top = 104
+  BorderIcons = [biSystemMenu, biMinimize]
+  BorderStyle = bsSingle
+  Caption = 
+    'MDME - MilkDrop Message Editor --- (c)2002 by Markus Birth <mbir' +
+    'th@webwriters.de>'
+  ClientHeight = 554
+  ClientWidth = 779
+  Color = clBtnFace
+  Font.Charset = DEFAULT_CHARSET
+  Font.Color = clWindowText
+  Font.Height = -11
+  Font.Name = 'MS Sans Serif'
+  Font.Style = []
+  OldCreateOrder = False
+  ShowHint = True
+  OnCreate = FormCreate
+  PixelsPerInch = 96
+  TextHeight = 13
+  object MainPageControl: TPageControl
+    Left = 0
+    Top = 0
+    Width = 777
+    Height = 553
+    ActivePage = TabSheet6
+    RaggedRight = True
+    TabIndex = 2
+    TabOrder = 0
+    object TabSheet1: TTabSheet
+      Caption = 'Messages'
+      object MessageExample: TLabel
+        Left = 224
+        Top = 0
+        Width = 513
+        Height = 129
+        Alignment = taCenter
+        Caption = 'Example'
+        Color = clBlack
+        Constraints.MaxHeight = 129
+        Constraints.MaxWidth = 513
+        Constraints.MinHeight = 129
+        Constraints.MinWidth = 513
+        Font.Charset = DEFAULT_CHARSET
+        Font.Color = clWhite
+        Font.Height = -85
+        Font.Name = 'Tahoma'
+        Font.Style = [fsBold]
+        ParentColor = False
+        ParentFont = False
+        Layout = tlCenter
+      end
+      object Label18: TLabel
+        Left = 432
+        Top = 248
+        Width = 3
+        Height = 13
+      end
+      object Messages: TListBox
+        Left = 0
+        Top = 0
+        Width = 217
+        Height = 521
+        ItemHeight = 13
+        TabOrder = 0
+        OnClick = MessagesClick
+      end
+      object MessageText: TEdit
+        Left = 224
+        Top = 128
+        Width = 513
+        Height = 21
+        TabOrder = 1
+        OnChange = MessageTextChange
+      end
+      object GroupBox3: TGroupBox
+        Left = 680
+        Top = 168
+        Width = 81
+        Height = 89
+        Caption = 'Changes'
+        TabOrder = 2
+        object SaveMessage: TButton
+          Left = 8
+          Top = 16
+          Width = 65
+          Height = 33
+          Caption = 'SAVE'
+          Font.Charset = DEFAULT_CHARSET
+          Font.Color = clRed
+          Font.Height = -11
+          Font.Name = 'MS Sans Serif'
+          Font.Style = [fsBold]
+          ParentFont = False
+          TabOrder = 0
+          OnClick = SaveMessageClick
+        end
+        object DiscardMessage: TButton
+          Left = 8
+          Top = 48
+          Width = 65
+          Height = 17
+          Caption = 'Discard'
+          TabOrder = 1
+          OnClick = DiscardMessageClick
+        end
+        object DelMessage: TButton
+          Left = 8
+          Top = 64
+          Width = 65
+          Height = 17
+          Caption = 'DEL'
+          Font.Charset = DEFAULT_CHARSET
+          Font.Color = clRed
+          Font.Height = -11
+          Font.Name = 'MS Sans Serif'
+          Font.Style = []
+          ParentFont = False
+          TabOrder = 2
+          OnClick = DelMessageClick
+        end
+      end
+      object PageControl1: TPageControl
+        Left = 224
+        Top = 152
+        Width = 449
+        Height = 369
+        ActivePage = TabSheet3
+        TabIndex = 0
+        TabOrder = 3
+        object TabSheet3: TTabSheet
+          Caption = 'Font'
+          object Label2: TLabel
+            Left = 0
+            Top = 8
+            Width = 61
+            Height = 13
+            Caption = 'Font presets:'
+          end
+          object MFont: TListBox
+            Left = 0
+            Top = 20
+            Width = 145
+            Height = 197
+            ItemHeight = 13
+            TabOrder = 0
+            OnClick = MFontClick
+          end
+          object cbFontOver: TCheckBox
+            Left = 248
+            Top = 4
+            Width = 97
+            Height = 17
+            Hint = 'Overrides the font-face of the font-preset.'
+            Caption = 'Font override:'
+            TabOrder = 1
+            OnClick = cbFontOverClick
+          end
+          object MFontOver: TListBox
+            Left = 248
+            Top = 20
+            Width = 145
+            Height = 197
+            Enabled = False
+            ItemHeight = 13
+            TabOrder = 2
+            OnClick = MFontOverClick
+          end
+          object GroupBox6: TGroupBox
+            Left = 24
+            Top = 240
+            Width = 377
+            Height = 81
+            Caption = 'Advanced Font settings'
+            TabOrder = 3
+            object Label12: TLabel
+              Left = 12
+              Top = 20
+              Width = 45
+              Height = 13
+              Caption = 'Font size:'
+            end
+            object Label13: TLabel
+              Left = 63
+              Top = 39
+              Width = 70
+              Height = 13
+              Caption = 'almost invisible'
+            end
+            object Label14: TLabel
+              Left = 316
+              Top = 39
+              Width = 46
+              Height = 13
+              Caption = 'enormous'
+            end
+            object MFontSize: TTrackBar
+              Left = 56
+              Top = 16
+              Width = 313
+              Height = 25
+              Hint = 'Sets the font-size from 0 (left) up to 100 (right).'
+              Max = 100
+              Orientation = trHorizontal
+              Frequency = 10
+              Position = 1
+              SelEnd = 0
+              SelStart = 0
+              TabOrder = 0
+              ThumbLength = 15
+              TickMarks = tmBottomRight
+              TickStyle = tsAuto
+              OnChange = MFontSizeChange
+            end
+            object cbBoldOverOn: TCheckBox
+              Left = 64
+              Top = 56
+              Width = 89
+              Height = 17
+              Hint = 'Overrides the bold-attribute of the font-preset.'
+              Caption = 'bold override:'
+              TabOrder = 1
+              OnClick = cbBoldOverOnClick
+            end
+            object cbBoldOver: TCheckBox
+              Left = 152
+              Top = 56
+              Width = 49
+              Height = 17
+              Caption = 'bold'
+              Enabled = False
+              Font.Charset = DEFAULT_CHARSET
+              Font.Color = clWindowText
+              Font.Height = -11
+              Font.Name = 'MS Sans Serif'
+              Font.Style = [fsBold]
+              ParentFont = False
+              TabOrder = 2
+              OnClick = cbBoldOverClick
+            end
+            object cbItalOver: TCheckBox
+              Left = 320
+              Top = 56
+              Width = 49
+              Height = 17
+              Caption = 'italic'
+              Enabled = False
+              Font.Charset = DEFAULT_CHARSET
+              Font.Color = clWindowText
+              Font.Height = -11
+              Font.Name = 'MS Sans Serif'
+              Font.Style = [fsItalic]
+              ParentFont = False
+              TabOrder = 3
+              OnClick = cbItalOverClick
+            end
+            object cbItalOverOn: TCheckBox
+              Left = 232
+              Top = 56
+              Width = 89
+              Height = 17
+              Hint = 'Overrides the italic-attribute of the font-preset.'
+              Caption = 'italic override:'
+              TabOrder = 4
+              OnClick = cbItalOverOnClick
+            end
+          end
+        end
+        object TabSheet4: TTabSheet
+          Caption = 'Color'
+          ImageIndex = 1
+          object GroupBox4: TGroupBox
+            Left = 8
+            Top = 12
+            Width = 425
+            Height = 185
+            Caption = 'Message Color'
+            TabOrder = 0
+            object MColorSample: TLabel
+              Left = 328
+              Top = 39
+              Width = 87
+              Height = 138
+              Alignment = taCenter
+              Caption = 'Color sample'
+              Color = clWhite
+              Constraints.MaxHeight = 138
+              Constraints.MaxWidth = 87
+              Constraints.MinHeight = 138
+              Constraints.MinWidth = 87
+              Font.Charset = DEFAULT_CHARSET
+              Font.Color = clBlack
+              Font.Height = -11
+              Font.Name = 'MS Sans Serif'
+              Font.Style = []
+              ParentColor = False
+              ParentFont = False
+              Layout = tlCenter
+            end
+            object Label7: TLabel
+              Left = 11
+              Top = 42
+              Width = 14
+              Height = 20
+              Caption = 'R'
+              Font.Charset = DEFAULT_CHARSET
+              Font.Color = clRed
+              Font.Height = -16
+              Font.Name = 'MS Sans Serif'
+              Font.Style = [fsBold]
+              ParentFont = False
+            end
+            object Label8: TLabel
+              Left = 11
+              Top = 90
+              Width = 15
+              Height = 20
+              Caption = 'G'
+              Font.Charset = DEFAULT_CHARSET
+              Font.Color = clLime
+              Font.Height = -16
+              Font.Name = 'MS Sans Serif'
+              Font.Style = [fsBold]
+              ParentFont = False
+            end
+            object Label9: TLabel
+              Left = 11
+              Top = 138
+              Width = 13
+              Height = 20
+              Caption = 'B'
+              Font.Charset = DEFAULT_CHARSET
+              Font.Color = clBlue
+              Font.Height = -16
+              Font.Name = 'MS Sans Serif'
+              Font.Style = [fsBold]
+              ParentFont = False
+            end
+            object Label6: TLabel
+              Left = 96
+              Top = 64
+              Width = 73
+              Height = 13
+              Caption = 'Randomization:'
+            end
+            object Label10: TLabel
+              Left = 96
+              Top = 112
+              Width = 73
+              Height = 13
+              Caption = 'Randomization:'
+            end
+            object Label11: TLabel
+              Left = 96
+              Top = 160
+              Width = 73
+              Height = 13
+              Caption = 'Randomization:'
+            end
+            object Label27: TLabel
+              Left = 147
+              Top = 17
+              Width = 172
+              Height = 13
+              Caption = '(Randomization is always adjustable)'
+              Font.Charset = DEFAULT_CHARSET
+              Font.Color = clGrayText
+              Font.Height = -11
+              Font.Name = 'MS Sans Serif'
+              Font.Style = []
+              ParentFont = False
+            end
+            object MColR: TTrackBar
+              Left = 24
+              Top = 40
+              Width = 300
+              Height = 25
+              Enabled = False
+              Max = 255
+              Orientation = trHorizontal
+              Frequency = 32
+              Position = 255
+              SelEnd = 0
+              SelStart = 0
+              TabOrder = 0
+              ThumbLength = 15
+              TickMarks = tmBottomRight
+              TickStyle = tsAuto
+              OnChange = MColRChange
+            end
+            object MColG: TTrackBar
+              Left = 24
+              Top = 88
+              Width = 300
+              Height = 25
+              Enabled = False
+              Max = 255
+              Orientation = trHorizontal
+              Frequency = 32
+              Position = 255
+              SelEnd = 0
+              SelStart = 0
+              TabOrder = 1
+              ThumbLength = 15
+              TickMarks = tmBottomRight
+              TickStyle = tsAuto
+              OnChange = MColGChange
+            end
+            object MColB: TTrackBar
+              Left = 24
+              Top = 136
+              Width = 300
+              Height = 25
+              Enabled = False
+              Max = 255
+              Orientation = trHorizontal
+              Frequency = 32
+              Position = 255
+              SelEnd = 0
+              SelStart = 0
+              TabOrder = 2
+              ThumbLength = 15
+              TickMarks = tmBottomRight
+              TickStyle = tsAuto
+              OnChange = MColBChange
+            end
+            object MVarR: TTrackBar
+              Left = 168
+              Top = 64
+              Width = 150
+              Height = 17
+              Max = 255
+              Orientation = trHorizontal
+              Frequency = 32
+              Position = 0
+              SelEnd = 0
+              SelStart = 0
+              TabOrder = 3
+              ThumbLength = 10
+              TickMarks = tmBottomRight
+              TickStyle = tsAuto
+            end
+            object MVarG: TTrackBar
+              Left = 168
+              Top = 112
+              Width = 150
+              Height = 17
+              Max = 255
+              Orientation = trHorizontal
+              Frequency = 32
+              Position = 0
+              SelEnd = 0
+              SelStart = 0
+              TabOrder = 4
+              ThumbLength = 10
+              TickMarks = tmBottomRight
+              TickStyle = tsAuto
+            end
+            object MVarB: TTrackBar
+              Left = 168
+              Top = 160
+              Width = 150
+              Height = 17
+              Max = 255
+              Orientation = trHorizontal
+              Frequency = 32
+              Position = 0
+              SelEnd = 0
+              SelStart = 0
+              TabOrder = 5
+              ThumbLength = 10
+              TickMarks = tmBottomRight
+              TickStyle = tsAuto
+            end
+            object cbDefFont: TCheckBox
+              Left = 8
+              Top = 16
+              Width = 113
+              Height = 17
+              Hint = 'Overrides the font-color of the font preset.'
+              Caption = 'Font color override'
+              TabOrder = 6
+              OnClick = cbDefFontClick
+            end
+          end
+        end
+        object TabSheet5: TTabSheet
+          Caption = 'Position && Time'
+          ImageIndex = 2
+          object GroupBox5: TGroupBox
+            Left = 8
+            Top = 8
+            Width = 209
+            Height = 329
+            Caption = 'Position on screen'
+            TabOrder = 0
+            object MScreen: TImage
+              Left = 33
+              Top = 24
+              Width = 161
+              Height = 121
+              Cursor = crCross
+              OnMouseDown = MScreenMouseDown
+            end
+            object Label28: TLabel
+              Left = 8
+              Top = 192
+              Width = 73
+              Height = 13
+              Caption = 'Randomization:'
+            end
+            object Label29: TLabel
+              Left = 7
+              Top = 211
+              Width = 7
+              Height = 13
+              Caption = 'X'
+            end
+            object Label30: TLabel
+              Left = 7
+              Top = 235
+              Width = 7
+              Height = 13
+              Caption = 'Y'
+            end
+            object Label31: TLabel
+              Left = 25
+              Top = 255
+              Width = 6
+              Height = 13
+              Caption = '0'
+            end
+            object Label32: TLabel
+              Left = 184
+              Top = 254
+              Width = 19
+              Height = 13
+              Caption = 'max'
+            end
+            object Label34: TLabel
+              Left = 5
+              Top = 176
+              Width = 201
+              Height = 13
+              Caption = '(The text will appear inside the yellow box.)'
+              Font.Charset = DEFAULT_CHARSET
+              Font.Color = clGrayText
+              Font.Height = -11
+              Font.Name = 'MS Sans Serif'
+              Font.Style = []
+              ParentFont = False
+              Transparent = True
+            end
+            object Label15: TLabel
+              Left = 6
+              Top = 280
+              Width = 31
+              Height = 13
+              Caption = 'Effect:'
+            end
+            object Label16: TLabel
+              Left = 22
+              Top = 296
+              Width = 28
+              Height = 26
+              Alignment = taRightJustify
+              Caption = #188' shrink'
+              WordWrap = True
+            end
+            object Label17: TLabel
+              Left = 182
+              Top = 296
+              Width = 23
+              Height = 26
+              Alignment = taCenter
+              Caption = '4x grow'
+              Transparent = True
+              WordWrap = True
+            end
+            object Label19: TLabel
+              Left = 74
+              Top = 295
+              Width = 3
+              Height = 13
+              Caption = 'I'
+            end
+            object Label26: TLabel
+              Left = 123
+              Top = 296
+              Width = 23
+              Height = 26
+              Alignment = taCenter
+              Caption = '2x grow'
+              WordWrap = True
+            end
+            object MPosX: TTrackBar
+              Left = 24
+              Top = 145
+              Width = 177
+              Height = 29
+              Max = 10000
+              Orientation = trHorizontal
+              Frequency = 1000
+              Position = 5000
+              SelEnd = 0
+              SelStart = 0
+              TabOrder = 0
+              ThumbLength = 15
+              TickMarks = tmTopLeft
+              TickStyle = tsAuto
+              OnChange = MPosXChange
+            end
+            object MPosY: TTrackBar
+              Left = 8
+              Top = 16
+              Width = 25
+              Height = 137
+              Max = 10000
+              Orientation = trVertical
+              Frequency = 1000
+              Position = 5000
+              SelEnd = 0
+              SelStart = 0
+              TabOrder = 1
+              ThumbLength = 15
+              TickMarks = tmBottomRight
+              TickStyle = tsAuto
+              OnChange = MPosYChange
+            end
+            object MRandX: TTrackBar
+              Left = 19
+              Top = 208
+              Width = 182
+              Height = 25
+              Max = 10000
+              Orientation = trHorizontal
+              Frequency = 1000
+              Position = 0
+              SelEnd = 0
+              SelStart = 0
+              TabOrder = 2
+              ThumbLength = 15
+              TickMarks = tmBottomRight
+              TickStyle = tsAuto
+              OnChange = MRandXChange
+            end
+            object MRandY: TTrackBar
+              Left = 19
+              Top = 232
+              Width = 182
+              Height = 25
+              Max = 10000
+              Orientation = trHorizontal
+              Frequency = 1000
+              Position = 0
+              SelEnd = 0
+              SelStart = 0
+              TabOrder = 3
+              ThumbLength = 15
+              TickMarks = tmBottomRight
+              TickStyle = tsAuto
+              OnChange = MRandYChange
+            end
+            object MFontGrow: TTrackBar
+              Left = 39
+              Top = 280
+              Width = 162
+              Height = 17
+              Hint = 
+                'Sets the shrink/grow-effect of the message from 1/4th (left) up ' +
+                'to 4x (right) the initial size of the text.'
+              Max = 400
+              Min = 25
+              Orientation = trHorizontal
+              Frequency = 75
+              Position = 100
+              SelEnd = 0
+              SelStart = 0
+              TabOrder = 4
+              ThumbLength = 10
+              TickMarks = tmBottomRight
+              TickStyle = tsAuto
+            end
+            object Button1: TButton
+              Left = 60
+              Top = 305
+              Width = 33
+              Height = 17
+              Hint = 'Disables the text effect.'
+              Caption = 'no fx'
+              TabOrder = 5
+              OnClick = Button1Click
+            end
+          end
+          object GroupBox7: TGroupBox
+            Left = 240
+            Top = 8
+            Width = 185
+            Height = 81
+            Caption = 'Message Time'
+            TabOrder = 1
+            object Label21: TLabel
+              Left = 106
+              Top = 24
+              Width = 5
+              Height = 13
+              Caption = 's'
+            end
+            object Label22: TLabel
+              Left = 160
+              Top = 25
+              Width = 13
+              Height = 13
+              Caption = 'ms'
+            end
+            object Label24: TLabel
+              Left = 156
+              Top = 64
+              Width = 26
+              Height = 13
+              Caption = '100%'
+            end
+            object Label23: TLabel
+              Left = 52
+              Top = 64
+              Width = 14
+              Height = 13
+              Caption = '0%'
+            end
+            object Label25: TLabel
+              Left = 5
+              Top = 49
+              Width = 43
+              Height = 13
+              Caption = 'Fading %'
+            end
+            object MTimeS: TSpinEdit
+              Left = 56
+              Top = 19
+              Width = 49
+              Height = 22
+              Hint = 'The time the message should be displayed. (0-999)'
+              MaxValue = 999
+              MinValue = 0
+              TabOrder = 0
+              Value = 0
+            end
+            object MTimeMS: TSpinEdit
+              Left = 112
+              Top = 19
+              Width = 49
+              Height = 22
+              Hint = 'The time the message should be displayed. (0.0 - 0.999)'
+              Increment = 50
+              MaxValue = 1000
+              MinValue = -1
+              TabOrder = 1
+              Value = 0
+              OnChange = MTimeMSChange
+            end
+            object MTimeFade: TTrackBar
+              Left = 48
+              Top = 48
+              Width = 129
+              Height = 17
+              Hint = 'Percentage of the time the text should fade in. (0-100%)'
+              Max = 10000
+              Orientation = trHorizontal
+              Frequency = 1000
+              Position = 3000
+              SelEnd = 0
+              SelStart = 0
+              TabOrder = 2
+              ThumbLength = 10
+              TickMarks = tmBottomRight
+              TickStyle = tsAuto
+            end
+          end
+          object GroupBox8: TGroupBox
+            Left = 240
+            Top = 120
+            Width = 185
+            Height = 201
+            Caption = 'Preview'
+            TabOrder = 2
+            object Preview: TImage
+              Left = 11
+              Top = 24
+              Width = 161
+              Height = 121
+            end
+            object PreviewButton: TButton
+              Left = 11
+              Top = 147
+              Width = 161
+              Height = 25
+              Hint = 'Push to preview your effect.'
+              Caption = 'Preview effect'
+              Font.Charset = DEFAULT_CHARSET
+              Font.Color = clWindowText
+              Font.Height = -11
+              Font.Name = 'MS Sans Serif'
+              Font.Style = [fsBold]
+              ParentFont = False
+              TabOrder = 0
+              OnClick = PreviewButtonClick
+            end
+            object AbortPreview: TButton
+              Left = 11
+              Top = 172
+              Width = 161
+              Height = 16
+              Hint = 'Push to abort a currently running preview.'
+              Caption = 'Abort Preview'
+              Enabled = False
+              TabOrder = 1
+              OnClick = AbortPreviewClick
+            end
+          end
+        end
+      end
+    end
+    object TabSheet2: TTabSheet
+      Caption = 'Fonts'
+      ImageIndex = 1
+      object Label1: TLabel
+        Left = 160
+        Top = 0
+        Width = 68
+        Height = 13
+        Caption = 'Installed fonts:'
+      end
+      object FontExample: TLabel
+        Left = 304
+        Top = 224
+        Width = 425
+        Height = 105
+        Alignment = taCenter
+        Caption = 'Example'
+        Color = clBlack
+        Constraints.MaxHeight = 105
+        Constraints.MaxWidth = 425
+        Constraints.MinHeight = 105
+        Constraints.MinWidth = 425
+        Font.Charset = DEFAULT_CHARSET
+        Font.Color = clWhite
+        Font.Height = -64
+        Font.Name = 'Tahoma'
+        Font.Style = []
+        ParentColor = False
+        ParentFont = False
+        Layout = tlCenter
+      end
+      object Fonts: TListBox
+        Left = 0
+        Top = 0
+        Width = 145
+        Height = 521
+        ItemHeight = 13
+        TabOrder = 0
+        OnClick = FontsClick
+      end
+      object FontSelector: TListBox
+        Left = 160
+        Top = 16
+        Width = 137
+        Height = 505
+        ItemHeight = 13
+        TabOrder = 1
+        OnClick = FontSelectorClick
+      end
+      object cbBold: TCheckBox
+        Left = 304
+        Top = 16
+        Width = 57
+        Height = 17
+        Caption = 'bold'
+        Font.Charset = DEFAULT_CHARSET
+        Font.Color = clWindowText
+        Font.Height = -11
+        Font.Name = 'MS Sans Serif'
+        Font.Style = [fsBold]
+        ParentFont = False
+        TabOrder = 2
+        OnClick = cbBoldClick
+      end
+      object cbItal: TCheckBox
+        Left = 304
+        Top = 48
+        Width = 57
+        Height = 17
+        Caption = 'italic'
+        Font.Charset = DEFAULT_CHARSET
+        Font.Color = clWindowText
+        Font.Height = -11
+        Font.Name = 'MS Sans Serif'
+        Font.Style = [fsItalic]
+        ParentFont = False
+        TabOrder = 3
+        OnClick = cbItalClick
+      end
+      object GroupBox1: TGroupBox
+        Left = 544
+        Top = 16
+        Width = 185
+        Height = 57
+        Caption = 'Changes'
+        TabOrder = 4
+        object SaveFont: TButton
+          Left = 8
+          Top = 16
+          Width = 121
+          Height = 33
+          Caption = 'SAVE'
+          Font.Charset = DEFAULT_CHARSET
+          Font.Color = clWindowText
+          Font.Height = -11
+          Font.Name = 'MS Sans Serif'
+          Font.Style = [fsBold]
+          ParentFont = False
+          TabOrder = 0
+          OnClick = SaveFontClick
+        end
+        object DiscardFont: TButton
+          Left = 128
+          Top = 16
+          Width = 51
+          Height = 17
+          Caption = 'Discard'
+          TabOrder = 1
+          OnClick = DiscardFontClick
+        end
+        object DelFont: TButton
+          Left = 128
+          Top = 32
+          Width = 51
+          Height = 17
+          Caption = 'DEL'
+          Font.Charset = DEFAULT_CHARSET
+          Font.Color = clRed
+          Font.Height = -11
+          Font.Name = 'MS Sans Serif'
+          Font.Style = []
+          ParentFont = False
+          TabOrder = 2
+          OnClick = DelFontClick
+        end
+      end
+      object GroupBox2: TGroupBox
+        Left = 304
+        Top = 88
+        Width = 425
+        Height = 113
+        Caption = 'Default Font Color'
+        TabOrder = 5
+        object FColorSample: TLabel
+          Left = 328
+          Top = 15
+          Width = 87
+          Height = 90
+          Alignment = taCenter
+          Caption = 'Color sample'
+          Color = clWhite
+          Constraints.MaxHeight = 90
+          Constraints.MaxWidth = 87
+          Constraints.MinHeight = 90
+          Constraints.MinWidth = 87
+          Font.Charset = DEFAULT_CHARSET
+          Font.Color = clBlack
+          Font.Height = -11
+          Font.Name = 'MS Sans Serif'
+          Font.Style = []
+          ParentColor = False
+          ParentFont = False
+          Layout = tlCenter
+        end
+        object Label3: TLabel
+          Left = 11
+          Top = 18
+          Width = 14
+          Height = 20
+          Caption = 'R'
+          Font.Charset = DEFAULT_CHARSET
+          Font.Color = clRed
+          Font.Height = -16
+          Font.Name = 'MS Sans Serif'
+          Font.Style = [fsBold]
+          ParentFont = False
+        end
+        object Label4: TLabel
+          Left = 11
+          Top = 50
+          Width = 15
+          Height = 20
+          Caption = 'G'
+          Font.Charset = DEFAULT_CHARSET
+          Font.Color = clLime
+          Font.Height = -16
+          Font.Name = 'MS Sans Serif'
+          Font.Style = [fsBold]
+          ParentFont = False
+        end
+        object Label5: TLabel
+          Left = 11
+          Top = 82
+          Width = 13
+          Height = 20
+          Caption = 'B'
+          Font.Charset = DEFAULT_CHARSET
+          Font.Color = clBlue
+          Font.Height = -16
+          Font.Name = 'MS Sans Serif'
+          Font.Style = [fsBold]
+          ParentFont = False
+        end
+        object FColR: TTrackBar
+          Left = 24
+          Top = 16
+          Width = 300
+          Height = 25
+          Max = 255
+          Orientation = trHorizontal
+          Frequency = 32
+          Position = 255
+          SelEnd = 0
+          SelStart = 0
+          TabOrder = 0
+          ThumbLength = 15
+          TickMarks = tmBottomRight
+          TickStyle = tsAuto
+          OnChange = FColRChange
+        end
+        object FColG: TTrackBar
+          Left = 24
+          Top = 48
+          Width = 300
+          Height = 25
+          Max = 255
+          Orientation = trHorizontal
+          Frequency = 32
+          Position = 255
+          SelEnd = 0
+          SelStart = 0
+          TabOrder = 1
+          ThumbLength = 15
+          TickMarks = tmBottomRight
+          TickStyle = tsAuto
+          OnChange = FColGChange
+        end
+        object FColB: TTrackBar
+          Left = 24
+          Top = 80
+          Width = 300
+          Height = 25
+          Max = 255
+          Orientation = trHorizontal
+          Frequency = 32
+          Position = 255
+          SelEnd = 0
+          SelStart = 0
+          TabOrder = 2
+          ThumbLength = 15
+          TickMarks = tmBottomRight
+          TickStyle = tsAuto
+          OnChange = FColBChange
+        end
+      end
+    end
+    object TabSheet6: TTabSheet
+      Caption = 'About...'
+      ImageIndex = 2
+      object Label33: TLabel
+        Left = 136
+        Top = -20
+        Width = 431
+        Height = 151
+        Caption = 'MDME'
+        Font.Charset = DEFAULT_CHARSET
+        Font.Color = clBlue
+        Font.Height = -136
+        Font.Name = 'Times New Roman'
+        Font.Style = [fsBold, fsItalic]
+        ParentFont = False
+      end
+      object Label20: TLabel
+        Left = 136
+        Top = 96
+        Width = 421
+        Height = 47
+        Caption = 'MilkDrop Message Editor'
+        Font.Charset = DEFAULT_CHARSET
+        Font.Color = clTeal
+        Font.Height = -40
+        Font.Name = 'Times New Roman'
+        Font.Style = [fsItalic]
+        ParentFont = False
+        Transparent = True
+      end
+      object Label35: TLabel
+        Left = 216
+        Top = 144
+        Width = 231
+        Height = 13
+        Caption = '(c)2002 by Markus Birth <mbirth@webwriters.de>'
+        Font.Charset = DEFAULT_CHARSET
+        Font.Color = clGrayText
+        Font.Height = -11
+        Font.Name = 'MS Sans Serif'
+        Font.Style = []
+        ParentFont = False
+      end
+      object Label36: TLabel
+        Left = 168
+        Top = 464
+        Width = 438
+        Height = 38
+        Caption = 
+          'If you have any comments or just want to say that you like it, c' +
+          'ontact me via ICQ No. 2787089 or via eMail under mbirth@webwrite' +
+          'rs.de .'
+        Font.Charset = DEFAULT_CHARSET
+        Font.Color = clGreen
+        Font.Height = -16
+        Font.Name = 'Times New Roman'
+        Font.Style = []
+        ParentFont = False
+        WordWrap = True
+      end
+      object IniPath: TLabel
+        Left = 40
+        Top = 512
+        Width = 673
+        Height = 13
+        Alignment = taCenter
+        AutoSize = False
+        Caption = 'IniPath'
+        Enabled = False
+      end
+      object Memo1: TMemo
+        Left = 40
+        Top = 176
+        Width = 681
+        Height = 249
+        BevelInner = bvNone
+        BevelOuter = bvNone
+        BorderStyle = bsNone
+        Color = clMenu
+        Enabled = False
+        Font.Charset = DEFAULT_CHARSET
+        Font.Color = clBlack
+        Font.Height = -16
+        Font.Name = 'Tahoma'
+        Font.Style = []
+        Lines.Strings = (
+          
+            'I wrote this little app because I found it difficult to define c' +
+            'ool text-messages for MilkDrop by '
+          
+            'editing the milk_msg.ini with Notepad. The problem was that you ' +
+            'can'#39't see what you did until '
+          'you ran WinAMP, launched MilkDrop and typed your message code.'
+          
+            'This app gives you an idea how your message will look like WHILE' +
+            ' editing it.'
+          ''
+          
+            'The editor should be self-explanatory. I have added "hints" to m' +
+            'ost of the controls. Just hold '
+          
+            'your cursor above a control without moving and the hint-text sho' +
+            'uld appear.'
+          ''
+          
+            'The preview is flickering, I know, but hey - this isn'#39't MilkDrop' +
+            ' - it'#39's only the message editor!')
+        ParentFont = False
+        ParentShowHint = False
+        ReadOnly = True
+        ShowHint = False
+        TabOrder = 0
+        WantReturns = False
+      end
+    end
+  end
+  object PreTimer: TTimer
+    Enabled = False
+    Interval = 50
+    OnTimer = PreTimerTimer
+    Left = 744
+  end
+end
diff --git a/MDME.pas b/MDME.pas
new file mode 100644
index 0000000..8627f89
--- /dev/null
+++ b/MDME.pas
@@ -0,0 +1,736 @@
+unit MDME;
+
+interface
+
+uses
+  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
+  Dialogs, ComCtrls, IniFiles, Registry, StdCtrls, ExtCtrls, Spin, Math;
+
+type
+  TForm1 = class(TForm)
+    MainPageControl: TPageControl;
+    TabSheet1: TTabSheet;
+    TabSheet2: TTabSheet;
+    Messages: TListBox;
+    Fonts: TListBox;
+    FontSelector: TListBox;
+    Label1: TLabel;
+    cbBold: TCheckBox;
+    cbItal: TCheckBox;
+    MessageExample: TLabel;
+    GroupBox1: TGroupBox;
+    SaveFont: TButton;
+    DiscardFont: TButton;
+    GroupBox2: TGroupBox;
+    FColR: TTrackBar;
+    FColG: TTrackBar;
+    FColB: TTrackBar;
+    FColorSample: TLabel;
+    Label3: TLabel;
+    Label4: TLabel;
+    Label5: TLabel;
+    MessageText: TEdit;
+    FontExample: TLabel;
+    GroupBox3: TGroupBox;
+    SaveMessage: TButton;
+    DiscardMessage: TButton;
+    Label18: TLabel;
+    DelFont: TButton;
+    DelMessage: TButton;
+    PageControl1: TPageControl;
+    TabSheet3: TTabSheet;
+    TabSheet4: TTabSheet;
+    Label2: TLabel;
+    MFont: TListBox;
+    cbFontOver: TCheckBox;
+    MFontOver: TListBox;
+    GroupBox4: TGroupBox;
+    MColorSample: TLabel;
+    Label7: TLabel;
+    Label8: TLabel;
+    Label9: TLabel;
+    Label6: TLabel;
+    Label10: TLabel;
+    Label11: TLabel;
+    Label27: TLabel;
+    MColR: TTrackBar;
+    MColG: TTrackBar;
+    MColB: TTrackBar;
+    MVarR: TTrackBar;
+    MVarG: TTrackBar;
+    MVarB: TTrackBar;
+    cbDefFont: TCheckBox;
+    GroupBox6: TGroupBox;
+    Label12: TLabel;
+    Label13: TLabel;
+    Label14: TLabel;
+    MFontSize: TTrackBar;
+    cbBoldOverOn: TCheckBox;
+    cbBoldOver: TCheckBox;
+    cbItalOver: TCheckBox;
+    cbItalOverOn: TCheckBox;
+    TabSheet5: TTabSheet;
+    GroupBox5: TGroupBox;
+    MScreen: TImage;
+    Label28: TLabel;
+    Label29: TLabel;
+    Label30: TLabel;
+    Label31: TLabel;
+    Label32: TLabel;
+    Label34: TLabel;
+    MPosX: TTrackBar;
+    MPosY: TTrackBar;
+    MRandX: TTrackBar;
+    MRandY: TTrackBar;
+    GroupBox7: TGroupBox;
+    Label21: TLabel;
+    Label22: TLabel;
+    Label24: TLabel;
+    Label23: TLabel;
+    Label25: TLabel;
+    MTimeS: TSpinEdit;
+    MTimeMS: TSpinEdit;
+    MTimeFade: TTrackBar;
+    TabSheet6: TTabSheet;
+    Label33: TLabel;
+    Label20: TLabel;
+    MFontGrow: TTrackBar;
+    Label15: TLabel;
+    Label16: TLabel;
+    Label17: TLabel;
+    Label19: TLabel;
+    Button1: TButton;
+    Label26: TLabel;
+    Label35: TLabel;
+    Memo1: TMemo;
+    Label36: TLabel;
+    GroupBox8: TGroupBox;
+    Preview: TImage;
+    PreviewButton: TButton;
+    PreTimer: TTimer;
+    AbortPreview: TButton;
+    IniPath: TLabel;
+    procedure FormCreate(Sender: TObject);
+    procedure FontsClick(Sender: TObject);
+    procedure FColRChange(Sender: TObject);
+    procedure FColGChange(Sender: TObject);
+    procedure FColBChange(Sender: TObject);
+    procedure MessagesClick(Sender: TObject);
+    procedure DiscardFontClick(Sender: TObject);
+    procedure SaveFontClick(Sender: TObject);
+    procedure cbBoldClick(Sender: TObject);
+    procedure cbItalClick(Sender: TObject);
+    procedure DiscardMessageClick(Sender: TObject);
+    procedure SaveMessageClick(Sender: TObject);
+    procedure MColRChange(Sender: TObject);
+    procedure MColGChange(Sender: TObject);
+    procedure MColBChange(Sender: TObject);
+    procedure cbDefFontClick(Sender: TObject);
+    procedure MFontSizeChange(Sender: TObject);
+    procedure cbFontOverClick(Sender: TObject);
+    procedure MessageTextChange(Sender: TObject);
+    procedure MFontOverClick(Sender: TObject);
+    procedure Button1Click(Sender: TObject);
+    procedure cbBoldOverOnClick(Sender: TObject);
+    procedure cbItalOverOnClick(Sender: TObject);
+    procedure cbBoldOverClick(Sender: TObject);
+    procedure cbItalOverClick(Sender: TObject);
+    procedure MFontClick(Sender: TObject);
+    procedure MTimeMSChange(Sender: TObject);
+    procedure MPosYChange(Sender: TObject);
+    procedure MPosXChange(Sender: TObject);
+    procedure MRandXChange(Sender: TObject);
+    procedure MRandYChange(Sender: TObject);
+    procedure MScreenMouseDown(Sender: TObject; Button: TMouseButton;
+      Shift: TShiftState; X, Y: Integer);
+    procedure DelFontClick(Sender: TObject);
+    procedure DelMessageClick(Sender: TObject);
+    procedure FontSelectorClick(Sender: TObject);
+    procedure PreviewButtonClick(Sender: TObject);
+    procedure PreTimerTimer(Sender: TObject);
+    procedure AbortPreviewClick(Sender: TObject);
+  private
+    { Private declarations }
+  public
+    { Public declarations }
+  end;
+
+var
+  Form1: TForm1;
+
+implementation
+
+{$R *.dfm}
+
+var
+  mf: TIniFile;
+  ti,mxt,fti: integer; { For Preview: CurTime, MaxTime, FadeTime }
+  nr,ng,nb: integer;  { For Preview: Random RGB }
+  px,py,pfg,pfs: integer;     { For Preview: Random XY, FontGrowth, FontSize }
+  ptxt: string;       { For Preview: Message }
+
+function d2(x: integer): string;
+var y: string;
+begin
+  Str(x:0,y);
+  if x<10 then d2 := '0'+y else d2 := y;
+end;
+
+procedure ReadFromIni;
+var i,ms,fs,mfs: integer;
+    tmp: string;
+begin
+  ms := Form1.Messages.ItemIndex;
+  fs := Form1.Fonts.ItemIndex;
+  mfs := Form1.MFont.ItemIndex;
+  Form1.Messages.Clear;
+  Form1.Fonts.Clear;
+  Form1.MFont.Clear;
+  for i:=0 to 99 do begin
+    if i<=15 then begin
+      tmp := d2(i)+' (';
+      if mf.ReadBool('font'+d2(i),'bold',false) then tmp := tmp + 'b' else tmp := tmp + '_';
+      if mf.ReadBool('font'+d2(i),'ital',false) then tmp := tmp + 'i' else tmp := tmp + '_';
+      tmp := tmp + ') '+mf.ReadString('font'+d2(i),'face','<not defined>');
+      Form1.Fonts.Items.Add(tmp);
+      Form1.MFont.Items.Add(tmp);
+    end;
+    Form1.Messages.Items.Add(d2(i)+' - '+mf.ReadString('message'+d2(i),'text','<empty>'));
+  end;
+  if ms<>-1 then Form1.Messages.Selected[ms] := true;
+  if fs<>-1 then Form1.Fonts.Selected[fs] := true;
+  if mfs<>-1 then Form1.MFont.Selected[mfs] := true;
+end;
+
+procedure TForm1.FormCreate(Sender: TObject);
+var rt: TRegistry;
+    pa: string;
+begin
+  Randomize;
+  DecimalSeparator := '.';
+  rt := TRegistry.Create;
+  rt.OpenKeyReadOnly('\Software\Winamp');
+  pa := rt.ReadString('');
+  if Length(pa)>0 then begin
+    mf := TIniFile.Create(pa+'\Plugins\milk_msg.ini');
+    IniPath.Caption := 'Path from Registry: '+mf.FileName;
+  end else begin
+    mf := TIniFile.Create('C:\Program Files\Winamp\Plugins\milk_msg.ini');
+    IniPath.Caption := 'Default path: '+mf.FileName;
+  end;
+  ReadFromIni;
+  FontSelector.Items := Screen.Fonts;
+  MFontOver.Items := Screen.Fonts;
+  with MScreen.Canvas do begin
+    Brush.Style := bsSolid;
+    Brush.Color := clBlack;
+    FillRect(Rect(1,1,160,120));
+  end;
+  with Preview.Canvas do begin
+    Brush.Style := bsSolid;
+    Brush.Color := clBlack;
+    Pen.Color := clRed;
+    Pen.Style := psSolid;
+    FillRect(Rect(1,1,160,120));
+    MoveTo(1,1);
+    LineTo(160,120);
+    MoveTo(1,120);
+    LineTo(160,1);
+  end;
+  Fonts.Selected[0] := true;
+  Messages.Selected[0] := true;
+  FontsClick(Sender);
+  MessagesClick(Sender);
+end;
+
+procedure DoFontExample;
+var at: TFontStyles;
+begin
+  at := [];
+  Form1.FontExample.Font.Name := Form1.FontSelector.Items.Strings[Form1.FontSelector.ItemIndex];
+  if Form1.cbBold.Checked then at := at + [fsBold];
+  if Form1.cbItal.Checked then at := at + [fsItalic];
+  Form1.FontExample.Font.Color := rgb(Form1.FColR.Position,Form1.FColG.Position,Form1.FColB.Position);
+  Form1.FontExample.Font.Style := at;
+end;
+
+procedure DoMessagePosition;
+var dx,dy,w,h,vx,vy: integer;
+begin
+  with Form1.MScreen.Canvas do begin
+    Brush.Style := bsSolid;
+    Brush.Color := clWhite;
+    FillRect(Rect(0,0,161,121));
+    Brush.Color := clBlack;
+    FillRect(Rect(1,1,160,120));
+    Pen.Color := clYellow;
+    Font.Name := Form1.MessageExample.Font.Name;
+    Font.Style := Form1.MessageExample.Font.Style;
+    Font.Color := Form1.MessageExample.Font.Color;
+    Font.Size := Round(Form1.MessageExample.Font.Size / 6);
+    if Font.Size=0 then Font.Size := 1;
+    TextFlags := ETO_OPAQUE;
+    dx := Round(Form1.MPosX.Position * 160 / 10000);
+    dy := Round(Form1.MPosY.Position * 120 / 10000);
+    vx := Round(Form1.MRandX.Position * 160 / 10000);
+    vy := Round(Form1.MRandY.Position * 120 / 10000);
+    w := TextWidth(Form1.MessageExample.Caption);
+    h := TextHeight(Form1.MessageExample.Caption);
+    Rectangle(Round(dx-w/2-vx),Round(dy-h/2-vy),Round(dx+w/2+vx),Round(dy+h/2+vy));
+    Brush.Style := bsClear;
+    TextOut(Round(dx-w/2),Round(dy-h/2),Form1.MessageExample.Caption);
+  end;
+end;
+
+procedure DoMessageExample;
+var at: TFontStyles;
+    fcap: string;
+begin
+  fcap := 'font'+d2(Form1.MFont.ItemIndex);
+  Form1.MessageExample.Caption := Form1.MessageText.Text;
+  at := [];
+  if Form1.MFontSize.Position>0 then Form1.MessageExample.Font.Size := Form1.MFontSize.Position else Form1.MessageExample.Font.Size := 1;
+  if Form1.cbFontOver.Checked then begin
+    Form1.MessageExample.Font.Name := Form1.MFontOver.Items.Strings[Form1.MFontOver.ItemIndex];
+  end else begin
+    Form1.MessageExample.Font.Name := mf.ReadString(fcap,'face','Arial');
+  end;
+  if Form1.cbBoldOverOn.Checked then begin
+    if Form1.cbBoldOver.Checked then at := at + [fsBold];
+  end else begin
+    if mf.ReadBool(fcap,'bold',false) then at := at + [fsBold];
+  end;
+  if Form1.cbItalOverOn.Checked then begin
+    if Form1.cbItalOver.Checked then at := at + [fsItalic];
+  end else begin
+    if mf.ReadBool(fcap,'ital',false) then at := at + [fsItalic];
+  end;
+  if Form1.cbDefFont.Checked then begin
+    Form1.MessageExample.Font.Color := rgb(Form1.MColR.Position,Form1.MColG.Position,Form1.MColB.Position);
+  end else begin
+    Form1.MessageExample.Font.Color := rgb(mf.ReadInteger(fcap,'r',255),mf.ReadInteger(fcap,'g',255),mf.ReadInteger(fcap,'b',255));
+  end;
+  Form1.MessageExample.Font.Style := at;
+  DoMessagePosition;
+end;
+
+procedure TForm1.FontsClick(Sender: TObject);
+var st,cap: string;
+begin
+  st := Fonts.Items.Strings[Fonts.ItemIndex];
+  cap := 'font'+Copy(st,0,2);
+  FontSelector.Selected[FontSelector.Items.IndexOf(mf.ReadString(cap,'face','Arial'))] := true;
+  cbBold.Checked := mf.ReadBool(cap,'bold',false);
+  cbItal.Checked := mf.ReadBool(cap,'ital',false);
+  FColR.Position := mf.ReadInteger(cap,'r',255);
+  FColG.Position := mf.ReadInteger(cap,'g',255);
+  FColB.Position := mf.ReadInteger(cap,'b',255);
+  DoFontExample;
+end;
+
+procedure TForm1.FColRChange(Sender: TObject);
+begin
+  FColorSample.Color := RGB(FColR.Position,FColG.Position,FColB.Position);
+  DoFontExample;
+end;
+
+procedure TForm1.FColGChange(Sender: TObject);
+begin
+  FColorSample.Color := RGB(FColR.Position,FColG.Position,FColB.Position);
+  DoFontExample;
+end;
+
+procedure TForm1.FColBChange(Sender: TObject);
+begin
+  FColorSample.Color := RGB(FColR.Position,FColG.Position,FColB.Position);
+  DoFontExample;
+end;
+
+procedure TForm1.MessagesClick(Sender: TObject);
+var st,cap,fcap: string;
+begin
+  st := Messages.Items.Strings[Messages.ItemIndex];
+  cap := 'message'+Copy(st,0,2);
+  fcap := 'font'+d2(mf.ReadInteger(cap,'font',0));
+  MFont.Selected[mf.ReadInteger(cap,'font',0)] := true;
+  if mf.ValueExists(cap,'face') then begin
+    MFontOver.Enabled := true;
+    MFontOver.Selected[MFontOver.Items.IndexOf(mf.ReadString(cap,'face','Arial'))] := true;
+    cbFontOver.Checked := true;
+  end else begin
+    cbFontOver.Checked := false;
+    MFontOver.Enabled := false;
+    MFontOver.ClearSelection;
+  end;
+  if mf.ValueExists(cap,'bold') then begin
+    cbBoldOverOn.Checked := true;
+    cbBoldOver.Checked := mf.ReadBool(cap,'bold',false);
+  end else begin
+    cbBoldOverOn.Checked := false;
+    cbBoldOver.Checked := false;
+  end;
+  if mf.ValueExists(cap,'ital') then begin
+    cbItalOverOn.Checked := true;
+    cbItalOver.Checked := mf.ReadBool(cap,'ital',false);
+  end else begin
+    cbItalOverOn.Checked := false;
+    cbItalOver.Checked := false;
+  end;
+  MFontSize.Position := mf.ReadInteger(cap,'size',0);
+  MessageText.Text := mf.ReadString(cap,'text','');
+  cbDefFont.Checked := true;
+  if mf.ReadInteger(cap,'r',-1)=-1 then cbDefFont.Checked := false;
+  if mf.ReadInteger(cap,'g',-1)=-1 then cbDefFont.Checked := false;
+  if mf.ReadInteger(cap,'b',-1)=-1 then cbDefFont.Checked := false;
+  cbDefFontClick(Sender);
+  if NOT cbDefFont.Checked then begin
+    MColR.Position := mf.ReadInteger(fcap,'r',255);
+    MColG.Position := mf.ReadInteger(fcap,'g',255);
+    MColB.Position := mf.ReadInteger(fcap,'b',255);
+  end else begin
+    MColR.Position := mf.ReadInteger(cap,'r',255);
+    MColG.Position := mf.ReadInteger(cap,'g',255);
+    MColB.Position := mf.ReadInteger(cap,'b',255);
+  end;
+  MVarR.Position := mf.ReadInteger(cap,'randr',0);
+  MVarG.Position := mf.ReadInteger(cap,'randg',0);
+  MVarB.Position := mf.ReadInteger(cap,'randb',0);
+  MFontGrow.Position := Round(mf.ReadFloat(cap,'growth',1)*100);
+  MTimeS.Value := Floor(mf.ReadFloat(cap,'time',1));
+  MTimeMS.Value := Floor(Frac(mf.ReadFloat(cap,'time',1))*1000);
+  MTimeFade.Position := Round(mf.ReadFloat(cap,'fade',0.3)*10000);
+  MPosX.Position := Round(mf.ReadFloat(cap,'x',0.5)*10000);
+  MPosY.Position := Round(mf.ReadFloat(cap,'y',0.5)*10000);
+  MRandX.Position := Round(mf.ReadFloat(cap,'randx',0)*10000);
+  MRandY.Position := Round(mf.ReadFloat(cap,'randy',0)*10000);
+  DoMessageExample;
+end;
+
+procedure TForm1.DiscardFontClick(Sender: TObject);
+begin
+  FontsClick(Sender);
+end;
+
+procedure TForm1.SaveFontClick(Sender: TObject);
+var st,cap: string;
+begin
+  st := Fonts.Items.Strings[Fonts.ItemIndex];
+  cap := 'font'+Copy(st,0,2);
+  mf.EraseSection(cap);
+  mf.WriteString(cap,'face',FontSelector.Items.Strings[FontSelector.ItemIndex]);
+  mf.WriteBool(cap,'bold',cbBold.Checked);
+  mf.WriteBool(cap,'ital',cbItal.Checked);
+  if (FColR.Position<>255) OR (FColG.Position<>255) OR (FColB.Position<>255) then begin
+    mf.WriteInteger(cap,'r',FColR.Position);
+    mf.WriteInteger(cap,'g',FColG.Position);
+    mf.WriteInteger(cap,'b',FColB.Position);
+  end;
+  ReadFromIni;
+end;
+
+procedure TForm1.cbBoldClick(Sender: TObject);
+begin
+  DoFontExample;
+end;
+
+procedure TForm1.cbItalClick(Sender: TObject);
+begin
+  DoFontExample;
+end;
+
+procedure TForm1.DiscardMessageClick(Sender: TObject);
+begin
+  MessagesClick(Sender);
+end;
+
+procedure TForm1.SaveMessageClick(Sender: TObject);
+var st,cap: string;
+begin
+  st := Messages.Items.Strings[Messages.ItemIndex];
+  cap := 'message'+Copy(st,0,2);
+  mf.EraseSection(cap);
+  mf.WriteString(cap,'text',MessageText.Text);
+  mf.WriteInteger(cap,'font',MFont.ItemIndex);
+  mf.WriteInteger(cap,'size',MFontSize.Position);
+  if MFontGrow.Position<>100 then mf.WriteFloat(cap,'growth',MFontGrow.Position / 100);
+  mf.WriteFloat(cap,'x',MPosX.Position / 10000);
+  mf.WriteFloat(cap,'y',MPosY.Position / 10000);
+  if MRandX.Position<>0 then mf.WriteFloat(cap,'randx',MRandX.Position / 10000);
+  if MRandY.Position<>0 then mf.WriteFloat(cap,'randy',MRandY.Position / 10000);
+  mf.WriteFloat(cap,'time',MTimeS.Value + MTimeMS.Value/1000);
+  if MTimeFade.Position<>0 then mf.WriteFloat(cap,'fade',MTimeFade.Position / 10000);
+  if cbFontOver.Checked then mf.WriteString(cap,'face',MFontOver.Items.Strings[MFontOver.ItemIndex]);
+  if cbItalOverOn.Checked then mf.WriteBool(cap,'ital',cbItalOver.Checked);
+  if cbBoldOverOn.Checked then mf.WriteBool(cap,'bold',cbBoldOver.Checked);
+  if cbDefFont.Checked then begin
+    mf.WriteInteger(cap,'r',MColR.Position);
+    mf.WriteInteger(cap,'g',MColG.Position);
+    mf.WriteInteger(cap,'b',MColB.Position);
+  end;
+  if (MVarR.Position<>0) OR (MVarG.Position<>0) OR (MVarB.Position<>0) then begin
+    mf.WriteInteger(cap,'randr',MVarR.Position);
+    mf.WriteInteger(cap,'randg',MVarG.Position);
+    mf.WriteInteger(cap,'randb',MVarB.Position);
+  end;
+  ReadFromIni;
+end;
+
+procedure TForm1.MColRChange(Sender: TObject);
+begin
+  MColorSample.Color := rgb(MColR.Position,MColG.Position,MColB.Position);
+  DoMessageExample;
+end;
+
+procedure TForm1.MColGChange(Sender: TObject);
+begin
+  MColorSample.Color := rgb(MColR.Position,MColG.Position,MColB.Position);
+  DoMessageExample;
+end;
+
+procedure TForm1.MColBChange(Sender: TObject);
+begin
+  MColorSample.Color := rgb(MColR.Position,MColG.Position,MColB.Position);
+  DoMessageExample;
+end;
+
+procedure TForm1.cbDefFontClick(Sender: TObject);
+begin
+  if cbDefFont.Checked then begin
+    MColR.Enabled := true;
+    MColG.Enabled := true;
+    MColB.Enabled := true;
+  end else begin
+    MColR.Enabled := false;
+    MColG.Enabled := false;
+    MColB.Enabled := false;
+  end;
+  DoMessageExample;
+end;
+
+procedure TForm1.MFontSizeChange(Sender: TObject);
+begin
+  DoMessageExample;
+end;
+
+procedure TForm1.cbFontOverClick(Sender: TObject);
+begin
+  if cbFontOver.Checked then begin
+    MFontOver.Enabled := true;
+  end else begin
+    MFontOver.Enabled := false;
+  end;
+  if MFontOver.ItemIndex=-1 then MFontOver.Selected[0] := true;
+  DoMessageExample;
+end;
+
+procedure TForm1.MessageTextChange(Sender: TObject);
+begin
+  DoMessageExample;
+end;
+
+procedure TForm1.MFontOverClick(Sender: TObject);
+begin
+  DoMessageExample;
+end;
+
+procedure TForm1.Button1Click(Sender: TObject);
+begin
+  MFontGrow.Position := 100;
+end;
+
+procedure TForm1.cbBoldOverOnClick(Sender: TObject);
+begin
+  if cbBoldOverOn.Checked then begin
+    cbBoldOver.Enabled := true;
+  end else begin
+    cbBoldOver.Enabled := false;
+  end;
+  DoMessageExample;
+end;
+
+procedure TForm1.cbItalOverOnClick(Sender: TObject);
+begin
+  if cbItalOverOn.Checked then begin
+    cbItalOver.Enabled := true;
+  end else begin
+    cbItalOver.Enabled := false;
+  end;
+  DoMessageExample;
+end;
+
+procedure TForm1.cbBoldOverClick(Sender: TObject);
+begin
+  DoMessageExample;
+end;
+
+procedure TForm1.cbItalOverClick(Sender: TObject);
+begin
+  DoMessageExample;
+end;
+
+procedure TForm1.MFontClick(Sender: TObject);
+begin
+  DoMessageExample;
+end;
+
+procedure TForm1.MTimeMSChange(Sender: TObject);
+begin
+  if MTimeMS.Value < 0 then begin
+    if MTimeS.Value>0 then begin
+      MTimeS.Value := MTimeS.Value - 1;
+      MTimeMS.Value := 1000 - MTimeMS.Value;
+    end else MTimeMS.Value := 0;
+  end;
+  if MTimeMS.Value > 999 then begin
+    if MTimeS.Value<999 then begin
+      MTimeS.Value := MTimeS.Value + 1;
+      MTimeMS.Value := 1000 - MTimeMS.Value;
+    end else MTimeMS.Value := 999;
+  end;
+end;
+
+procedure TForm1.MPosYChange(Sender: TObject);
+begin
+  DoMessagePosition;
+end;
+
+procedure TForm1.MPosXChange(Sender: TObject);
+begin
+  DoMessagePosition;
+end;
+
+procedure TForm1.MRandXChange(Sender: TObject);
+begin
+  DoMessagePosition;
+end;
+
+procedure TForm1.MRandYChange(Sender: TObject);
+begin
+  DoMessagePosition;
+end;
+
+procedure TForm1.MScreenMouseDown(Sender: TObject; Button: TMouseButton;
+  Shift: TShiftState; X, Y: Integer);
+begin
+  MPosX.Position := Round(x*10000/160);
+  MPosY.Position := Round(y*10000/120);
+end;
+
+procedure TForm1.DelFontClick(Sender: TObject);
+var st,cap: string;
+begin
+  st := Fonts.Items.Strings[Fonts.ItemIndex];
+  cap := 'font'+Copy(st,0,2);
+  mf.EraseSection(cap);
+  ReadFromIni;
+end;
+
+procedure TForm1.DelMessageClick(Sender: TObject);
+var st,cap: string;
+begin
+  st := Messages.Items.Strings[Messages.ItemIndex];
+  cap := 'message'+Copy(st,0,2);
+  mf.EraseSection(cap);
+  ReadFromIni;
+end;
+
+procedure TForm1.FontSelectorClick(Sender: TObject);
+begin
+  DoFontExample;
+end;
+
+procedure TForm1.PreviewButtonClick(Sender: TObject);
+var dx,dy,vx,vy: integer;
+begin
+  PreviewButton.Enabled := false;
+  ti := 0;
+  mxt := MTimeS.Value*1000+MTimeMS.Value;
+  fti := Round(MTimeFade.Position*mxt/10000);
+  nr := MColR.Position + (Random(2*MVarR.Position)-MVarR.Position);
+  ng := MColG.Position + (Random(2*MVarG.Position)-MVarG.Position);
+  nb := MColB.Position + (Random(2*MVarB.Position)-MVarB.Position);
+  if nr<0 then nr := 0; if nr>255 then nr := 255;
+  if ng<0 then ng := 0; if ng>255 then ng := 255;
+  if nb<0 then nb := 0; if nb>255 then nb := 255;
+  dx := Round(MPosX.Position * 160 / 10000);
+  dy := Round(MPosY.Position * 120 / 10000);
+  vx := Round(MRandX.Position * 160 / 10000);
+  vy := Round(MRandY.Position * 120 / 10000);
+  vx := Random(2*vx)-vx;
+  vy := Random(2*vy)-vy;
+  px := dx+vx;
+  py := dy+vy;
+  pfg := MFontGrow.Position;
+  pfs := MFontSize.Position;
+  ptxt := MessageExample.Caption;
+  with Preview.Canvas do begin
+    Font.Style := MessageExample.Font.Style;
+    Pen.Color := clRed;
+    Pen.Style := psSolid;
+    Font.Name := MessageExample.Font.Name;
+    Brush.Style := bsSolid;
+    Brush.Color := clWhite;
+    FillRect(Rect(0,0,161,121));
+    Brush.Color := clBlack;
+    FillRect(Rect(1,1,160,120));
+  end;
+  PreTimer.Enabled := true;
+  AbortPreview.Enabled := true;
+end;
+
+procedure TForm1.PreTimerTimer(Sender: TObject);
+var nsize: double;
+var w,h: integer;
+begin
+  nsize := 1 + ti*(pfg-100)/(100*mxt);
+  with Preview.Canvas do begin
+    if ti<=fti then Font.Color := rgb(Round(ti*nr/fti),Round(ti*ng/fti),Round(ti*nb/fti)) else Font.Color := rgb(nr,ng,nb);
+    Font.Size := Round(pfs*nsize/6);
+    if Font.Size=0 then Font.Size := 1;
+    w := TextWidth(ptxt);
+    h := TextHeight(ptxt);
+    FillRect(Rect(1,1,160,120));
+    TextOut(Round(px-w/2),Round(py-h/2),ptxt);
+  end;
+  Inc(ti,50);
+  if ti>mxt then begin
+    AbortPreview.Enabled := false;
+    PreTimer.Enabled := false;
+    with Preview.Canvas do begin
+      Brush.Style := bsSolid;
+      Brush.Color := clWhite;
+      FillRect(Rect(0,0,161,121));
+      Brush.Color := clBlack;
+      FillRect(Rect(1,1,160,120));
+      Pen.Color := clRed;
+      Pen.Style := psSolid;
+      MoveTo(1,1);
+      LineTo(160,120);
+      MoveTo(1,120);
+      LineTo(160,1);
+    end;
+    PreviewButton.Enabled := true;
+  end;
+end;
+
+procedure TForm1.AbortPreviewClick(Sender: TObject);
+begin
+  AbortPreview.Enabled := false;
+  PreTimer.Enabled := false;
+  with Preview.Canvas do begin
+    Brush.Style := bsSolid;
+    Brush.Color := clWhite;
+    FillRect(Rect(0,0,161,121));
+    Brush.Color := clBlack;
+    FillRect(Rect(1,1,160,120));
+    Pen.Color := clRed;
+    Pen.Style := psSolid;
+    MoveTo(1,1);
+    LineTo(160,120);
+    MoveTo(1,120);
+    LineTo(160,1);
+  end;
+  PreviewButton.Enabled := true;
+end;
+
+end.
diff --git a/MDMessageEditor.cfg b/MDMessageEditor.cfg
new file mode 100644
index 0000000..dc18277
--- /dev/null
+++ b/MDMessageEditor.cfg
@@ -0,0 +1,35 @@
+-$A8
+-$B-
+-$C+
+-$D+
+-$E-
+-$F-
+-$G+
+-$H+
+-$I+
+-$J-
+-$K-
+-$L+
+-$M-
+-$N+
+-$O+
+-$P+
+-$Q-
+-$R-
+-$S-
+-$T-
+-$U-
+-$V+
+-$W-
+-$X+
+-$YD
+-$Z1
+-cg
+-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
+-H+
+-W+
+-M
+-$M16384,1048576
+-K$00400000
+-LE"c:\program files\borland\delphi6\Projects\Bpl"
+-LN"c:\program files\borland\delphi6\Projects\Bpl"
diff --git a/MDMessageEditor.dof b/MDMessageEditor.dof
new file mode 100644
index 0000000..246966b
--- /dev/null
+++ b/MDMessageEditor.dof
@@ -0,0 +1,90 @@
+[FileVersion]
+Version=6.0
+[Compiler]
+A=8
+B=0
+C=1
+D=1
+E=0
+F=0
+G=1
+H=1
+I=1
+J=0
+K=0
+L=1
+M=0
+N=1
+O=1
+P=1
+Q=0
+R=0
+S=0
+T=0
+U=0
+V=1
+W=0
+X=1
+Y=1
+Z=1
+ShowHints=1
+ShowWarnings=1
+UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
+[Linker]
+MapFile=0
+OutputObjs=0
+ConsoleApp=1
+DebugInfo=0
+RemoteSymbols=0
+MinStackSize=16384
+MaxStackSize=1048576
+ImageBase=4194304
+ExeDescription=
+[Directories]
+OutputDir=
+UnitOutputDir=
+PackageDLLOutputDir=
+PackageDCPOutputDir=
+SearchPath=
+Packages=vcl;rtl;dbrtl;adortl;vcldb;vclx;bdertl;vcldbx;ibxpress;dsnap;cds;bdecds;qrpt;teeui;teedb;tee;dss;teeqr;visualclx;visualdbclx;dsnapcrba;dsnapcon;VclSmp;vclshlctrls;vclie;xmlrtl;inet;inetdbbde;inetdbxpress;inetdb;nmfast;webdsnap;websnap;dbexpress;dbxcds;indy;dclOffice2k
+Conditionals=
+DebugSourceDirs=
+UsePackages=0
+[Parameters]
+RunParams=
+HostApplication=
+Launcher=
+UseLauncher=0
+DebugCWD=
+[Language]
+ActiveLang=
+ProjectLang=
+RootDir=
+[Version Info]
+IncludeVerInfo=1
+AutoIncBuild=1
+MajorVer=1
+MinorVer=0
+Release=0
+Build=10
+Debug=0
+PreRelease=0
+Special=0
+Private=0
+DLL=0
+Locale=1033
+CodePage=1252
+[Version Info Keys]
+CompanyName=Markus Birth <mbirth@webwriters.de>
+FileDescription=MDME - MilkDrop Message Editor
+FileVersion=1.0.0.10
+InternalName=MDME
+LegalCopyright=
+LegalTrademarks=
+OriginalFilename=
+ProductName=MDME - MilkDrop Message Editor
+ProductVersion=1.0.0.0
+Comments=MilkDrop is one of the best visualization-plugins for WinAMP. This editor is for defining the popups for MilkDrop.
+[HistoryLists\hlUnitAliases]
+Count=1
+Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
diff --git a/MDMessageEditor.dpr b/MDMessageEditor.dpr
new file mode 100644
index 0000000..f0cc293
--- /dev/null
+++ b/MDMessageEditor.dpr
@@ -0,0 +1,14 @@
+program MDMessageEditor;
+
+uses
+  Forms,
+  MDME in 'MDME.pas' {Form1};
+
+{$R *.res}
+
+begin
+  Application.Initialize;
+  Application.Title := 'MDME - MilkDrop Message Editor';
+  Application.CreateForm(TForm1, Form1);
+  Application.Run;
+end.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..48b4afd
--- /dev/null
+++ b/README.md
@@ -0,0 +1,22 @@
+MDME - MilkDrop Message Editor
+==============================
+
+The famous [MilkDrop](http://www.geisswerks.com/milkdrop/) plugin for WinAMP has
+a feature to display text messages with some special effects on the screen. A decade
+ago, this was only configurable by editing some ini file and then checking the
+results in WinAMP. Repeat until you're satisfied.
+
+To make things easier, I wrote a simple simulator which gives you an idea of how
+the result will look like. So you can simply add various messages in a short time.
+
+Here are some screenshots:
+
+![](screenshots/MDME_ss1.png)
+
+![](screenshots/MDME_ss2.png)
+
+![](screenshots/MDME_ss3.png)
+
+![](screenshots/MDME_ss4.png)
+
+![](screenshots/MDME_ss5.png)
diff --git a/screenshots/MDME_ss1.png b/screenshots/MDME_ss1.png
new file mode 100644
index 0000000..81995d3
Binary files /dev/null and b/screenshots/MDME_ss1.png differ
diff --git a/screenshots/MDME_ss2.png b/screenshots/MDME_ss2.png
new file mode 100644
index 0000000..980a8c1
Binary files /dev/null and b/screenshots/MDME_ss2.png differ
diff --git a/screenshots/MDME_ss3.png b/screenshots/MDME_ss3.png
new file mode 100644
index 0000000..df6d4f8
Binary files /dev/null and b/screenshots/MDME_ss3.png differ
diff --git a/screenshots/MDME_ss4.png b/screenshots/MDME_ss4.png
new file mode 100644
index 0000000..6fc161b
Binary files /dev/null and b/screenshots/MDME_ss4.png differ
diff --git a/screenshots/MDME_ss5.png b/screenshots/MDME_ss5.png
new file mode 100644
index 0000000..de59cb8
Binary files /dev/null and b/screenshots/MDME_ss5.png differ