如何在Image上画网格?(100分)

  • 主题发起人 主题发起人 xiajun07
  • 开始时间 开始时间
X

xiajun07

Unregistered / Unconfirmed
GUEST, unregistred user!
我在做液晶字模软件。
怎么在Image上画网格。要求用户如果输入16*16的字体,网格就有16*16。网格数目根据用户选择来定。
如果哪位高手知道这种软件的原理,在这个100分基础上再送上100分!
 
procedure TForm1.Image1Click(Sender: TObject);
var
i: integer;
begin
Image1.Picture.Bitmap := TBitmap.Create;
Image1.Picture.Bitmap.Width := Image1.Width;
Image1.Picture.Bitmap.Height := Image1.Height;
with Image1.Picture.Bitmap.Canvas do
begin
for i := 1 to 100 do
begin
Moveto(i * 10, 0);
lineto(i * 10,100);
end;
end;


end;
 
只画出了竖线,没有横线。
你能讲讲字模软件的原理吗?
谢谢!
 
想绘出NetTransport下载进度那种点该怎么做!
 
// MM MM
// MMM MMM
// MMMM MMMM
// MMMMMMMMM
// MM MMM MM
// MM M MM
// MMMM MMMM
// iamy 2004
library locate_dll;


uses
sharemem,Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, jpeg, ComCtrls,
Un_main in 'Un_main.pas' {Form_main};
var
DLLApp: TApplication;
{$R *.res}
function locate(app:Tapplication;dfzone:pansichar;map:Tbitmap;x_n:integer;y_n:integer;viewstyle:integer;maxselect:integer;readoly:boolean):string;stdcall;
var
st:Tmemorystream;
begin
application:=app;
st:=Tmemorystream.Create;
form_main:=Tform_main.Create(application);
form_main.x_cnt:=x_n;
form_main.y_cnt:=y_n;
form_main.zone:=dfzone;
form_main.image1.Enabled:=(not readoly);
map.SaveToStream (st);
st.Position:=0;
form_main.image1.Picture.Bitmap.LoadFromStream(st);
st.Free;
form_main.ShowModal;
result:=form_main.zone;
form_main.Free;
end;


procedure ExitDLL(Reason: Integer);
begin
if Reason = DLL_PROCESS_DETACH then
begin
Application := DLLApp;
end;
end;


exports
locate;

begin
DLLApp := Application;
DLLProc := @ExitDLL;
end.

///////////////////////////////////////
procedure TForm_main.FormShow(Sender: TObject);
var
x_st:double;
y_st:double;
i:integer;
j:integer;
sp_zone:Tstrings;
begin
x_lines.Clear;
y_lines.Clear;
{form_main.x_cnt:=10;
form_main.y_cnt:=10;
form_main.zone:='0-0,1-3,5-5,9-9';}
x_st:=0;
y_st:=0;
x_pas:=image1.Picture.Width / x_cnt;
y_pas:=image1.Picture.Height / y_cnt;
for i:=0 to x_cnt do
begin
x_lines.Add(inttostr(round(x_st)));
for j:=0 to image1.Height do
begin
image1.Picture.Bitmap.Canvas.Pixels[round(x_st),j]:=fanse(image1.Picture.Bitmap.Canvas.Pixels[round(x_st),j]);
end;
x_st:=x_st+x_pas;

end;

for i:=0 to y_cnt do
begin
y_lines.Add(inttostr(round(y_st)));
for j:=0 to image1.Width do
begin
image1.Canvas.Pixels[j,round(y_st)]:=fanse(image1.Canvas.Pixels[j,round(y_st)]);
end;
y_st:=y_st+y_pas;
end;

if form_main.zone <>'' then
begin
sp_zone:=Tstringlist.Create;
sp_zone.Text:=form_main.zone;
sp_zone.Text:=form_main.formt(',',#13+#10,sp_zone.Text);
for i:=0 to sp_zone.Count-1 do
begin
putzone(sp_zone.Strings);
end;
sp_zone.Destroy;
end;

end;


function TForm_main.fanse(clr: integer): integer;
var
b:integer;
g:integer;
r:integer;
begin
b:=clr div 256 div 256;
g:=clr div 256 -b *256;
r:=clr - b*256*256 -g*256;
r:=256-r;
b:=256-b;
g:=256-g;
result:=b*256*256 +g*256+r;
end;
 
后退
顶部