用Delphi的standalone程序能否画图?我相信应该能的,但不知道怎么做?

解决方案 »

  1.   

    TIWDynamicChart
    这是它里面画图的
      

  2.   

    给你个一直画线的,注意例子里的是bmp文件,如果想换成其他类型的,不能直接Load需要转换一下,你知道的。
    unit IWUnit1;
    {PUBDIST}interfaceuses
      IWAppForm, IWApplication, IWTypes, Classes, Controls, IWControl,
      IWCompDynamicChart, IWCompRectangle, IWCompButton, IWExtCtrls, Graphics,
      jpeg;type
      TformMain = class(TIWAppForm)
        IWImage1: TIWImage;
        procedure IWImage1MouseDown(ASender: TObject; const AX, AY: Integer);
        procedure IWAppFormCreate(Sender: TObject);
      public
      end;implementation
    {$R *.dfm}uses
      ServerController;procedure TformMain.IWImage1MouseDown(ASender: TObject; const AX,
      AY: Integer);
    var mCanvas:TCanvas;
    begin
            mCanvas:=IWImage1.Picture.Bitmap.Canvas;
            mCanvas.Pen.Width:=2;
            mCanvas.Pen.Color:=clRed;
            mCanvas.LineTo(Ax,AY);
    end;procedure TformMain.IWAppFormCreate(Sender: TObject);
    begin
            IWImage1.Picture.LoadFromFile('d:\test.bmp');
    end;end.
      

  3.   

    似乎无人知晓了,奇怪!一个事实是:用Delphi的standalone程序可以写汉字,例如uses sysutils;
    begin
      writeln('Hello,中国!');readln;
    end.就是一个完整的Delphi程序!汉字都能显示,一个点会显示不了吗?
      

  4.   

    何谓standalone?
    是否指的非GUI程序?一边就是canvas.point,canvas.line
      

  5.   

    standalone就是用不到配dfm的单个的独立程序,也叫控制台应用程序。你可以在Delphi上,依次点选File、New、Other、ConsoleApplication四步,来创建一个控制台应用程序,这时delphi就会自动产生具有如下代码的控制台程序:program Project1;{$APPTYPE CONSOLE}uses
      SysUtils;begin
      { TODO -oUser -cConsole Main : Insert code here }
    end.你在begin end. 之间填入要做的事情,例如填入writeln('Hello,中国!');readln;屏幕上就会显示Hello,中国!非常简单。如果不画图形,只学Pascal的语法,这样就是入门了。我现在问,既然汉字“中国”都能显示,是否能画一个点?
      

  6.   

    注:
    在单元Sysutils中没有任何画图程序,需要另加,
    我想知道,为了画一个像素,最少要另加几个单元?什么单元?
      

  7.   

    为什么要用控制台,运行环境不能带图形API?
    控制台程序在Delphi中一般称为Console App
    在Console程序中“画图”至少让我想到上个世纪90年代,那时候Windows远没有现在流行
    当时的环境是UCDOS,最流行的软件是金山WPS
    对了,在Console程序中画图,是不是DOS版WPS那样的?
    UCDOS有一个特显模块(tx.com),如果有必要,楼主可参考一下
      

  8.   

    “为什么要用控制台,运行环境不能带图形API?”
    就是力求程序简单,容易入门,同时也是为了弄清加在unit前面被uses的每个单元的意义。例如,为了简单,对于我前面那个程序,标题行(program Project1;)可以不要,
    被uses的Sysutils单元也是不必要的,可以简化成:{$APPTYPE CONSOLE}
    begin
       write('hello!');readln;
    end.readln不写也是行的,它只是为了保持显示页面,否则一闪就回到操作系统,但语句{$APPTYPE CONSOLE}不可省去,否则出错!究竟用到其中什么东西,还有待考察。我就是希望类似这样,弄清加在delphi每个unit前面被uses的每个单元的意义,及
    被自动插入程序中的每一个语句的意义。这种要求对DOS程序是完全做得到的,但进入Windows编程后大家都不提了。
      

  9.   

    以下是一个空form所含的代码:unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;type
      TForm1 = class(TForm)
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}end.
    我想弄清的就是uses语句中每一项的用途。
      

  10.   

    楼主获取分的明细:专题开发/技术/项目 :51277  , Delphi :3936  , Windows专区 :761  , 多媒体/设计/Flash/Silverlight 开发 :515  , 扩充话题 :491  , Web 开发 :456  , Java :428  , VB :305  , VC/MFC :240  , 社区支持 :91  , C++ Builder :71  , Linux/Unix社区 :60  , 其他开发语言 :60  , .NET技术 :43  , 硬件使用 :42  , PowerBuilder :40  , C/C++ :14  , Oracle :13  , 企业开发 :10  , MS-SQL Server :10  , 新版体验区 :6  , 移动平台 :3  , PHP :1  , 产品/厂家 :1   
      

  11.   

    楼主,你的要求很不合常理。控制台程序一般不需要画图,如果你想输出一个点,你直接 write('.'); 不就可以了。如果你的点是在任意位置,那么需要用GetDC取得控制台程序的DC,然后用canvas来画,要复杂些,如果你想让程序足够小,就uses一个windows,用api直接画点。不过如果这样的话,你就失去用delphi的意义了,delphi是快速开发工具,你这等于跟用VC差不多。一般做图是在窗体上画,在onPaint事件里面来操作。如果你只是单纯的学delphi,你可以直接从窗体学起,控制台程序可以直接忽略。
      

  12.   

    Delphi虽然我也用了不少年,但都是零零星星自学获得,不成系统,不知道的东西非常多非常多,
    希望得到楼上各位高手的帮助,其中包括我在本帖中提出的原始问题。
      

  13.   

    你的回复使我的问题的求解向前走了一步:知道GetDC取得控制台程序的DC后就可用canvas来画点。为此非常高兴。(我并不求快,只希望弄清原理。)。
      

  14.   

    续我前面31贴:用delphi getDC不难,如uses
      windows,SysUtils;
    Var
     dc: HDC;
    begin
     dc := getdc(0); //0表示得到屏幕场景 // ???这里如何写,end.就行了,但进一步怎么写,才能在屏幕上画个点或线?就不知道了!
      

  15.   

    在网上搜到一个,但运行后没有出来任何图形,不知道为什么?以下代码以光标所在位置为中心,在全屏幕上绘制一个十字架:
    var
        FullscreenCanvas:TCanvas;
        DC:HDC;
    begin
        DC:=GetDC(0);//取得屏幕的DC,参数0指的是屏幕
        FullscreenCanvas := TCanvas.Create;//创建一个CANVAS对象
        FullscreenCanvas.Handle := DC;   //将画布关联到屏幕句柄,以便能做图
        FullscreenCanvas.MoveTo(mouse.CursorPos.X,0);
        FullscreenCanvas.LineTo(mouse.CursorPos.x,768);
        FullscreenCanvas.MoveTo(0,Mouse.CursorPos.Y);
        FullscreenCanvas.LineTo(1024,Mouse.CursorPos.y);
    end;
      

  16.   

    问题已经解决!结贴。感谢各位,尤其是mwy654321的启发特别重要!
      

  17.   

    获得结果的程序如下:program TestGraphic;{$APPTYPE CONSOLE}Uses
      Windows,Graphics;
    Var
      DC: HDC;
      ScreenCanvas : tcanvas;
    Begin
      DC:=GetDC(0);                   //取得屏幕的DC,参数0指的是屏幕
      ScreenCanvas := TCanvas.Create; //创建一个CANVAS对象
      ScreenCanvas.Handle := DC;      //将画布关联到屏幕句柄,以便能做图
      ScreenCanvas.Pen.Color := Clred;
      ScreenCanvas.MoveTo( 0, 0 );       
      ScreenCanvas.LineTo( 1023, 767 );  
      Readln;
    End.把被uses的unit减少成为2个!这应该差不多了。(这是画线,画点自然也会行的)
      

  18.   

    我最后认为,控制台画图非常重要,介绍计算机图形学,如果在Windows下,就要从这里开始。