[Lazarus] Is anyone working with the simple datasets?
Felipe Monteiro de Carvalho
felipemonteiro.carvalho at gmail.com
Mon Apr 14 04:30:47 CEST 2008
Lee Jenkins wrote:
>
> Hi all,
>
> I'm having a problem with drawing text on an image using the DrawText
> function where the area around the text masked out. Please see the
> attached image.
>
> This same routine works perfectly in Delphi. Maybe the
> Canvas.Brush.Style := bsClear is not working?
>
> procedure TMyImage.DrawCaption;
> var
> lRect: TRect;
> begin
> // setup rect
> lRect.Left := 10;
> lRect.Top := 10;
> lRect.Right := Width -10;
> lRect.Bottom := Height -10;
> //Canvas.Pen.Style := psClear; // <-- tried this as well
> Canvas.Font.Assign(FButtonFont);
> Canvas.Brush.Style := bsClear;
> DrawText(Canvas.Handle, PChar(FCaption), -1, lRect,
> DT_WORDBREAK or DT_VCENTER or DT_CENTER or DT_END_ELLIPSIS);
> end;
>
Here is the problem that I was having with:
procedure TDTImageButton.HandleMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
lBmp: TBitmap;
begin
if Button = mbLeft then
begin
lBmp := FImageManager.ImageByName(FUpImageName);
Picture.Bitmap.Assign(lBmp);
DrawCaption;
end;
end;
Notice the line:
Picture.Bitmap.Assign(lBmp);
Changing it to
Canvas.Draw(0,0,lBmp);
Fixed the problem. Odd because it works in Delphi, but the .Canvas.Draw
methods doesn't seem to work well in delphi so I ended with this:
procedure TDTImageButton.HandleMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
lBmp: TBitmap;
begin
if Button = mbLeft then
begin
lBmp := FImageManager.ImageByName(FUpImageName);
{$IFDEF fpc}
Canvas.Draw(0,0,lBmp);
{$ELSE}
picture.Bitmap.Assign(lBmp);
{$endif}
DrawCaption;
end;
end;
procedure TDTImageButton.DrawCaption;
var
lRect: TRect;
lBmp: TBitmap;
begin
// setup rect
lRect.Left := 10;
lRect.Top := 10;
lRect.Right := Width -10;
lRect.Bottom := Height -10;
Canvas.Brush.Style := bsClear;
Canvas.Font.Assign(FButtonFont);
DrawText(Picture.Bitmap.Canvas.Handle, PChar(FCaption), -1, lRect,
DT_WORDBREAK or DT_CENTER);
end;
This works well and both methods are fast!
--
Warm Regards,
Lee
"When my company started out, we were really, really, really, really small.
Now...we're just really small."
More information about the Lazarus
mailing list