Some questions about selection of pictures (or hot-pictures)

General TRichView support forum. Please post your questions here
Post Reply
jbmmpm
Posts: 2
Joined: Thu Aug 03, 2006 3:16 pm
Location: Saint Paul, MN
Contact:

Some questions about selection of pictures (or hot-pictures)

Post by jbmmpm »

I am working on an application that allows users to potentially select portions of text, or pictures, from within a richview document. When these various portions of the document are selected, we want to enahance them to make it obvious that they are selected. I have worked out the text part of this, but when the pictures are selected, they are marked with a thin border. Is there any way to make this border wider, or to otherwise make this graphic stand out from the rest of the contents of the document?

Any suggestions would be greatly appreciated!
Thanks
jbmmpm
Sergey Tkachenko
Site Admin
Posts: 17557
Joined: Sat Aug 27, 2005 10:28 am
Contact:

Post by Sergey Tkachenko »

There are no other ways of displaying picture selection supported.
Ok, I'll include the following changes in the next update.

1) New procedure

Code: Select all

procedure ShadeRectangle(Canvas: TCanvas; const R: TRect; Color: TColor);
const
  Bits: array[0..7] of Word =
       ($55, $aa, $55, $aa,
			 $55, $aa, $55, $aa);
var
  Bitmap: HBitmap;
  SaveBrush: HBrush;
  SaveTextColor, SaveBkColor: TColorRef;
  DC: HDC;
begin
  DC := Canvas.Handle;
  Bitmap := CreateBitmap(8, 8, 1, 1, @Bits);
  SaveBrush := SelectObject(DC, CreatePatternBrush(Bitmap));
  try
    SaveTextColor := SetTextColor(DC, clBlack);
    SaveBkColor := SetBkColor(DC, clWhite);
    with R do
      PatBlt(DC, Left, Top, Right - Left, Bottom - Top, $00A000C9); // and
    SetTextColor(DC, ColorToRGB(Color));
    SetBkColor(DC, clBlack);
    with R do
      PatBlt(DC, Left, Top, Right - Left, Bottom - Top, $00FA0089); // or
    SetBkColor(DC, SaveBkColor);
    SetTextColor(DC, SaveTextColor);
  finally
    DeleteObject(SelectObject(DC, SaveBrush));
    DeleteObject(Bitmap);
  end;
end;
2) Changes in RVItem.pas:

Code: Select all

procedure TRVGraphicItemInfo.Paint(x, y: Integer; Canvas: TCanvas;
  State: TRVItemDrawStates; Style: TRVStyle; dli: TRVDrawLineInfo);
var w,h: Integer;
    SelColor: TColor;
  {...............................................}
  <subprocedures here>
  {...............................................}
begin
  w := GetImageWidth(Style);
  h := GetImageHeight(Style);
  inc(x, Spacing); inc(y, Spacing);
  {$IFNDEF RVDONOTUSEANIMATION}
  if FAnimator<>nil then
    TRVAnimator(FAnimator).Draw(x,y,Canvas, False)
  else
  {$ENDIF}
    if ImageCopy<>nil then
      if ImageCopy is TBitmap then
        DrawBmp
      else
        DrawImage(ImageCopy)
    else
      DrawImage(Image);
  if (rvidsSelected in State) then begin
    if rvidsControlFocused in State then
      SelColor := Style.SelColor
    else
      SelColor := Style.InactiveSelColor;
    {$IFDEF RVSHADESELECTION}
    ShadeRectangle(Canvas, Bounds(x,y,w,h), SelColor);
    {$ELSE}
    Canvas.Pen.Color := SelColor;
    Canvas.Brush.Style := bsClear;
    if Canvas.Pen.Color<>clNone then begin
      Canvas.Pen.Style := psSolid;
      Canvas.Pen.Width := 1;
      Canvas.Rectangle(x-Spacing,y-Spacing, x+w+Spacing, y+h+Spacing);
    end;
    {$ENDIF}
  end;
  if (rvidsCurrent in State) and (Style.CurrentItemColor<>clNone) then begin
    Canvas.Pen.Width := 1;
    Canvas.Pen.Color := Style.CurrentItemColor;
    Canvas.Pen.Style := psSolid;
    Canvas.Brush.Style := bsClear;
    Canvas.Rectangle(x-Spacing-1,y-Spacing-1, x+w+Spacing+1, y+h+Spacing+1);
  end;
end;
If the project is compiled with RVSHADESELECTION define (you can add it in RV_Defs.inc or in the project options), selected pictures will be shown shaded with selection color.

Problems:
- animation is not supported, selection will not be shown properly for animated pictures;
- selected picture is shaded even when resize handles are shown
Post Reply