为什么在Delphi中位图的传输是逆序的?
单击按钮时,图像应从richedit1传输到richedit2,并按顺序显示,它们以相反的方式显示。如何修复它?下面是代码为什么在Delphi中位图的传输是逆序的?,delphi,Delphi,单击按钮时,图像应从richedit1传输到richedit2,并按顺序显示,它们以相反的方式显示。如何修复它?下面是代码 procedure TForm1.Button1Click(Sender: TObject); begin if OpenPictureDialog1.Execute then begin Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName); InsertBitmapToRE(RichEd
procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenPictureDialog1.Execute then
begin
Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
InsertBitmapToRE(RichEdit1.Handle, Image1.Picture.Bitmap.Handle);
end;
end;
Function MAP_LOGHIM_TO_PIX(Const Val: Integer; Const Log: Integer): Integer;
Const
HIMETRIC_PER_INCH=2540;
Begin
Result:=MulDiv(Val, Log, HIMETRIC_PER_INCH);
End;
Function MAP_LOGHIMPT_TO_PT(Const Val: TPoint; Const Handle: HWND = 0): TPoint;
Var
DC: HDC;
Begin
DC:=GetDC(Handle);
Result.X:=MAP_LOGHIM_TO_PIX(Val.X, GetDeviceCaps(DC, LOGPIXELSX));
Result.Y:=MAP_LOGHIM_TO_PIX(Val.Y, GetDeviceCaps(DC, LOGPIXELSY));
ReleaseDC(Handle, DC);
End;
procedure TForm1.Button2Click(Sender: TObject);
Var
IREO: IRichEditOle;
OleClientSite: IOleClientSite;
ReObject: TReObject;
I: Integer;
ViewObject2: IViewObject2;
Rc: TRect;
Path:String;
bmp:TBitmap;
Pt: TPoint;
begin
Path:='C:\temp\richedit\';
SendMessage(RichEdit1.Handle, EM_GETOLEINTERFACE, 0, Longint(@IREO));
IREO.GetClientSite(OleClientSite);
For I:=IREO.GetObjectCount-1 Downto 0 Do
Begin
ZeroMemory(@ReObject, SizeOf(ReObject));
ReObject.cbStruct:=SizeOf(ReObject);
If Succeeded(IREO.GetObject(I, ReObject, $00000001)) Then
If Succeeded(ReObject.poleobj.QueryInterface(IViewObject2, ViewObject2)) Then
Begin
ViewObject2.GetExtent(DVASPECT_CONTENT, -1, Nil, Pt);
Pt:=MAP_LOGHIMPT_TO_PT(Pt, RichEdit1.Handle);
bmp:=TBitmap.Create;
Bmp.Height := Pt.Y;
Bmp.Width := Pt.X;
SetRect(Rc, 0, 0, Bmp.Width, Bmp.Height);
OleDraw(ReObject.poleobj, DVASPECT_CONTENT, bmp.Canvas.Handle, Rc);
bmp.SaveToFile(Path+'Img'+IntToStr(I+1)+'.bmp');
InsertBitmapToRE(RichEdit2.Handle, bmp.Handle);
End
Else
ShowMessage('Error: Can''t get IViewObject2');
End;
end;
截图
在for循环中使用
向下到0
是有效的,但反向计数并不总是可取的。这种情况是因为您使用循环变量作为索引,并且需要特定的处理顺序
对于I:=0到IREO.GetObjectCount-1 Do
对于I:=IREO.GetObjectCount-1到0 Do
并在GetObject()
中使用I
将按保留顺序检索对象。@Brian感谢您的输入!请以“答案”的形式回答,因为这似乎可以解决问题。@Tigerjz32,我知道这是一个离题,但如果您能够更改问题的标题,请尽量改进相关代码的格式。从该字符串开始:bmp.SaveToFile(.我可以自己做,但SO的系统告诉我有很多代码,所以我无法编辑。谢谢。@Lex34,不幸的是,我对Delphi不太熟悉,无法编辑代码语法。我希望其他社区成员能够帮助我,如果他们更了解的话。我更改了标题,因为我理解这个问题,并想e它可供未来用户访问。另一方面,你应该在SO中使用内置的图像上载。读者不喜欢人们使用第三方网站进行类似的事情,尤其是使用你提供的URL。据我们所知,点击它可能会感染病毒。它可以工作,如果我需要与pi一起显示文本当我点击按钮时,ctures?屏幕截图显示图像已传输,但文本不在那里。我如何用图片传输文本?@Lex34:这是另一个问题,所以你应该作为新问题来问。@RudyVelthuis:我需要问一个新问题才能得到答案?他的问题与效率有什么关系?@Lex34:如果你想知道如何将文字与图片一起显示,你应该问一个新问题。实际上,当前的问题是关于图像的反转。