OSDN Git Service

Surface preview
authornaru <bottle@mikage.to>
Sat, 5 Apr 2003 16:08:00 +0000 (16:08 +0000)
committernaru <bottle@mikage.to>
Sat, 5 Apr 2003 16:08:00 +0000 (16:08 +0000)
bottleclient/MainForm.dfm
bottleclient/MainForm.pas
bottleclient/SurfacePreview.pas

index 44ea33a..cf0b30b 100755 (executable)
@@ -322,6 +322,7 @@ object frmSender: TfrmSender
       OnChange = memScriptChange
       OnKeyDown = memScriptKeyDown
       OnKeyPress = memScriptKeyPress
+      OnMouseMove = memScriptMouseMove
     end
   end
   object pnlPanel: TPanel
index 63260df..a845b08 100755 (executable)
@@ -228,6 +228,8 @@ type
     procedure actPasteExecute(Sender: TObject);
     procedure actCutExecute(Sender: TObject);
     procedure actSelectAllExecute(Sender: TObject);
+    procedure memScriptMouseMove(Sender: TObject; Shift: TShiftState; X,
+      Y: Integer);
   private
     FSleeping: boolean;
     FStatusText: String;
@@ -255,6 +257,10 @@ type
     //
     FHttp: THTTPDownloadThread; //HTTP\83_\83E\83\93\83\8d\81[\83h\83X\83\8c\83b\83h(\83C\83\93\83X\83^\83\93\83X\82Í1\8cÂ\82Ì\82Ý)
     FBeginConnectFailCount: integer; //\89½\93x\82à\90Ú\91±\8e¸\94s\82µ\82½\82ç\83\8a\83g\83\89\83C\92\86\8e~
+    //
+    FVisiblePreviewGhost: String;
+    FVisiblePreviewSurface: integer; //\83T\81[\83t\83B\83X\83v\83\8c\83r\83\85\81[\82Å\8c©\82¦\82Ä\82¢\82é\82à\82Ì
+    //
     procedure SetStatusText(const Value: String);
     procedure SetSleeping(const Value: boolean);
     procedure YenETrans;
@@ -282,6 +288,7 @@ type
     procedure BottleSstpResendTrying(Sender: TObject; MID: String);
     procedure BottleSstpResendEnd(Sender: TObject; MID: String);
     function IsSurfaceTag(const Script: String; var ID: integer): boolean;
+    procedure DoSurfacePreview(Surface: integer);
   public
     function DoTrans(var Script: String;
       Options: TScriptTransOptions): String;
@@ -951,9 +958,6 @@ end;
 
 procedure TfrmSender.ApplicationEventsHint(Sender: TObject);
 var id: integer;
-    ghost: String;
-    Bmp: TBitmap;
-    CPos: TPoint;
 begin
   if Length(Application.Hint) > 0 then
   begin
@@ -969,21 +973,7 @@ begin
     if IsSurfaceTag(Application.Hint, id) and Pref.SurfacePreviewOnHint then
     begin
       // \83T\81[\83t\83B\83X\83v\83\8c\83r\83\85\81[
-      if cbxTargetGhost.ItemIndex > 0 then
-        ghost := cbxTargetGhost.Text
-      else if FNowChannel <> '' then
-        ghost := ChannelList.Channel[FNowChannel].Ghost;
-      if ghost <> '' then
-      begin
-        Bmp := TBitmap.Create;
-        try
-          if Spps.TryGetImage(ghost, id, Bmp) then
-            GetCursorPos(CPos);
-            frmSurfacePreview.ShowPreview(Bmp, Self.Left-Bmp.Width, CPos.Y);
-        finally
-          Bmp.Free;
-        end;
-      end;
+      DoSurfacePreview(id);
     end;
   end else
   begin
@@ -2427,11 +2417,60 @@ begin
     Result := true;
     ID := Ord(Script[3]) - Ord('0')
   end
-  else if SsParser.Match(Script, '\s[%D]') = Length(Script) then
+  else if (Length(Script) > 0) and (SsParser.Match(Script, '\s[%D]') = Length(Script)) then
   begin
     Result := true;
     ID := StrToIntDef(SsParser.GetParam(Script, 1), 0);
   end;
 end;
 
+procedure TfrmSender.memScriptMouseMove(Sender: TObject;
+  Shift: TShiftState; X, Y: Integer);
+var id: integer;
+    token: String;
+begin
+  // \95Ò\8fW\83E\83B\83\93\83h\83E\82Å\83}\83E\83X\83|\83C\83\93\83g\82·\82é\82Æ\83T\81[\83t\83B\83X\83v\83\8c\83r\83\85\81[
+  token := memScript.TokenStringFromPos(Point(X, Y));
+  if IsSurfaceTag(token, id) then
+  begin
+    DoSurfacePreview(id);
+  end else
+  begin
+    frmSurfacePreview.HideAway;
+  end;
+end;
+
+procedure TfrmSender.DoSurfacePreview(Surface: integer);
+var Ghost: String;
+    Bmp: TBitmap;
+    CPos: TPoint;
+begin
+  if cbxTargetGhost.ItemIndex > 0 then
+    ghost := cbxTargetGhost.Text
+  else if FNowChannel <> '' then
+    ghost := ChannelList.Channel[FNowChannel].Ghost;
+
+  // \93ñ\8fd\95\\8e¦\82Ì\97}\90§
+  if (FVisiblePreviewGhost = Ghost) and (FVisiblePreviewSurface = Surface) and
+    not (frmSurfacePreview.IsHidden) then
+  begin
+    Exit;
+  end;
+
+
+  if ghost <> '' then
+  begin
+    Bmp := TBitmap.Create;
+    try
+      if Spps.TryGetImage(ghost, Surface, Bmp) then
+        GetCursorPos(CPos);
+        frmSurfacePreview.ShowPreview(Bmp, Self.Left-Bmp.Width, CPos.Y);
+        FVisiblePreviewGhost := Ghost;
+        FVisiblePreviewSurface := Surface;
+    finally
+      Bmp.Free;
+    end;
+  end;
+end;
+
 end.
index d6f8478..f9658e8 100644 (file)
@@ -18,6 +18,7 @@ type
     { Public \90é\8c¾ }
     procedure HideAway;
     procedure ShowPreview(Bmp: TBitmap; X, Y: integer);
+    function IsHidden: boolean;
   end;
 
 var
@@ -42,6 +43,11 @@ begin
   Top := Low(integer);
 end;
 
+function TfrmSurfacePreview.IsHidden: boolean;
+begin
+  Result := Left = Low(integer);
+end;
+
 procedure TfrmSurfacePreview.ShowPreview(Bmp: TBitmap; X, Y: integer);
 begin
   Image.Picture.Graphic := Bmp;