为什么在程序中能正确运行的代码,在控件中出错??(100分)

  • 主题发起人 主题发起人 redsky.l
  • 开始时间 开始时间
R

redsky.l

Unregistered / Unconfirmed
GUEST, unregistred user!
var
OldBkMode : integer;
begin
with Image1.Canvas do begin
OldBkMode:= SetBkMode(Handle, TRANSPARENT);
TextOut(10, 50,'aaaa');
SetBkMode(Handle, OldBkMode);
end;
end;

在程序中运行无误,但加入到控件中时提示:
OldBkMode:= SetBkMode(Handle, TRANSPARENT);
这句话出错原因:整型和布尔型不一至????

真让我搞不明白为什么。请教各位了!!!
 
是不是with Image1.Canvas do begin的错误呀,我觉得不是
OldBkMode:= SetBkMode(Handle, TRANSPARENT);的错误
 
可能是你的单元或引用的单元中用一个SetBkMode函数,且返回Boolean值
改为OldBkMode:= Windows.SetBkMode(Handle, TRANSPARENT);试试
 
引用单元完全一样,我只想改一下Timage控件,直接从它继承。
在控件引用时是:
with Self.Canvas do begin
……
end;
 
你把单元贴出来吧,现在这样看不出问题来 :(
 
作用:在image上写上背景为透明字符。
程序中:
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

procedure TForm1.Button1Click(Sender: TObject);
var
OldBkMode : integer;
begin
with image1.Canvas do begin
OldBkMode := SetBkMode(Handle, TRANSPARENT);
TextOut(10, 50, 'Transparent!');
SetBkMode(Handle, OldBkMode);
end;
end;

控件(省去的应该是无关大局的东东,也就一两句):

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls, ExtDlgs;

type
TMyImage = class(TImage)
private
{ Private declarations }
FString:string;
FTextX,FTextY:integer;
FTextOut:boolean;
FTextTransparent:boolean;
FTextFont:TFont;
FTextBackColor:TColor;
protected
{ Protected declarations }
procedure Setstring(value: string);
procedure SetTextX(value: Integer);
procedure SetTextY(value: Integer);
procedure SetTextOut(value: boolean);
procedure SetTextTransparent(value: boolean);
procedure SetTextFont(value: TFont);
procedure SetTextBackColor(value: TColor);
public
{ Public declarations }
constructor Create(Owner: TComponent); override;
destructor Destroy; override;
procedure WriteString(a:boolean);
published
{ Published declarations }
property Text:String read FString Write Setstring ; //图片上显示的文字
property TextX:integer read FTextX Write SetTextX ; //文字输出的X轴位置
property TextY:integer read FTextY Write SetTextY ; //文字输出的Y轴位置
property TextOut:boolean read FTextOut Write setTextOut; //是否输出文字
property TextTransparent:boolean read FTextTransparent Write SetTextTransparent; //文字背景是否透明

……
procedure TMyImage.WriteString(a:boolean);
var
OldBkMode:integer;
begin
with self.Canvas do begin
if a then begin
Brush.Color:=FTextBackColor;
Font:=FTextFont;
OldBkMode:= SetBkMode(Handle, Transparent);
TextOut(FTextX,FTextY,FString);
SetBkMode(Handle, OldBkMode);
end
else begin
Brush.Color:=FTextBackColor;
Font:=FTextFont;
TextOut(FTextX,FTextY,FString);
end;
end;
end;

procedure TMyImage.Setstring(value: string);
begin
if FString<>value then FString:=value;
if FTextOut then begin
WriteString(FTextTransparent);
end;
end;
end.
 
OldBkMode:= SetBkMode(Handle, Transparent);
^^^^^^
可能错误在这里
 
能说一下原因吗?
 
单元引用的问题?:)
 
各位,如果说不出道道也不要紧呀,最关键的是要解决问题!!

我有一两次没报错,就那么一两次。但测试控件时,问题又来了,一大堆错误号!!!

这又是为什么??????
 
你不能确定错误语句的大致位置吗?就是是那个过程中出的错。
 
to:cgh0717,我前面已说的很清楚了。请看我的题
 
你是不是在 Create 方法中调用了 WriteString(例如改变了 Text)或者改变了 TextX, TextY, TextOut?
把你的 Create 方法贴出来吧
 
constructor TMyImage.Create(AOwner: TComponent);
begin
inherited ;
Mybmp:=Tbitmap.create;
with self do begin
FTextFont:=Font;
Mybmp.Height:=Height;
Mybmp.Width:=Width;
end;
FTextOut:=true;
FTextTransparent:=true;
end;

940801:谢谢你的关注,以上是我的Create代码。并没提到 WriteString 。
 
谢谢各位关心,问题已解决!!!
 
多人接受答案了。
 
后退
顶部