'GETメソッドの場合はクエリとurlを結合
Dim ub As New UriBuilder(requestUri.AbsoluteUri)
- If method = "GET" OrElse method = "DELETE" OrElse method = "HEAD" Then
+ If param IsNot Nothing AndAlso (method = "GET" OrElse method = "DELETE" OrElse method = "HEAD") Then
ub.Query = CreateQueryString(param)
End If
'リダイレクト応答の場合は、リダイレクト先を設定
GetHeaderInfo(webRes, headerInfo)
'応答のストリームをBitmapにして戻す
- If webRes.ContentLength > 0 Then contentBitmap = New Bitmap(webRes.GetResponseStream)
+ 'If webRes.ContentLength > 0 Then contentBitmap = New Bitmap(webRes.GetResponseStream)
+ contentBitmap = New Bitmap(webRes.GetResponseStream)
Return statusCode
End Using
Catch ex As WebException
--- /dev/null
+Imports System
+Imports System.Text
+
+
+Public Class RadixConvert
+
+ ''' <summary>
+ ''' \83C\83\93\83X\83^\83\93\83X\89»\82ð\8bÖ\8e~\82µ\82Ä\82¢\82Ü\82·\81B
+ ''' </summary>
+ Private Sub New()
+
+ End Sub
+
+#Region "Int16\8c^\82¨\82æ\82ÑUInt16\8c^\97p\82Ì\83\81\83\\83b\83h\8cQ"
+
+ ''' <summary>
+ ''' 3\81`36\90i\90\94\82Ì\90\94\92l\95¶\8e\9a\97ñ\82ðInt16\8c^\82Ì\90\94\92l\82É\95Ï\8a·\82µ\82Ü\82·\81B
+ ''' </summary>
+ ''' <remarks>
+ ''' \81¦2\81^8\81^10\81^16\90i\90\94\82Í\81AConvert.ToInt16\83\81\83\\83b\83h\82ð\8eg\82Á\82Ä\82\82¾\82³\82¢\81B
+ ''' \81¦\81{\82â\81|\82Ì\95\84\8d\86\82â0x\82È\82Ç\82Ì\83v\83\8c\83t\83B\83b\83N\83X\82É\82Í\91Î\89\9e\82µ\82Ä\82¢\82Ü\82¹\82ñ\81B
+ ''' \81¦\88ø\90\94\82Æ\82È\82é\90\94\92l\95¶\8e\9a\97ñ\82É\81A\83X\83y\81[\83X\82È\82Ç\82Ì\95¶\8e\9a\82ð\8aÜ\82ß\82È\82¢\82Å\82\82¾\82³\82¢\81B
+ ''' </remarks>
+ ''' <param name="s">\90\94\92l\95¶\8e\9a\97ñ</param>
+ ''' <param name="radix">\8aî\90\94</param>
+ ''' <returns>\90\94\92l</returns>
+ Public Shared Function ToInt16(ByVal s As String, ByVal radix As Integer) As Short
+
+ Dim digit As ULong = ToUInt64(s, radix)
+ CheckDigitOverflow(digit, Int16.MaxValue)
+ Return CType(digit, Short)
+
+ End Function
+
+ ''' <summary>
+ ''' 3\81`36\90i\90\94\82Ì\90\94\92l\95¶\8e\9a\97ñ\82ðUInt16\8c^\82Ì\90\94\92l\82É\95Ï\8a·\82µ\82Ü\82·\81B
+ ''' </summary>
+ ''' <remarks>
+ ''' \81¦2\81^8\81^10\81^16\90i\90\94\82Í\81AConvert.ToUInt16\83\81\83\\83b\83h\82ð\8eg\82Á\82Ä\82\82¾\82³\82¢\81B
+ ''' \81¦\81{\82â\81|\82Ì\95\84\8d\86\82â0x\82È\82Ç\82Ì\83v\83\8c\83t\83B\83b\83N\83X\82É\82Í\91Î\89\9e\82µ\82Ä\82¢\82Ü\82¹\82ñ\81B
+ ''' \81¦\88ø\90\94\82Æ\82È\82é\90\94\92l\95¶\8e\9a\97ñ\82É\81A\83X\83y\81[\83X\82È\82Ç\82Ì\95¶\8e\9a\82ð\8aÜ\82ß\82È\82¢\82Å\82\82¾\82³\82¢\81B
+ ''' </remarks>
+ ''' <param name="s">\90\94\92l\95¶\8e\9a\97ñ</param>
+ ''' <param name="radix">\8aî\90\94</param>
+ ''' <returns>\90\94\92l</returns>
+ Public Shared Function ToUInt16(ByVal s As String, ByVal radix As Integer) As UShort
+
+ Dim digit As ULong = ToUInt64(s, radix)
+ CheckDigitOverflow(digit, UInt16.MaxValue)
+ Return CType(digit, UShort)
+
+ End Function
+
+ ''' <summary>
+ ''' UInt16\8c^\82Ì\90\94\92l\82ð3\81`36\90i\90\94\82Ì\90\94\92l\95¶\8e\9a\97ñ\82É\95Ï\8a·\82µ\82Ü\82·\81B
+ ''' </summary>
+ ''' <remarks>
+ ''' \81¦2\81^8\81^10\81^16\90i\90\94\82Í\81AConvert.ToString\83\81\83\\83b\83h\82ð\8eg\82Á\82Ä\82\82¾\82³\82¢\81B
+ ''' \81¦\81|\95\84\8d\86\82É\82Í\91Î\89\9e\82µ\82Ä\82¢\82Ü\82¹\82ñ\81B
+ ''' </remarks>
+ ''' <param name="n">\90\94\92l</param>
+ ''' <param name="radix">\8aî\90\94</param>
+ ''' <param name="uppercase">\91å\95¶\8e\9a\82©\81itrue\81j\81A\8f¬\95¶\8e\9a\82©\81ifalse\81j</param>
+ ''' <returns>\90\94\92l\95¶\8e\9a\97ñ</returns>
+ Public Overloads Shared Function ToString(ByVal n As Short, ByVal radix As Integer, ByVal uppercase As Boolean) As String
+
+ Return ToString(CType(n, ULong), radix, uppercase)
+
+ End Function
+
+ ''' <summary>
+ ''' UInt16\8c^\82Ì\90\94\92l\82ð3\81`36\90i\90\94\82Ì\90\94\92l\95¶\8e\9a\97ñ\82É\95Ï\8a·\82µ\82Ü\82·\81B
+ ''' </summary>
+ ''' <remarks>
+ ''' \81¦2\81^8\81^10\81^16\90i\90\94\82Í\81AConvert.ToString\83\81\83\\83b\83h\82ð\8eg\82Á\82Ä\82\82¾\82³\82¢\81B
+ ''' \81¦\81|\95\84\8d\86\82É\82Í\91Î\89\9e\82µ\82Ä\82¢\82Ü\82¹\82ñ\81B
+ ''' </remarks>
+ ''' <param name="n">\90\94\92l</param>
+ ''' <param name="radix">\8aî\90\94</param>
+ ''' <param name="uppercase">\91å\95¶\8e\9a\82©\81itrue\81j\81A\8f¬\95¶\8e\9a\82©\81ifalse\81j</param>
+ ''' <returns>\90\94\92l\95¶\8e\9a\97ñ</returns>
+ Public Overloads Shared Function ToString(ByVal n As UShort, ByVal radix As Integer, ByVal uppercase As Boolean) As String
+
+ Return ToString(CType(n, ULong), radix, uppercase)
+
+ End Function
+
+#End Region
+
+#Region "Int32\8c^\82¨\82æ\82ÑUInt32\8c^\97p\82Ì\83\81\83\\83b\83h\8cQ"
+
+ ''' <summary>
+ ''' 3\81`36\90i\90\94\82Ì\90\94\92l\95¶\8e\9a\97ñ\82ðInt32\8c^\82Ì\90\94\92l\82É\95Ï\8a·\82µ\82Ü\82·\81B
+ ''' </summary>
+ ''' <remarks>
+ ''' \81¦2\81^8\81^10\81^16\90i\90\94\82Í\81AConvert.ToInt32\83\81\83\\83b\83h\82ð\8eg\82Á\82Ä\82\82¾\82³\82¢\81B
+ ''' \81¦\81{\82â\81|\82Ì\95\84\8d\86\82â0x\82È\82Ç\82Ì\83v\83\8c\83t\83B\83b\83N\83X\82É\82Í\91Î\89\9e\82µ\82Ä\82¢\82Ü\82¹\82ñ\81B
+ ''' \81¦\88ø\90\94\82Æ\82È\82é\90\94\92l\95¶\8e\9a\97ñ\82É\81A\83X\83y\81[\83X\82È\82Ç\82Ì\95¶\8e\9a\82ð\8aÜ\82ß\82È\82¢\82Å\82\82¾\82³\82¢\81B
+ ''' </remarks>
+ ''' <param name="s">\90\94\92l\95¶\8e\9a\97ñ</param>
+ ''' <param name="radix">\8aî\90\94</param>
+ ''' <returns>\90\94\92l</returns>
+ Public Shared Function ToInt32(ByVal s As String, ByVal radix As Integer) As Integer
+
+ Dim digit As ULong = ToUInt64(s, radix)
+ CheckDigitOverflow(digit, Int32.MaxValue)
+ Return CType(digit, Integer)
+
+ End Function
+
+ ''' <summary>
+ ''' 3\81`36\90i\90\94\82Ì\90\94\92l\95¶\8e\9a\97ñ\82ðUInt32\8c^\82Ì\90\94\92l\82É\95Ï\8a·\82µ\82Ü\82·\81B
+ ''' </summary>
+ ''' <remarks>
+ ''' \81¦2\81^8\81^10\81^16\90i\90\94\82Í\81AConvert.ToUInt32\83\81\83\\83b\83h\82ð\8eg\82Á\82Ä\82\82¾\82³\82¢\81B
+ ''' \81¦\81{\82â\81|\82Ì\95\84\8d\86\82â0x\82È\82Ç\82Ì\83v\83\8c\83t\83B\83b\83N\83X\82É\82Í\91Î\89\9e\82µ\82Ä\82¢\82Ü\82¹\82ñ\81B
+ ''' \81¦\88ø\90\94\82Æ\82È\82é\90\94\92l\95¶\8e\9a\97ñ\82É\81A\83X\83y\81[\83X\82È\82Ç\82Ì\95¶\8e\9a\82ð\8aÜ\82ß\82È\82¢\82Å\82\82¾\82³\82¢\81B
+ ''' </remarks>
+ ''' <param name="s">\90\94\92l\95¶\8e\9a\97ñ</param>
+ ''' <param name="radix">\8aî\90\94</param>
+ ''' <returns>\90\94\92l</returns>
+ Public Shared Function ToUInt32(ByVal s As String, ByVal radix As Integer) As UInteger
+
+ Dim digit As ULong = ToUInt64(s, radix)
+ CheckDigitOverflow(digit, UInt32.MaxValue)
+ Return CType(digit, UInteger)
+
+ End Function
+
+ ''' <summary>
+ ''' UInt32\8c^\82Ì\90\94\92l\82ð3\81`36\90i\90\94\82Ì\90\94\92l\95¶\8e\9a\97ñ\82É\95Ï\8a·\82µ\82Ü\82·\81B
+ ''' </summary>
+ ''' <remarks>
+ ''' \81¦2\81^8\81^10\81^16\90i\90\94\82Í\81AConvert.ToString\83\81\83\\83b\83h\82ð\8eg\82Á\82Ä\82\82¾\82³\82¢\81B
+ ''' \81¦\81|\95\84\8d\86\82É\82Í\91Î\89\9e\82µ\82Ä\82¢\82Ü\82¹\82ñ\81B
+ ''' </remarks>
+ ''' <param name="n">\90\94\92l</param>
+ ''' <param name="radix">\8aî\90\94</param>
+ ''' <param name="uppercase">\91å\95¶\8e\9a\82©\81itrue\81j\81A\8f¬\95¶\8e\9a\82©\81ifalse\81j</param>
+ ''' <returns>\90\94\92l\95¶\8e\9a\97ñ</returns>
+ Public Overloads Shared Function ToString(ByVal n As Integer, ByVal radix As Integer, ByVal uppercase As Boolean) As String
+
+ Return ToString(CType(n, ULong), radix, uppercase)
+
+ End Function
+
+ ''' <summary>
+ ''' UInt32\8c^\82Ì\90\94\92l\82ð3\81`36\90i\90\94\82Ì\90\94\92l\95¶\8e\9a\97ñ\82É\95Ï\8a·\82µ\82Ü\82·\81B
+ ''' </summary>
+ ''' <remarks>
+ ''' \81¦2\81^8\81^10\81^16\90i\90\94\82Í\81AConvert.ToString\83\81\83\\83b\83h\82ð\8eg\82Á\82Ä\82\82¾\82³\82¢\81B
+ ''' \81¦\81|\95\84\8d\86\82É\82Í\91Î\89\9e\82µ\82Ä\82¢\82Ü\82¹\82ñ\81B
+ ''' </remarks>
+ ''' <param name="n">\90\94\92l</param>
+ ''' <param name="radix">\8aî\90\94</param>
+ ''' <param name="uppercase">\91å\95¶\8e\9a\82©\81itrue\81j\81A\8f¬\95¶\8e\9a\82©\81ifalse\81j</param>
+ ''' <returns>\90\94\92l\95¶\8e\9a\97ñ</returns>
+ Public Overloads Shared Function ToString(ByVal n As UInteger, ByVal radix As Integer, ByVal uppercase As Boolean) As String
+
+ Return ToString(CType(n, ULong), radix, uppercase)
+
+ End Function
+
+#End Region
+
+#Region "Int64\8c^\82¨\82æ\82ÑUInt64\8c^\97p\82Ì\83\81\83\\83b\83h\8cQ"
+
+ ''' <summary>
+ ''' 3\81`36\90i\90\94\82Ì\90\94\92l\95¶\8e\9a\97ñ\82ðInt64\8c^\82Ì\90\94\92l\82É\95Ï\8a·\82µ\82Ü\82·\81B
+ ''' </summary>
+ ''' <remarks>
+ ''' \81¦2\81^8\81^10\81^16\90i\90\94\82Í\81AConvert.ToInt64\83\81\83\\83b\83h\82ð\8eg\82Á\82Ä\82\82¾\82³\82¢\81B
+ ''' \81¦\81{\82â\81|\82Ì\95\84\8d\86\82â0x\82È\82Ç\82Ì\83v\83\8c\83t\83B\83b\83N\83X\82É\82Í\91Î\89\9e\82µ\82Ä\82¢\82Ü\82¹\82ñ\81B
+ ''' \81¦\88ø\90\94\82Æ\82È\82é\90\94\92l\95¶\8e\9a\97ñ\82É\81A\83X\83y\81[\83X\82È\82Ç\82Ì\95¶\8e\9a\82ð\8aÜ\82ß\82È\82¢\82Å\82\82¾\82³\82¢\81B
+ ''' </remarks>
+ ''' <param name="s">\90\94\92l\95¶\8e\9a\97ñ</param>
+ ''' <param name="radix">\8aî\90\94</param>
+ ''' <returns>\90\94\92l</returns>
+ Public Shared Function ToInt64(ByVal s As String, ByVal radix As Integer) As Long
+
+ Dim digit As ULong = ToUInt64(s, radix)
+ CheckDigitOverflow(digit, Int64.MaxValue)
+ Return CType(digit, Long)
+
+ End Function
+
+ ''' <summary>
+ ''' 3\81`36\90i\90\94\82Ì\90\94\92l\95¶\8e\9a\97ñ\82ðUInt64\8c^\82Ì\90\94\92l\82É\95Ï\8a·\82µ\82Ü\82·\81B
+ ''' </summary>
+ ''' <remarks>
+ ''' \81¦2\81^8\81^10\81^16\90i\90\94\82Í\81AConvert.ToUInt64\83\81\83\\83b\83h\82ð\8eg\82Á\82Ä\82\82¾\82³\82¢\81B
+ ''' \81¦\81{\82â\81|\82Ì\95\84\8d\86\82â0x\82È\82Ç\82Ì\83v\83\8c\83t\83B\83b\83N\83X\82É\82Í\91Î\89\9e\82µ\82Ä\82¢\82Ü\82¹\82ñ\81B
+ ''' \81¦\88ø\90\94\82Æ\82È\82é\90\94\92l\95¶\8e\9a\97ñ\82É\81A\83X\83y\81[\83X\82È\82Ç\82Ì\95¶\8e\9a\82ð\8aÜ\82ß\82È\82¢\82Å\82\82¾\82³\82¢\81B
+ ''' </remarks>
+ ''' <param name="s">\90\94\92l\95¶\8e\9a\97ñ</param>
+ ''' <param name="radix">\8aî\90\94</param>
+ ''' <returns>\90\94\92l</returns>
+ Public Shared Function ToUInt64(ByVal s As String, ByVal radix As Integer) As ULong
+
+ ' \88ø\90\94\82ð\83`\83F\83b\83N\82ð\82·\82é
+ CheckNumberArgument(s)
+ CheckRadixArgument(radix)
+
+ Dim curValue As ULong = 0 ' \95Ï\8a·\92\86\82Ì\90\94\92l
+ Dim maxValue As ULong = CType(UInt64.MaxValue / CType(radix, ULong), ULong) ' \8dÅ\91å\92l\82Ì1\82¯\82½\91O\82Ì\90\94\92l
+
+ ' \90\94\92l\95¶\8e\9a\97ñ\82ð\89ð\90Í\82µ\82Ä\90\94\92l\82É\95Ï\8a·\82·\82é
+ Dim num As Char ' \8f\88\97\9d\92\86\82Ì1\82¯\82½\82Ì\90\94\92l\95¶\8e\9a\97ñ
+ Dim digit As Integer ' \8f\88\97\9d\92\86\82Ì1\82¯\82½\82Ì\90\94\92l
+ Dim length As Integer = s.Length
+ For i As Integer = 0 To length - 1
+ num = s(i)
+ digit = GetDigitFromNumber(num)
+ CheckDigitOutOfRange(digit, radix)
+
+ ' \8e\9f\82Éradix\82ð\8a|\82¯\82é\82Æ\82«\82É\90\94\92l\82ª\83I\81[\83o\81[\83t\83\8d\81[\82µ\82È\82¢\82©\82ð\8e\96\91O\82É\83`\83F\83b\83N\82·\82é
+ CheckDigitOverflow(curValue, maxValue)
+ curValue = curValue * CType(radix, ULong) + CType(digit, ULong)
+ Next
+
+ Return curValue
+
+ End Function
+
+ ''' <summary>
+ ''' UInt64\8c^\82Ì\90\94\92l\82ð3\81`36\90i\90\94\82Ì\90\94\92l\95¶\8e\9a\97ñ\82É\95Ï\8a·\82µ\82Ü\82·\81B
+ ''' </summary>
+ ''' <remarks>
+ ''' \81¦2\81^8\81^10\81^16\90i\90\94\82Í\81AConvert.ToString\83\81\83\\83b\83h\82ð\8eg\82Á\82Ä\82\82¾\82³\82¢\81B
+ ''' \81¦\81|\95\84\8d\86\82É\82Í\91Î\89\9e\82µ\82Ä\82¢\82Ü\82¹\82ñ\81B
+ ''' </remarks>
+ ''' <param name="n">\90\94\92l</param>
+ ''' <param name="radix">\8aî\90\94</param>
+ ''' <param name="uppercase">\91å\95¶\8e\9a\82©\81itrue\81j\81A\8f¬\95¶\8e\9a\82©\81ifalse\81j</param>
+ ''' <returns>\90\94\92l\95¶\8e\9a\97ñ</returns>
+ Public Overloads Shared Function ToString(ByVal n As Long, ByVal radix As Integer, ByVal uppercase As Boolean) As String
+
+ Return ToString(CType(n, ULong), radix, uppercase)
+
+ End Function
+
+ ''' <summary>
+ ''' UInt64\8c^\82Ì\90\94\92l\82ð3\81`36\90i\90\94\82Ì\90\94\92l\95¶\8e\9a\97ñ\82É\95Ï\8a·\82µ\82Ü\82·\81B
+ ''' </summary>
+ ''' <remarks>
+ ''' \81¦2\81^8\81^10\81^16\90i\90\94\82Í\81AConvert.ToString\83\81\83\\83b\83h\82ð\8eg\82Á\82Ä\82\82¾\82³\82¢\81B
+ ''' \81¦\81|\95\84\8d\86\82É\82Í\91Î\89\9e\82µ\82Ä\82¢\82Ü\82¹\82ñ\81B
+ ''' </remarks>
+ ''' <param name="n">\90\94\92l</param>
+ ''' <param name="radix">\8aî\90\94</param>
+ ''' <param name="uppercase">\91å\95¶\8e\9a\82©\81itrue\81j\81A\8f¬\95¶\8e\9a\82©\81ifalse\81j</param>
+ ''' <returns>\90\94\92l\95¶\8e\9a\97ñ</returns>
+ Public Overloads Shared Function ToString(ByVal n As ULong, ByVal radix As Integer, ByVal uppercase As Boolean) As String
+
+ ' \88ø\90\94\82ð\83`\83F\83b\83N\82ð\82·\82é
+ CheckRadixArgument(radix)
+
+ ' \90\94\92l\82Ì\81u0\81v\82Í\81A\82Ç\82Ì\90i\90\94\82Å\82à\81u0\81v\82É\82È\82é
+ If n = 0 Then
+ Return "0"
+ End If
+
+ Dim curValue As New StringBuilder(41) ' \95Ï\8a·\92\86\82Ì\90\94\92l\95¶\8e\9a\97ñ
+ ' \81¦UInt64.MaxValue\82Ì\90\94\92l\82ð3\90i\90\94\82Å\95\\8c»\82·\82é\82Æ41\82¯\82½\82Å\82·\81B
+ Dim curDigit As ULong = n ' \96¢\8f\88\97\9d\82Ì\90\94\92l
+
+ ' \90\94\92l\82ð\89ð\90Í\82µ\82Ä\90\94\92l\95¶\8e\9a\97ñ\82É\95Ï\8a·\82·\82é
+ Dim digit As ULong ' \8f\88\97\9d\92\86\82Ì1\82¯\82½\82Ì\90\94\92l
+ Do
+ ' \88ê\94Ô\89º\82Ì\82¯\82½\82Ì\90\94\92l\82ð\8eæ\82è\8fo\82·
+ digit = curDigit Mod CType(radix, ULong)
+ ' \8eæ\82è\8fo\82µ\82½1\82¯\82½\82ð\90Ø\82è\8eÌ\82Ä\82é
+ curDigit = CType(curDigit / CType(radix, ULong), ULong)
+
+ curValue.Insert(0, GetNumberFromDigit(CType(digit, Integer), uppercase))
+ Loop While curDigit <> 0
+
+ Return curValue.ToString()
+
+ End Function
+
+#End Region
+
+#Region "Decimal\8c^\97p\82Ì\83\81\83\\83b\83h\8cQ"
+
+ ''' <summary>
+ ''' 3\81`36\90i\90\94\82Ì\90\94\92l\95¶\8e\9a\97ñ\82ðDecimal\8c^\82Ì\90\94\92l\82É\95Ï\8a·\82µ\82Ü\82·\81B
+ ''' </summary>
+ ''' <remarks>
+ ''' \81¦2\81^8\81^10\81^16\90i\90\94\82Í\81AConvert.ToDecimal\83\81\83\\83b\83h\82ð\8eg\82Á\82Ä\82\82¾\82³\82¢\81B
+ ''' \81¦\81{\82â\81|\82Ì\95\84\8d\86\82â0x\82È\82Ç\82Ì\83v\83\8c\83t\83B\83b\83N\83X\82É\82Í\91Î\89\9e\82µ\82Ä\82¢\82Ü\82¹\82ñ\81B
+ ''' \81¦\88ø\90\94\82Æ\82È\82é\90\94\92l\95¶\8e\9a\97ñ\82É\81A\83X\83y\81[\83X\82È\82Ç\82Ì\95¶\8e\9a\82ð\8aÜ\82ß\82È\82¢\82Å\82\82¾\82³\82¢\81B
+ ''' </remarks>
+ ''' <param name="s">\90\94\92l\95¶\8e\9a\97ñ</param>
+ ''' <param name="radix">\8aî\90\94</param>
+ ''' <returns>\90\94\92l</returns>
+ Public Shared Function ToDecimal(ByVal s As String, ByVal radix As Integer) As Decimal
+
+ ' \88ø\90\94\82ð\83`\83F\83b\83N\82ð\82·\82é
+ CheckNumberArgument(s)
+ CheckRadixArgument(radix)
+
+ Dim curValue As Decimal = 0 ' \95Ï\8a·\92\86\82Ì\90\94\92l
+ Dim maxValue As Decimal = Decimal.MaxValue / CType(radix, Decimal) ' \8dÅ\91å\92l\82Ì1\82¯\82½\91O\82Ì\90\94\92l
+
+ ' \90\94\92l\95¶\8e\9a\97ñ\82ð\89ð\90Í\82µ\82Ä\90\94\92l\82É\95Ï\8a·\82·\82é
+ Dim num As Char ' \8f\88\97\9d\92\86\82Ì1\82¯\82½\82Ì\90\94\92l\95¶\8e\9a\97ñ
+ Dim digit As Integer ' \8f\88\97\9d\92\86\82Ì1\82¯\82½\82Ì\90\94\92l
+ Dim length As Integer = s.Length
+ For i As Integer = 0 To length - 1
+ num = s(i)
+ digit = GetDigitFromNumber(num)
+ CheckDigitOutOfRange(digit, radix)
+
+ ' \8e\9f\82Éradix\82ð\8a|\82¯\82é\82Æ\82«\82É\90\94\92l\82ª\83I\81[\83o\81[\83t\83\8d\81[\82µ\82È\82¢\82©\82ð\8e\96\91O\82É\83`\83F\83b\83N\82·\82é
+ CheckDigitOverflow(curValue, maxValue)
+ curValue = curValue * CType(radix, Decimal) + CType(digit, Decimal)
+ Next
+
+ Return curValue
+
+ End Function
+
+ ''' <summary>
+ ''' Decimal\8c^\82Ì\90\94\92l\82ð3\81`36\90i\90\94\82Ì\90\94\92l\95¶\8e\9a\97ñ\82É\95Ï\8a·\82µ\82Ü\82·\81B
+ ''' </summary>
+ ''' <remarks>
+ ''' \81¦2\81^8\81^10\81^16\90i\90\94\82Í\81AConvert.ToString\83\81\83\\83b\83h\82ð\8eg\82Á\82Ä\82\82¾\82³\82¢\81B
+ ''' \81¦\81|\95\84\8d\86\82É\82Í\91Î\89\9e\82µ\82Ä\82¢\82Ü\82¹\82ñ\81B
+ ''' </remarks>
+ ''' <param name="n">\90\94\92l</param>
+ ''' <param name="radix">\8aî\90\94</param>
+ ''' <param name="uppercase">\91å\95¶\8e\9a\82©\81itrue\81j\81A\8f¬\95¶\8e\9a\82©\81ifalse\81j</param>
+ ''' <returns>\90\94\92l\95¶\8e\9a\97ñ</returns>
+ Public Overloads Shared Function ToString(ByVal n As Decimal, ByVal radix As Integer, ByVal uppercase As Boolean) As String
+
+ ' \88ø\90\94\82ð\83`\83F\83b\83N\82ð\82·\82é
+ CheckRadixArgument(radix)
+
+ ' \90\94\92l\82Ì\81u0\81v\82Í\81A\82Ç\82Ì\90i\90\94\82Å\82à\81u0\81v\82É\82È\82é
+ If n = 0 Then
+ Return "0"
+ End If
+
+ Dim curValue As New StringBuilder(120) ' \95Ï\8a·\92\86\82Ì\90\94\92l\95¶\8e\9a\97ñ
+ ' \81¦Decimal.MaxValue\82Ì\90\94\92l\82ð3\90i\90\94\82Å\95\\8c»\82·\82é\82Æ120\82¯\82½\82Å\82·\81B
+ Dim curDigit As Decimal = n ' \96¢\8f\88\97\9d\82Ì\90\94\92l
+
+ ' \90\94\92l\82ð\89ð\90Í\82µ\82Ä\90\94\92l\95¶\8e\9a\97ñ\82É\95Ï\8a·\82·\82é
+ Dim digit As Decimal ' \8f\88\97\9d\92\86\82Ì1\82¯\82½\82Ì\90\94\92l
+ Do
+ ' \88ê\94Ô\89º\82Ì\82¯\82½\82Ì\90\94\92l\82ð\8eæ\82è\8fo\82·
+ digit = curDigit Mod CType(radix, Decimal)
+ ' \8eæ\82è\8fo\82µ\82½1\82¯\82½\82ð\90Ø\82è\8eÌ\82Ä\82é
+ curDigit = curDigit / CType(radix, Decimal)
+
+ curValue.Insert(0, GetNumberFromDigit(CType(digit, Integer), uppercase))
+ Loop While curDigit <> 0
+
+ Return curValue.ToString()
+
+ End Function
+
+#End Region
+
+#Region "\93à\95\94\82Å\8eg\97p\82µ\82Ä\82¢\82é\83\81\83\\83b\83h\8cQ"
+
+ Private Shared Sub CheckNumberArgument(ByVal s As String)
+
+ If s = Nothing OrElse s = String.Empty Then
+ Throw New ArgumentException("\90\94\92l\95¶\8e\9a\97ñ\82ª\8ew\92è\82³\82ê\82Ä\82¢\82Ü\82¹\82ñ\81B")
+ End If
+
+ End Sub
+
+ Private Shared Sub CheckRadixArgument(ByVal radix As Integer)
+
+ If radix = 2 OrElse radix = 8 OrElse radix = 10 OrElse radix = 16 Then
+ Throw New ArgumentException("2\81^8\81^10\81^16\90i\90\94\82ÍSystem.Convert\83N\83\89\83X\82ð\8eg\82Á\82Ä\82\82¾\82³\82¢\81B")
+ End If
+ If radix <= 1 OrElse 36 < radix Then
+ Throw New ArgumentException("3\81`36\90i\90\94\82É\82µ\82©\91Î\89\9e\82µ\82Ä\82¢\82Ü\82¹\82ñ\81B")
+ End If
+
+ End Sub
+
+ Private Shared Sub CheckDigitOutOfRange(ByVal digit As Integer, ByVal radix As Integer)
+
+ If digit < 0 OrElse radix <= digit Then
+ Throw New ArgumentOutOfRangeException("\90\94\92l\82ª\94Í\88Í\8aO\82Å\82·\81B")
+ End If
+
+ End Sub
+
+ Private Shared Sub CheckDigitOverflow(ByVal curValue As ULong, ByVal maxValue As ULong)
+
+ If curValue > maxValue Then
+ Throw New OverflowException("\90\94\92l\82ª\8dÅ\91å\92l\82ð\92´\82¦\82Ü\82µ\82½\81B")
+ End If
+
+ End Sub
+
+ Private Shared Sub CheckDigitOverflow(ByVal curValue As Decimal, ByVal maxValue As Decimal)
+
+ If curValue > maxValue Then
+ Throw New OverflowException("\90\94\92l\82ª\8dÅ\91å\92l\82ð\92´\82¦\82Ü\82µ\82½\81B")
+ End If
+
+ End Sub
+
+ Private Shared Function GetDigitFromNumber(ByVal num As Char) As Integer
+
+ Dim ascNum As Integer = Asc(num)
+ If ascNum >= Asc("0") AndAlso ascNum <= Asc("9") Then
+ Return Asc(num) - Asc("0")
+ ElseIf ascNum >= Asc("A") AndAlso ascNum <= Asc("Z") Then
+ Return ascNum - Asc("A") + 10
+ ElseIf ascNum >= Asc("a") AndAlso ascNum <= Asc("z") Then
+ Return Asc(ascNum.ToString) - Asc("a") + 10
+ Else
+ Return -1
+ End If
+
+ End Function
+
+ Private Shared Function GetNumberFromDigit(ByVal digit As Integer, ByVal uppercase As Boolean) As Char
+
+ If digit < 10 Then
+ Return Chr(Asc("0") + digit)
+ ElseIf uppercase Then
+ Return Chr(Asc("A") + digit - 10)
+ Else
+ Return Chr(Asc("a") + digit - 10)
+ End If
+
+ End Function
+
+#End Region
+
+End Class
+
Public ProxyUser As String = ""
Public StatusMultiline As Boolean = False
Public StatusTextHeight As Integer = 38
+ Public PreviewDistance As Integer = 50
<Xml.Serialization.XmlIgnore()> _
Public FontUnread As New Font(SystemFonts.DefaultFont, FontStyle.Bold Or FontStyle.Underline)
Me.ToolStripContainer1 = New System.Windows.Forms.ToolStripContainer
Me.StatusStrip1 = New System.Windows.Forms.StatusStrip
Me.StatusLabelUrl = New System.Windows.Forms.ToolStripStatusLabel
+ Me.StatusLabel = New Tween.TweenCustomControl.ToolStripLabelHistory
Me.HashStripSplitButton = New System.Windows.Forms.ToolStripSplitButton
Me.ContextMenuStripPostMode = New System.Windows.Forms.ContextMenuStrip(Me.components)
Me.ToolStripMenuItemUrlMultibyteSplit = New System.Windows.Forms.ToolStripMenuItem
Me.DeleteTabMenuItem = New System.Windows.Forms.ToolStripMenuItem
Me.TabImage = New System.Windows.Forms.ImageList(Me.components)
Me.SplitContainer2 = New System.Windows.Forms.SplitContainer
- Me.DummyTextBox = New System.Windows.Forms.TextBox
Me.TableLayoutPanel1 = New System.Windows.Forms.TableLayoutPanel
Me.UserPicture = New System.Windows.Forms.PictureBox
Me.ContextMenuStrip3 = New System.Windows.Forms.ContextMenuStrip(Me.components)
Me.UseHashtagMenuItem = New System.Windows.Forms.ToolStripMenuItem
Me.PreviewPicture = New System.Windows.Forms.PictureBox
Me.PreviewScrollBar = New System.Windows.Forms.VScrollBar
+ Me.DummyTextBox = New System.Windows.Forms.TextBox
Me.StatusText = New System.Windows.Forms.TextBox
Me.lblLen = New System.Windows.Forms.Label
Me.PostButton = New System.Windows.Forms.Button
Me.SaveFileDialog1 = New System.Windows.Forms.SaveFileDialog
Me.TimerRefreshIcon = New System.Windows.Forms.Timer(Me.components)
Me.OpenFileDialog1 = New System.Windows.Forms.OpenFileDialog
- Me.StatusLabel = New Tween.TweenCustomControl.ToolStripLabelHistory
Me.ToolStripContainer1.BottomToolStripPanel.SuspendLayout()
Me.ToolStripContainer1.ContentPanel.SuspendLayout()
Me.ToolStripContainer1.TopToolStripPanel.SuspendLayout()
resources.ApplyResources(Me.StatusLabelUrl, "StatusLabelUrl")
Me.StatusLabelUrl.Spring = True
'
+ 'StatusLabel
+ '
+ Me.StatusLabel.BorderSides = System.Windows.Forms.ToolStripStatusLabelBorderSides.Right
+ Me.StatusLabel.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text
+ Me.StatusLabel.DoubleClickEnabled = True
+ Me.StatusLabel.Name = "StatusLabel"
+ resources.ApplyResources(Me.StatusLabel, "StatusLabel")
+ '
'HashStripSplitButton
'
Me.HashStripSplitButton.AutoToolTip = False
Me.SplitContainer2.Panel2.Controls.Add(Me.PostButton)
Me.SplitContainer2.TabStop = False
'
- 'DummyTextBox
- '
- resources.ApplyResources(Me.DummyTextBox, "DummyTextBox")
- Me.DummyTextBox.Name = "DummyTextBox"
- '
'TableLayoutPanel1
'
resources.ApplyResources(Me.TableLayoutPanel1, "TableLayoutPanel1")
'
'SplitContainer3
'
+ Me.SplitContainer3.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D
Me.TableLayoutPanel1.SetColumnSpan(Me.SplitContainer3, 2)
resources.ApplyResources(Me.SplitContainer3, "SplitContainer3")
+ Me.SplitContainer3.FixedPanel = System.Windows.Forms.FixedPanel.Panel2
Me.SplitContainer3.Name = "SplitContainer3"
'
'SplitContainer3.Panel1
Me.PreviewScrollBar.Maximum = 0
Me.PreviewScrollBar.Name = "PreviewScrollBar"
'
+ 'DummyTextBox
+ '
+ resources.ApplyResources(Me.DummyTextBox, "DummyTextBox")
+ Me.DummyTextBox.Name = "DummyTextBox"
+ '
'StatusText
'
resources.ApplyResources(Me.StatusText, "StatusText")
'
Me.OpenFileDialog1.FileName = "OpenFileDialog1"
'
- 'StatusLabel
- '
- Me.StatusLabel.BorderSides = System.Windows.Forms.ToolStripStatusLabelBorderSides.Right
- Me.StatusLabel.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text
- Me.StatusLabel.DoubleClickEnabled = True
- Me.StatusLabel.Name = "StatusLabel"
- resources.ApplyResources(Me.StatusLabel, "StatusLabel")
- '
'TweenMain
'
Me.AllowDrop = True
<value>0, 0</value>
</data>
<data name="PostBrowser.Size" type="System.Drawing.Size, System.Drawing">
- <value>303, 82</value>
+ <value>299, 78</value>
</data>
<data name="PostBrowser.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
<value>0, 0</value>
</data>
<data name="PreviewPicture.Size" type="System.Drawing.Size, System.Drawing">
- <value>79, 82</value>
+ <value>75, 78</value>
</data>
<data name="PreviewPicture.SizeMode" type="System.Windows.Forms.PictureBoxSizeMode, System.Windows.Forms">
<value>Zoom</value>
<value>Off</value>
</data>
<data name="PreviewScrollBar.Location" type="System.Drawing.Point, System.Drawing">
- <value>79, 0</value>
+ <value>75, 0</value>
</data>
<data name="PreviewScrollBar.Size" type="System.Drawing.Size, System.Drawing">
- <value>17, 82</value>
+ <value>17, 78</value>
</data>
<data name="PreviewScrollBar.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
<data name=">>SplitContainer3.Panel2.ZOrder" xml:space="preserve">
<value>1</value>
</data>
+ <data name="SplitContainer3.Panel2MinSize" type="System.Int32, mscorlib">
+ <value>0</value>
+ </data>
<data name="SplitContainer3.Size" type="System.Drawing.Size, System.Drawing">
<value>403, 82</value>
</data>
<data name=">>StatusLabelUrl.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
+ <data name=">>StatusLabel.Name" xml:space="preserve">
+ <value>StatusLabel</value>
+ </data>
+ <data name=">>StatusLabel.Type" xml:space="preserve">
+ <value>Tween.TweenCustomControl.ToolStripLabelHistory, Tween, Version=0.1.0.0, Culture=neutral, PublicKeyToken=null</value>
+ </data>
<data name=">>HashStripSplitButton.Name" xml:space="preserve">
<value>HashStripSplitButton</value>
</data>
<data name=">>OpenFileDialog1.Type" xml:space="preserve">
<value>System.Windows.Forms.OpenFileDialog, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
- <data name=">>StatusLabel.Name" xml:space="preserve">
- <value>StatusLabel</value>
- </data>
- <data name=">>StatusLabel.Type" xml:space="preserve">
- <value>Tween.TweenCustomControl.ToolStripLabelHistory, Tween, Version=0.1.0.0, Culture=neutral, PublicKeyToken=null</value>
- </data>
<data name=">>$this.Name" xml:space="preserve">
<value>TweenMain</value>
</data>
Private _myLoc As Point '画面位置
Private _mySpDis As Integer '区切り位置
Private _mySpDis2 As Integer '発言欄区切り位置
+ Private _mySpDis3 As Integer 'プレビュー区切り位置
Private _iconSz As Integer 'アイコンサイズ(現在は16、24、48の3種類。将来直接数字指定可能とする 注:24x24の場合に26と指定しているのはMSゴシック系フォントのための仕様)
Private _iconCol As Boolean '1列表示の時True(48サイズのとき)
Me.TopMost = SettingDialog.AlwaysTop
_mySpDis = _cfgLocal.SplitterDistance
_mySpDis2 = _cfgLocal.StatusTextHeight
+ _mySpDis3 = _cfgLocal.PreviewDistance
MultiLineMenuItem.Checked = _cfgLocal.StatusMultiline
'Me.Tween_ClientSizeChanged(Me, Nothing)
PlaySoundMenuItem.Checked = SettingDialog.PlaySound
If Me.WindowState = FormWindowState.Normal Then
_mySize = Me.ClientSize
_mySpDis = Me.SplitContainer1.SplitterDistance
+ _mySpDis3 = Me.SplitContainer3.SplitterDistance
If StatusText.Multiline Then _mySpDis2 = Me.StatusText.Height
modifySettingLocal = True
End If
If PostBrowser.DocumentText <> dTxt Then
PostBrowser.Visible = False
PostBrowser.DocumentText = dTxt
- thumbnail(_curPost.Id, dTxt)
+ Dim rg As New Regex("<a target=""_self"" href=""(?<url>http[^""]+)""", RegexOptions.IgnoreCase Or RegexOptions.Compiled)
+ Dim lnks As New List(Of String)
+ For Each lnk As Match In rg.Matches(dTxt)
+ lnks.Add(lnk.Result("${url}"))
+ Next
+ thumbnail(_curPost.Id, lnks)
End If
Catch ex As System.Runtime.InteropServices.COMException
'原因不明
_cfgLocal.FormSize = _mySize
_cfgLocal.FormLocation = _myLoc
_cfgLocal.SplitterDistance = _mySpDis
+ _cfgLocal.PreviewDistance = _mySpDis3
_cfgLocal.StatusMultiline = StatusText.Multiline
_cfgLocal.StatusTextHeight = _mySpDis2
_cfgLocal.StatusText = SettingDialog.Status
Else
SplitContainer2.SplitterDistance = SplitContainer2.Height - SplitContainer2.Panel2MinSize - SplitContainer2.SplitterWidth
End If
+ Me.SplitContainer3.SplitterDistance = _cfgLocal.PreviewDistance
_initialLayout = False
End If
End Sub
End Property
#Region "イメージプレビュー"
- Private Function chk_url(ByVal dtxt As String) As String()
- Dim mc As System.Text.RegularExpressions.MatchCollection = _
- System.Text.RegularExpressions.Regex.Matches( _
- dtxt, _
- "<a\s+[^>]*href\s*=\s*(?:(?<quot>[""'])(?<url>.*?)\k<quot>|" + _
- "(?<url>[^\s>]+))[^>]*>(?<text>.*?)</a>", _
- System.Text.RegularExpressions.RegexOptions.IgnoreCase Or _
- System.Text.RegularExpressions.RegexOptions.Singleline)
-
- If mc.Count = 0 Then Return Nothing
-
- Dim result As New List(Of String)
- 'Dim re As Regex = New Regex("htt(p|ps)://twitter.com/.*")
- For Each m As System.Text.RegularExpressions.Match In mc
- 'If re.IsMatch(m.Groups("url").Value) = False Then
- result.Add(m.Groups("url").Value)
- 'End If
- Next
- Return result.ToArray
- End Function
-
Private bgw As BackgroundWorker
Private lckPrev As New Object
Private _prev As PreviewData
Implements IDisposable
Public statusId As Long
- Public urls As List(Of String)
- Public pics As New List(Of Image)
- Public Sub New(ByVal id As Long, ByVal urlList As List(Of String))
+ Public urls As List(Of KeyValuePair(Of String, String))
+ Public pics As New List(Of KeyValuePair(Of String, Image))
+ Public Sub New(ByVal id As Long, ByVal urlList As List(Of KeyValuePair(Of String, String)))
statusId = id
urls = urlList
End Sub
End If
' TODO: 共有のアンマネージ リソースを解放します
- For Each bmp As Bitmap In pics
- If bmp IsNot Nothing Then bmp.Dispose()
+ For Each pic As KeyValuePair(Of String, Image) In pics
+ If pic.Value IsNot Nothing Then pic.Value.Dispose()
Next
End If
Me.disposedValue = True
End Class
- Private Sub thumbnail(ByVal id As Long, ByVal dtxt As String)
+ Private Sub thumbnail(ByVal id As Long, ByVal links As List(Of String))
If Not PreviewPicture.Image Is Nothing Then
PreviewPicture.Image.Dispose()
PreviewPicture.Image = Nothing
+ Me.SplitContainer3.Panel2Collapsed = True
End If
SyncLock lckPrev
If _prev IsNot Nothing Then
_prev = Nothing
End If
End SyncLock
- Dim re As Regex
- Dim urls() As String = chk_url(dtxt)
- If urls Is Nothing Then Exit Sub
+ If links.Count = 0 Then
+ Me.PreviewScrollBar.Maximum = 0
+ Me.PreviewScrollBar.Enabled = False
+ Me.SplitContainer3.Panel2Collapsed = True
+ Exit Sub
+ End If
- Dim imglist As New List(Of String)
+ Dim imglist As New List(Of KeyValuePair(Of String, String))
- For Each url As String In urls
+ For Each url As String In links
+ Dim re As Regex
+ Dim mc As Match
+ 'imgur
+ re = New Regex("^http://imgur\.com/(\w+)\.jpg$", RegexOptions.IgnoreCase Or RegexOptions.Compiled)
+ mc = re.Match(url)
+ If mc.Success Then
+ imglist.Add(New KeyValuePair(Of String, String)(url, mc.Result("http://i.imgur.com/${1}l.jpg")))
+ Continue For
+ End If
'画像拡張子で終わるURL(直リンク)
- re = New Regex("http://.*(\.jpg|\.jpeg|\.gif|\.png|\.bmp)", RegexOptions.IgnoreCase)
- If re.IsMatch(url) Then
- imglist.Add(url)
+ re = New Regex("^http://.*(\.jpg|\.jpeg|\.gif|\.png|\.bmp)$", RegexOptions.IgnoreCase Or RegexOptions.Compiled)
+ mc = re.Match(url)
+ If mc.Success Then
+ imglist.Add(New KeyValuePair(Of String, String)(url, url))
Continue For
End If
'twitpic
- re = New Regex("http://twitpic\.com/.*", RegexOptions.IgnoreCase)
- If re.IsMatch(url) Then
- If url.IndexOf("http://twitpic.com/show/thumb/") = -1 Then
- imglist.Add(url.Replace("http://twitpic.com/", "http://twitpic.com/show/thumb/"))
- Continue For
- End If
+ re = New Regex("^http://twitpic\.com/(\w+)$", RegexOptions.IgnoreCase Or RegexOptions.Compiled)
+ mc = re.Match(url)
+ If mc.Success Then
+ imglist.Add(New KeyValuePair(Of String, String)(url, mc.Result("http://twitpic.com/show/thumb/${1}")))
+ Continue For
End If
'yfrog
- re = New Regex("http://yfrog\.com/.*", RegexOptions.IgnoreCase)
- If re.IsMatch(url) Then
- re = New Regex("http://yfrog\.com/.*\.th\.jpg")
- If re.IsMatch(url) = False Then
- imglist.Add(url + ".th.jpg")
- Continue For
- End If
+ re = New Regex("^http://yfrog\.com/(\w+)$", RegexOptions.IgnoreCase Or RegexOptions.Compiled)
+ mc = re.Match(url)
+ If mc.Success Then
+ imglist.Add(New KeyValuePair(Of String, String)(url, url + ".th.jpg"))
+ Continue For
End If
'tweetphoto
Const comp As String = "http://TweetPhotoAPI.com/api/TPAPI.svc/imagefromurl?size=thumbnail&url="
- re = New Regex("http://tweetphoto\.com/[0-9]*|http://pic\.gd/[a-z0-9]*", RegexOptions.IgnoreCase)
+ re = New Regex("^(http://tweetphoto\.com/[0-9]+|http://pic\.gd/[a-z0-9]+)$", RegexOptions.IgnoreCase Or RegexOptions.Compiled)
If re.IsMatch(url) Then
- re = New Regex(comp, RegexOptions.IgnoreCase)
- If re.IsMatch(url) = False Then
- imglist.Add(comp + url)
- Continue For
- End If
+ imglist.Add(New KeyValuePair(Of String, String)(url, comp + url))
+ Continue For
+ End If
+ 'Mobypicture
+ re = New Regex("^http://moby\.to/(\w+)$", RegexOptions.IgnoreCase Or RegexOptions.Compiled)
+ mc = re.Match(url)
+ If mc.Success Then
+ imglist.Add(New KeyValuePair(Of String, String)(url, mc.Result("http://mobypicture.com/?${1}:small")))
+ Continue For
+ End If
+ '携帯百景
+ re = New Regex("^http://movapic\.com/pic/(\w+)$", RegexOptions.IgnoreCase Or RegexOptions.Compiled)
+ mc = re.Match(url)
+ If mc.Success Then
+ imglist.Add(New KeyValuePair(Of String, String)(url, mc.Result("http://image.movapic.com/pic/s_${1}.jpeg")))
+ Continue For
+ End If
+ 'はてなフォトライフ
+ re = New Regex("^http://f\.hatena\.ne\.jp/(([a-z])[a-z0-9_-]{1,30}[a-z0-9])/((\d{8})\d+)$", RegexOptions.IgnoreCase Or RegexOptions.Compiled)
+ mc = re.Match(url)
+ If mc.Success Then
+ imglist.Add(New KeyValuePair(Of String, String)(url, mc.Result("http://img.f.hatena.ne.jp/images/fotolife/${2}/${1}/${4}/${3}_120.jpg")))
+ Continue For
+ End If
+ 'PhotoShare
+ re = New Regex("^http://(?:www\.)?bcphotoshare\.com/photos/\d+/(\d+)$", RegexOptions.IgnoreCase Or RegexOptions.Compiled)
+ mc = re.Match(url)
+ If mc.Success Then
+ imglist.Add(New KeyValuePair(Of String, String)(url, mc.Result("http://images.bcphotoshare.com/storages/${1}/thumb180.jpg")))
+ Continue For
+ End If
+ 'PhotoShare の短縮 URL
+ re = New Regex("^http://bctiny\.com/p(\w+)$", RegexOptions.IgnoreCase Or RegexOptions.Compiled)
+ mc = re.Match(url)
+ If mc.Success Then
+ imglist.Add(New KeyValuePair(Of String, String)(url, "http://images.bcphotoshare.com/storages/" + RadixConvert.ToInt32(mc.Result("${1}"), 32).ToString + "/thumb180.jpg"))
+ Continue For
+ End If
+ 'img.ly
+ re = New Regex("^http://img\.ly/(\w+)$", RegexOptions.IgnoreCase Or RegexOptions.Compiled)
+ mc = re.Match(url)
+ If mc.Success Then
+ imglist.Add(New KeyValuePair(Of String, String)(url, mc.Result("http://img.ly/show/thumb/${1}")))
+ Continue For
+ End If
+ 'brightkite
+ re = New Regex("^http://brightkite\.com/objects/((\w{2})(\w{2})\w+)$", RegexOptions.IgnoreCase Or RegexOptions.Compiled)
+ mc = re.Match(url)
+ If mc.Success Then
+ imglist.Add(New KeyValuePair(Of String, String)(url, mc.Result("http://cdn.brightkite.com/${2}/${3}/${1}-feed.jpg")))
+ Continue For
+ End If
+ 'Twitgoo
+ re = New Regex("^http://twitgoo\.com/(\w+)$", RegexOptions.IgnoreCase Or RegexOptions.Compiled)
+ mc = re.Match(url)
+ If mc.Success Then
+ imglist.Add(New KeyValuePair(Of String, String)(url, mc.Result("http://twitgoo.com/${1}/mini")))
+ Continue For
+ End If
+ 'pic.im
+ re = New Regex("^http://pic\.im/(\w+)$", RegexOptions.IgnoreCase Or RegexOptions.Compiled)
+ mc = re.Match(url)
+ If mc.Success Then
+ imglist.Add(New KeyValuePair(Of String, String)(url, mc.Result("http://pic.im/website/thumbnail/${1}")))
+ Continue For
+ End If
+ 'youtube
+ re = New Regex("^http://www\.youtube\.com/watch\?v=([\w\-]+)$", RegexOptions.IgnoreCase Or RegexOptions.Compiled)
+ mc = re.Match(url)
+ If mc.Success Then
+ imglist.Add(New KeyValuePair(Of String, String)(url, mc.Result("http://i.ytimg.com/vi/${1}/default.jpg")))
+ Continue For
End If
Next
- If imglist.Count = 0 Then Exit Sub
+ If imglist.Count = 0 Then
+ Me.PreviewScrollBar.Maximum = 0
+ Me.PreviewScrollBar.Enabled = False
+ Me.SplitContainer3.Panel2Collapsed = True
+ Exit Sub
+ End If
're = New Regex("http://.*\.jpg.*|http://.*(\.jpg|\.jpeg|\.gif|\.png|\.bmp)|http://twitpic\.com/show/thumb/.*|http://TweetPhotoAPI\.com/api/TPAPI\.svc/imagefromurl.*", RegexOptions.IgnoreCase)
'If re.IsMatch(imglist(0)) = True Then
Private Sub bgw_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs)
Dim arg As PreviewData = DirectCast(e.Argument, PreviewData)
- For Each url As String In arg.urls
+ For Each url As KeyValuePair(Of String, String) In arg.urls
Dim http As New HttpVarious
- Dim img As Image = http.GetImage(url)
+ Dim img As Image = http.GetImage(url.Value)
If img Is Nothing Then Continue For
- arg.pics.Add(img)
+ arg.pics.Add(New KeyValuePair(Of String, Image)(url.Key, img))
Next
If arg.pics.Count = 0 Then
Exit Sub
Private Sub bgw_Completed(ByVal sender As System.Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs)
SyncLock lckPrev
If _prev IsNot Nothing AndAlso _curPost IsNot Nothing AndAlso _prev.statusId = _curPost.Id Then
+ Me.SplitContainer3.Panel2Collapsed = False
Me.PreviewScrollBar.Maximum = _prev.pics.Count - 1
- If Me.PreviewScrollBar.Maximum > 1 Then
- Me.PreviewScrollBar.Value = 0
+ If Me.PreviewScrollBar.Maximum > 0 Then
+ Me.PreviewScrollBar.Enabled = True
+ Else
+ Me.PreviewScrollBar.Enabled = False
End If
- Me.PreviewPicture.Image = _prev.pics(0)
+ Me.PreviewScrollBar.Value = 0
+ Me.PreviewPicture.Image = _prev.pics(0).Value
+ Else
+ Me.PreviewScrollBar.Maximum = 0
+ Me.PreviewScrollBar.Enabled = False
+ Me.SplitContainer3.Panel2Collapsed = True
End If
End SyncLock
End Sub
SyncLock lckPrev
If _prev IsNot Nothing AndAlso _curPost IsNot Nothing AndAlso _prev.statusId = _curPost.Id Then
If _prev.pics.Count > e.NewValue Then
- Me.PreviewPicture.Image = _prev.pics(e.NewValue)
+ Me.PreviewPicture.Image = _prev.pics(e.NewValue).Value
End If
End If
End SyncLock
End Sub
+
+ Private Sub PreviewPicture_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles PreviewPicture.DoubleClick
+ If _prev IsNot Nothing Then
+ If Me.PreviewScrollBar.Value < _prev.pics.Count Then
+ OpenUriAsync(_prev.pics(Me.PreviewScrollBar.Value).Key)
+ End If
+ End If
+ End Sub
#End Region
Private Sub DummyTextBox_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DummyTextBox.Enter
DirectCast(Me.ListTab.SelectedTab.Tag, Control).Focus()
End If
End Sub
+
+ Private Sub SplitContainer3_SplitterMoved(ByVal sender As System.Object, ByVal e As System.Windows.Forms.SplitterEventArgs) Handles SplitContainer3.SplitterMoved
+ If Me.WindowState = FormWindowState.Normal AndAlso Not _initialLayout Then
+ _mySpDis3 = SplitContainer3.SplitterDistance
+ modifySettingLocal = True
+ End If
+ End Sub
End Class
<SubType>Form</SubType>
</Compile>
<Compile Include="Outputz.vb" />
+ <Compile Include="RadixConvert.vb" />
<Compile Include="SearchWord.Designer.vb">
<DependentUpon>SearchWord.vb</DependentUpon>
</Compile>
"http://bctiny.com/", _
"http://j.mp/", _
"http://goo.gl/", _
- "http://ow.ly/" _
+ "http://ow.ly/", _
+ "http://bkite.com/" _
}
Private Const _apiHost As String = "api."