有谁能把edit连同里面的内容保存成bmp图像吗?有时edit很小,字符却很长,需要按照字符的长短保存,要求图像完整,谁做过类似的东西,帮帮忙吧

解决方案 »

  1.   

    汗,没做过.          不过想到怎么做的.在EDIT这块按保存时,在程序中新建一个BMP文件,长和宽,按你录入的字符的字体来(经过调试得到一个字的长宽,算到EDIT有几个字符得到整个BMP的长宽).
    做完BMP长宽后,就在BMP的画布上,按EDIT的字体和字写入.然后保存到一个BMP文件.OK了...呵呵.
      

  2.   

    不给,代码,可能你心里会说,不地道.直接默写,有错别怪我.
    头中包含这二个文件.
    #include <graphics.hpp>                                                                     
    =========================================================
     AnsiString str;
     Graphics::TBitmap *BMP = new Graphics::TBitmap;
     //==============
     str=Edit1->Text.Trim();    //假设一个字长16,宽16
     //==============
     BMP->Width=(16*str.Length())+30;
     BMP->Height=20;
     BMP->Canvas->Font->Name=Edit1->Font->Name;     //把两者的字体统一下,
     BMP->Canvas->Font->Color=clBlack;              //
     BMP->Canvas->Font->Size=Edit1->Font->Size;     //
     BMP->Canvas->TextOutA(10,2,str);
     BMP->SaveFromFile("c:\aaa.bmp");               //输出BMP   最好还是用JPEG呵呵,这个小.BMP生成太大了.这里就不写了.
     delete BMP;                                    //#include <Jpeg.hpp>      //JPEG图片头文件 
     BMP=NULL;
      

  3.   

    汗.BCB用习惯了.在DELPHI块.
    包含一个Jpeg头文件.在DELPHI中,可能是JPEG.PAS.=============================================
     Var
      JPEG:TJPEGImage;
      str:String;
     begin
       str:=Edit1.Text.Trim;    //假设一个字长16,宽16 
       //=========================
       JPEG:=TJPEGImage.Create;
       JPEG.Width=(16*str.Length)+30; 
       JPEG.Height=20; 
       JPEG.Canvas.Font.Name=Edit1.Font.Name;    //把两者的字体统一下, 
       JPEG.Canvas.Font.Color=clBlack;              // 
       JPEG.Canvas.Font.Size=Edit1.Font.Size;    // 
       JPEG.Canvas.TextOutA(10,2,str); 
       JPEG.SaveFromFile('c:\aaa.jpeg');    
       delete JPEG;
       JPEG:=nil;
     end;
      

  4.   

    delphi中没有这个属性呀,Edit1.Text.Trim
      

  5.   

    汗,可能写错,但意思的你应该明白啊.
    str:=Trim(Edit.Text)        //就是把录入的字符串二边都去空格.
                        
    代码可能会写错,但意思应该不会变.以前俺也是写DELPHI的.三年未写了.现在转BCB了.......唉,算转吗????算吧!
      

  6.   


    procedure TForm1.Button20Click(Sender: TObject);
    var
      b1: TBitmap;
    begin
      b1:= TBitmap.Create;
      b1.Width:= b1.Canvas.TextWidth(edit1.Text);
      b1.Height:= b1.Canvas.TextHeight(edit1.Text);
      b1.Canvas.TextOut(0,0,edit1.Text);
      b1.SaveToFile('d:\edit.bmp');
      b1.Free;
    end;
      

  7.   

    dinoalex,这位兄台,要是edit在字符格式无变化时,是可以的,但是如果字符格式一旦变化,如编程宋体,72号字,截出来的图就和原来不一样了
      

  8.   

    借用8楼的
    procedure TForm1.Button20Click(Sender: TObject);
    var
      b1: TBitmap;
    begin
      b1:= TBitmap.Create;
      b1.Width:= b1.Canvas.TextWidth(edit1.Text);
      b1.Height:= b1.Canvas.TextHeight(edit1.Text);
      b1.Canvas.font.Assign(edit1.font);
      b1.Canvas.TextOut(0,0,edit1.Text);
      b1.SaveToFile('d:\edit.bmp');
      b1.Free;
    end;
      

  9.   

    procedure TForm1.Button20Click(Sender: TObject);
    var
      b1: TBitmap;
    begin
      b1:= TBitmap.Create;
      b1.Canvas.font.Assign(edit1.font);
      b1.Width:= b1.Canvas.TextWidth(edit1.Text);
      b1.Height:= b1.Canvas.TextHeight(edit1.Text);
      b1.Canvas.TextOut(0,0,edit1.Text);
      b1.SaveToFile('d:\edit.bmp');
      b1.Free;
    end;
      

  10.   

    这里的关键是计算文本长度
    SmallHand 的方法在英文字体时可以,甚至超过Edit框长度的文本的也截下来,但在中文字体下长度计算偏短
      

  11.   

    强,学习了。
    还有呢,问下,怎么要在Edit里面输入法文呢?我输不进去。[size={1}]{2}Français être [/size] 
      

  12.   

    b1.Canvas.Font.Assign(edit1.Font); 对,就是这样
      

  13.   


    procedure TForm1.Button20Click(Sender: TObject);
    var
      b1: TBitmap;
    begin
      b1:= TBitmap.Create;
      b1.Canvas.Font.Assign(edit1.Font);           // <-- 要放在Set Rect 之前
      b1.Width:= b1.Canvas.TextWidth(edit1.Text);
      b1.Height:= b1.Canvas.TextHeight(edit1.Text);
      b1.Canvas.TextOut(0,0,edit1.Text);
      b1.SaveToFile('d:\edit.bmp');
      b1.Free;
    end;