delphi xe 二维码

时间: 2023-07-11 22:02:03 浏览: 45
### 回答1: Delphi XE是一种用于开发Windows、macOS和iOS平台应用程序的集成开发环境(IDE)。在Delphi XE中,可以使用不同的库和组件来实现二维码的生成和解码功能。 要实现二维码生成功能,可以使用第三方库,例如ZXing(Zebra Crossing)或DelphiZXing。这些库可以在Delphi XE中导入并使用。使用这些库,可以通过调用相应的函数来生成包含特定信息的二维码。将生成的二维码显示在用户界面上或将其保存为图像文件。 要实现二维码解码功能,可以使用相同的第三方库或其他支持二维码解码的库。这些库提供了函数来读取图像文件或从摄像头捕获的图像,并解码其中的二维码。解码完成后,可以获取二维码中包含的信息,并在应用程序中进行处理或展示。 Delphi XE提供了强大的开发工具和功能,使开发者能够轻松实现二维码的生成和解码。使用这些功能,开发者可以为应用程序添加二维码功能,用于扫描、分享和处理二维码信息。无论是用于商业用途还是个人用途,二维码在现代社会中具有广泛的应用,并且在移动应用和电子商务等领域中被广泛利用。 总之,Delphi XE可以通过导入第三方库和组件来实现二维码的生成和解码功能。这使得开发者能够为应用程序添加各种有关二维码的功能,并满足不同用户的需求。 ### 回答2: Delphi XE是一种强大的集成开发环境(IDE),用于编写Windows应用程序和跨平台应用程序。它支持多种编程语言,包括Object Pascal和Delphi。 针对二维码的开发,Delphi XE提供了多种方式来生成和解码二维码。首先,可以使用内置的QR码组件来快速生成二维码。Delphi XE提供了一个名为TQRCode的QR码控件,通过设置不同的属性,如内容、尺寸、颜色等,可以定制生成的二维码。 其次,通过调用第三方库,例如ZXing(Zebra Crossing)库,也可以在Delphi XE中实现生成和解析二维码的功能。ZXing是一个开源的二维码处理库,它支持多种编程语言,包括Delphi。可以通过下载ZXing的Delphi版本,然后在Delphi XE中导入并使用该库来实现二维码的生成和解析。 通过上述方法,我们可以利用Delphi XE来生成包含各种信息的二维码,例如URL、文本、邮件地址、联系人信息等。此外,Delphi XE还提供了其他一些功能,例如调整二维码的尺寸、定制二维码的样式、添加Logo等。 总结来说,Delphi XE提供了方便快捷的方式来实现二维码的生成和解析。开发人员可以选择使用内置的QR码组件或第三方库来完成相应的功能。无论是生成简单的纯文本二维码还是包含复杂信息的二维码,Delphi XE都能满足开发需求。 ### 回答3: Delphi XE是一种集成开发环境(IDE),用于开发具有对用户界面的需求的Windows应用程序。它包含了许多强大的工具和功能,可以帮助开发人员简化和加速应用程序的开发过程。 二维码是一种特殊的条形码,它可以容纳更多的信息,并且可以在较小的空间内显示更多的数据。在Delphi XE中,我们可以通过使用特定的库或组件来生成和处理二维码。 Delphi XE自身并不提供原生的二维码生成和处理功能,但我们可以使用第三方库或组件来实现这些功能。例如,ZXing是一个流行的开源库,可以用于在Delphi XE中生成和扫描二维码。 要在Delphi XE中使用ZXing库,我们需要先下载并安装该库。然后,我们可以使用Delphi的界面设计器来创建一个适当的用户界面,其中包含一个用于显示二维码的图像控件和一个按钮用于生成二维码。 当用户点击生成按钮时,我们可以调用ZXing库中的函数来生成二维码,并将其显示在图像控件中。生成的二维码可以包含特定的文本、URL或其他信息,我们可以根据需求进行定制。 同样,我们也可以使用ZXing库来解码已有的二维码。当用户将二维码放置在摄像头前时,我们可以调用库中的函数来扫描和解码二维码中的数据。 总之,虽然Delphi XE本身没有内置的二维码生成和处理功能,但我们可以通过使用第三方库或组件,如ZXing库,来实现这些功能。这种方法可以帮助我们在Delphi XE中轻松地生成和处理二维码,并将其应用于我们的Windows应用程序中。

相关推荐

Delphi XE是一种流行的集成开发环境(IDE),用于开发Windows应用程序。它使用Object Pascal编程语言,可以轻松地创建各种功能强大的应用程序。要在Delphi XE中生成二维码,可以使用第三方库或组件来实现。 有几个库和组件可以在Delphi XE中生成二维码。其中一个流行的库是ZXing(Zebra Crossing),它是一个开源的条形码和二维码生成库。ZXing支持多种编程语言,包括Delphi。 要在Delphi XE中使用ZXing生成二维码,首先需要从ZXing的官方网站下载和安装ZXing库。然后,将库文件导入到Delphi XE项目中。接下来,可以使用ZXing提供的函数和方法来生成二维码。您可以指定要编码的数据,例如文本,URL或其他信息,然后将其传递给生成二维码的函数。函数将返回生成的二维码图像。 另一个用于生成二维码的选择是使用第三方组件。有一些商业和免费的组件可用于Delphi XE,它们提供了直观的界面和功能来生成二维码。根据您的需求和预算,您可以选择适合您的组件。 无论您选择使用ZXing库还是第三方组件,您都可以根据需要自定义二维码的外观和功能。您可以设置二维码的大小,颜色,错误纠正级别等。并且可以将生成的二维码保存为图像文件或将其显示在应用程序的界面上。 总之,使用Delphi XE可以轻松地生成二维码。无论是使用ZXing库还是第三方组件,您可以根据自己的需求来选择合适的方法。这使得在Delphi XE中开发具有二维码功能的应用程序变得简单和便捷。
在 Delphi XE 中生成二维码可以使用第三方库来实现。一个常用的库是ZXing(Zebra Crossing),它是一个开源的条码和二维码处理库。以下是使用ZXing库在Delphi XE中生成二维码的步骤: 1. 首先,你需要下载并安装ZXing库。你可以在ZXing的官方网站(https://github.com/zxing/zxing)上找到最新版本的库。 2. 在Delphi XE中创建一个新的项目。 3. 将ZXing库的源代码添加到你的项目中。你可以将源代码复制到你的项目文件夹中,或者将其添加为一个独立的包(如果你喜欢)。 4. 在你的代码中引入ZXing库的单元。例如,你可以在程序的uses部分添加"ZXing.QrCode"。 5. 创建一个TBarcodeFormat类型的变量来指定要生成的条码类型。在这种情况下,你可以设置它为bfQR_CODE,因为你想生成二维码。 6. 创建一个TQRCodeWriter对象,并使用TQRCodeWriter的Encode方法来生成二维码图像。将数据作为字符串传递给Encode方法。 7. 将生成的二维码图像保存到文件或显示在窗体上。 下面是一个示例代码: delphi uses ZXing.QrCode, Vcl.Graphics; procedure GenerateQRCode(const Data: string; const FileName: string); var QRCode: TBitmap; QRCodeWriter: TQRCodeWriter; BarcodeFormat: TBarcodeFormat; begin QRCode := TBitmap.Create; try QRCodeWriter := TQRCodeWriter.Create; try BarcodeFormat := TBarcodeFormat.bfQR_CODE; QRCode := QRCodeWriter.Encode(Data, BarcodeFormat); QRCode.SaveToFile(FileName); // 保存到文件 // 或者显示在窗体上 // Form1.Image1.Picture.Assign(QRCode); finally QRCodeWriter.Free; end; finally QRCode.Free; end; end; // 使用示例 GenerateQRCode('Hello, Delphi!', 'qrcode.png'); 这是一个简单的示例,它将生成一个包含"Hello, Delphi!"文本的二维码,并将其保存为"qrcode.png"文件。你可以根据自己的需求修改代码。记得确保ZXing库正确安装并在项目中正确引用。
### 回答1: Delphi XE7是一种用于开发桌面和移动应用程序的集成开发环境。要在Delphi XE7中显示二维码,可以使用一些第三方库。 1. 首先,您需要下载并安装一个支持生成和显示二维码的库。常用的库包括ZXing(扫描二维码的开放源码库)和DelphiZXing(Delphi的ZXing库)。您可以在GitHub上找到这些库的源代码并下载安装。 2. 安装好库后,您需要在Delphi项目中引用库文件。在Delphi的“项目”菜单中,选择“选项”并进入“Delphi编译器”选项卡,然后点击“库”按钮。在库路径列表中添加您安装的库的路径,并点击“确定”。 3. 在窗体上添加一个TImage组件,这将用于显示二维码图像。 4. 在您的代码中,使用以下代码生成和显示二维码: - 首先,引入库的单元,例如ZXing.QRCode或DelphiZXing.QRCode。 - 创建一个QRCode生成器的实例,例如ZXing.QRCode.QRCodeWriter或DelphiZXing.QRCode.TQRCodeGen。 - 调用生成器的Encode()方法,将要生成的文本作为参数传递。 - 获取生成的二维码图像(通常是一个TBitmap对象),并将其赋值给TImage的Picture属性。 - 在TImage上调用Repaint()方法,以便刷新并显示二维码。 5. 运行您的应用程序,您应该能够看到一个包含所生成二维码的图像。 以上是一个基本的步骤来显示二维码。根据您所选择的库和需求,可能还有其他选项可用于定制生成的二维码的外观和效果。请查阅相关库的文档以获取更多信息和示例。 ### 回答2: 在Delphi XE7中显示二维码有多种方式。一种常见的方式是使用第三方库,比如ZXing库。这个库可以在Delphi项目中使用,用于生成和显示二维码。 首先,需要从官方网站上下载ZXing库的Delphi版本。然后,将下载的库文件添加到Delphi项目中。 接下来,在需要显示二维码的窗体中添加一个TImage组件。然后,在需要生成二维码的事件中,可以使用以下代码生成并显示二维码图片: delphi uses ZXing.Common, ZXing.QrCode, ZXing.QrCode.Internal, ZXing.Rendering; procedure TForm1.Button1Click(Sender: TObject); var encoder: TQRCodeEncodingOptions; writer: TBarcodeWriterPixelRenderer; format: TBarcodeFormat; barcode: TBaseLuminanceSource; matrix: TBitMatrix; begin // 设置二维码编码选项 encoder := TQRCodeEncodingOptions.Create; encoder.CharacterSet := 'UTF-8'; // 创建二维码写入器并指定渲染器 writer := TBarcodeWriterPixelRenderer.Create(ZXing.QrCode.Internal.TQRCodeWriter.Create, TBitmapRenderer.Create); // 设置二维码格式 format := TBarcodeFormat.QR_CODE; // 创建二维码数据源 barcode := TBitmapLuminanceSource.Create(Image1.Picture.Bitmap); // 生成二维码矩阵 matrix := writer.Encode(barcode, format, Image1.Width, Image1.Height, encoder); // 在TImage组件中显示二维码 Image1.Picture.Assign(matrix.ToBitmap); // 释放资源 matrix.Free; barcode.Free; writer.Free; encoder.Free; end; 以上代码中,我们首先创建了一个TQRCodeEncodingOptions对象,并指定了字符集。然后,创建了一个TBarcodeWriterPixelRenderer对象,用于生成和渲染二维码。接下来,指定了二维码的格式为QR_CODE。然后,创建了一个TBitmapLuminanceSource对象,用于生成二维码数据源。最后,调用TBitmapLuminanceRenderer的Encode方法生成二维码矩阵,并将其显示在TImage组件中。 这样,通过以上步骤,我们就可以在Delphi XE7中显示二维码了。 ### 回答3: 在Delphi XE7中显示二维码可以使用第三方库来实现,例如ZXing库。 首先,你需要下载并安装ZXing库。然后,在Delphi XE7中创建一个新的项目。 将ZXing库添加到你的项目中。右键点击“Project”后选择“Add” -> “Existing File”。然后选择ZXing库的文件并添加到你的项目中。 在需要显示二维码的窗体中,你可以添加一个TImage控件。首先,在窗体中双击TImage控件,它将自动为你生成一个相关的事件处理程序。 在TImage的事件处理程序中,你可以使用ZXing库来生成和显示二维码。以下是一个示例代码: procedure TForm1.Button1Click(Sender: TObject); var Encoded: TQRCode; begin //生成二维码 Encoded := TQRCode.Encode('Hello, World!', TQRCodeVersion.qrvAuto); //将二维码显示在TImage控件中 Image1.Picture.Bitmap.LoadFromStream(Encoded); //释放内存 Encoded.Free; end; 在上述示例代码中,我们首先使用TQRCode.Encode函数生成一个二维码,将要编码的数据作为第一个参数传入。第二个参数是二维码的版本,我们使用TQRCodeVersion.qrvAuto来使用自动选择版本。 然后,我们使用Image1.Picture.Bitmap.LoadFromStream方法将生成的二维码显示在TImage控件中。 最后,我们释放生成的二维码对象,以释放内存。 这样,当你单击按钮时,它将生成并显示一个包含"Hello, World!"的二维码。你可以根据需要修改代码以生成不同的数据和样式的二维码。
Delphi是一种编程语言和集成开发环境(IDE),用于开发Windows应用程序。Delphi XE是Embarcadero Technologies开发的一个版本,它基于Pascal编程语言,并且提供了丰富的工具和库,用于快速构建可视化的Windows应用程序。 SVG,即可缩放矢量图形(Scalable Vector Graphics),是一种基于XML的标记语言,用于描述二维矢量图形。与传统的栅格图像(像素图像)不同,SVG图形可以无损地缩放和放大,而不会失去清晰度。它可以用于创建图标、图表、动画等。 在Delphi XE中,可以使用一些库和组件来处理和显示SVG图形。例如,可以使用TImage组件来加载和显示SVG图像,通过设置其Picture属性为一个SVG文件,即可在窗体上显示SVG图形。Delphi XE还提供了一些功能强大的图形库,如Graphics32、ImageKit等,它们也具有处理和显示SVG图像的能力。 使用Delphi XE处理SVG图形的好处是可以轻松地将SVG图形集成到应用程序中,并根据需要进行自定义和交互。开发人员可以使用Delphi XE的丰富功能和易于使用的界面设计工具来创建各种图形效果,并通过代码来控制和操作SVG图形的各个元素。 总结而言,Delphi XE是一个强大的开发工具,可以与SVG图形一起使用,为开发人员提供了在Windows应用程序中显示和处理SVG图形的能力。无论是创建图标、图表还是动画,都可以通过Delphi XE轻松实现,并根据需要进行定制和交互。
Delphi是一种面向对象的编程语言,XE10.4是Delphi的一个版本。Delphi XE10.4是Embarcadero Technologies公司于2020年推出的最新版本。它是一个集成开发环境(IDE),用于开发跨平台的应用程序。 Delphi是一种基于Pascal语言的编程语言,结合了面向对象的概念和传统的过程性编程。它的语法清晰简洁,易于学习和使用。Delphi XE10.4提供了许多新的特性和改进,帮助开发者更加高效地创建应用程序。 Delphi XE10.4支持多平台开发,可以用于开发Windows、macOS、iOS和Android等多种操作系统的应用程序。开发者可以使用同一套代码,在不同的平台上构建出具有原生体验的应用程序。 Delphi XE10.4还提供了许多强大的组件和工具,帮助开发者加快开发速度,并提供更好的用户体验。其中包括用于界面设计的视觉组件、用于数据访问的数据库组件、用于网络通信的网络组件等等。开发者可以通过拖放的方式快速构建用户界面,通过组件的事件触发逻辑操作。 Delphi XE10.4还提供了一套完整的调试工具,帮助开发者定位并解决应用程序中的错误。开发者可以逐步调试代码,查看变量的值和程序的执行过程,从而快速排除问题。 总之,Delphi XE10.4是一种功能强大、易于学习和使用的开发工具,适用于多平台开发,帮助开发者创建高质量的应用程序。无论是个人开发者还是企业开发团队,都可以通过Delphi XE10.4来实现他们的软件开发需求。
### 回答1: Delphi XE11.2是一种集成开发环境(IDE)和编程语言,用于开发Windows、MacOS和移动设备应用程序。它是Embarcadero公司开发的一种工具,该公司专注于工具和技术,帮助开发人员和企业加快应用程序开发和创新速度。 Delphi XE11.2为开发人员提供了一个直观的用户界面,用于在Windows和macOS两个操作系统上构建和运行应用程序。开发人员可以使用它构建高效快速的应用程序,并具有代码编辑器、调试器、设计器和其他开发工具。使用Delphi XE11.2的开发人员可以使用多种编程语言,如Pascal、C++和C#等。 Delphi XE11.2还支持开发流行的移动设备平台,如iOS和Android,为移动开发提供了改善生产力、可重用性和可维护性的工具。该工具集还包括多种库、组件和控件,可帮助开发人员构建跨平台应用程序。 总之,Delphi XE11.2是一种功能强大的工具,为开发人员提供了构建Windows、macOS和移动设备应用程序所需的所有工具。它的跨平台支持和可扩展性使得开发人员可以更加轻松地构建和维护高质量的应用程序,从而加速创新速度并提高生产力。 ### 回答2: Delphi XE11.2是一款基于Object Pascal语言开发的集成开发环境(IDE),由Embarcadero公司于2013年发布,它是Delphi系列中的一员。Delphi是一种高级编程语言,可以用于开发Windows应用程序、数据库应用程序、网络应用程序等。Delphi XE11.2包含了许多新功能和改进,增加了对Windows 8的支持,使用起来更加流畅、稳定。 Delphi XE11.2的开发工具集成了众多工具,包括视觉设计器、编辑器、调试器、代码分析器、编译器,以及用于简化代码编写的代码库。它还提供了一些方便的功能,如自动完成、语法高亮、代码重构等。 Delphi XE11.2具有很强的跨平台能力,可以编写Windows、Mac OS X和移动设备上的应用程序。它还提供了对多种数据库的支持,如MySQL、Oracle、Firebird等。此外,它还支持Web服务开发,在Web应用程序开发中起到了很大的作用。 总之,Delphi XE11.2是一款功能强大的开发工具,适用于各种类型的应用程序开发。它具有良好的可扩展性和易用性,让开发过程更加高效,是编写Windows、Mac OS X和移动应用程序的理想选择。 ### 回答3: Delphi XE11.2是一个高级的集成开发环境,主要用于企业级应用程序开发。它支持多种编程语言,包括Pascal和C++,还具有强大的数据库开发和UI设计工具。Delphi XE11.2还支持大型团队开发,提供了一些非常实用的版本控制和协作工具,能够有效地提高开发效率和质量。它的应用范围广泛,从桌面应用程序到Web应用程序,再到移动应用程序,都可以使用Delphi XE11.2进行开发。与其他IDE相比,Delphi XE11.2在速度和易用性方面都有很大的优势,它还可以轻松地与其他工具和技术集成,例如.NET和Java。因此,Delphi XE11.2是一个非常完整的开发工具,可以帮助开发人员更快、更轻松地构建出高质量、富功能的应用程序。
Delphi XE是一种集成开发环境(IDE),用于开发Windows操作系统的应用程序。ODAC(Oracle Data Access Components)是用于连接、访问和操作Oracle数据库的组件集。在Delphi XE中安装ODAC可以使开发人员能够轻松地在其应用程序中使用Oracle数据库。 要在Delphi XE中安装ODAC,可以按照以下步骤进行操作: 1. 首先,确保你已经从Oracle官方网站上下载了适用于Delphi XE的ODAC安装程序。 2. 打开Delphi XE的安装目录,并找到“bin”文件夹。例如,通常是“C:\Program Files\Embarcadero\RAD Studio\bin”。 3. 将下载的ODAC安装程序复制到上述“bin”文件夹中。 4. 双击ODAC安装程序并按照提示进行安装。在安装过程中,你可以选择要安装的组件和特性,这取决于你的需求。确保选择适用于Delphi XE的版本。 5. 安装完成后,打开Delphi XE。 6. 在Delphi XE的“工具”菜单中,选择“选项”。 7. 在“选项”对话框中,选择“环境选项”>“库”选项卡。 8. 点击“浏览”按钮,并找到你安装ODAC的文件夹。 9. 选择该文件夹,并点击“确定”。 10. 确保ODAC的路径正确显示在“库路径”列表中。 11. 点击“确定”关闭“选项”对话框。 现在,你已经成功地在Delphi XE中安装了ODAC。你可以开始使用ODAC组件来连接、访问和操作Oracle数据库。在你的应用程序中添加ODAC组件,并按照相关文档和示例来使用它们。

最新推荐

Delphi XE10自带皮肤的使用方法

1、用Delhi开发的应用程序,窗口界面实在是太土气了。 2、尝试下载安装第三方的皮肤,但会使用APP尺寸暴增。 ...4、本文详细介绍了Delphi XE10自带皮肤的使用方法,图文并茂,操作简单,一看就会。

DelphiXE10安装方法.docx

在安装depix时很多人缺相应的经验,在安装过程中不是少这个又少那个,碰到这样那样的问题,不能顺利安装。该文档详细记录了delphiXE10的安装过程,安装完后能正常启动使用(你懂得)

Delphi7升级到Delphi 2010、Delphi XE、Delphi XE2总结

Delphi7升级到Delphi 2010、Delphi XE、Delphi XE2总结 !最后有个项目要移植到64位,所以这个很有用。在2010中PChar已经不再表示PAnsiChar而是表示PWideChar,如果依然这样写,运行时很可能会得到一个内存访问错误。...

XE10 Android Zxing 实现竖屏扫二维码.docx

仿微信操作文档,详细介绍了在deLphixe 环境下,调用Zxing 显示横屏转换成竖屏扫描的详细操作说明,结合网上一些例子和台北一些前辈指点后进行整理,希望对你有所帮助。

Delphi XE5 for Android

Delphi XE5 for Android Delphi XE5 出来了,支持Android的开发,试用了一下,有几个问题: 1、只支持ARM7的设备,不支持Inter设备。手上刚好有一个华硕K004,很遗憾用不上,只能用手机试了。 2、要支持联机调试必须...

超声波雷达驱动(Elmos524.03&Elmos524.09)

超声波雷达驱动(Elmos524.03&Elmos524.09)

ROSE: 亚马逊产品搜索的强大缓存

89→ROSE:用于亚马逊产品搜索的强大缓存Chen Luo,Vihan Lakshman,Anshumali Shrivastava,Tianyu Cao,Sreyashi Nag,Rahul Goutam,Hanqing Lu,Yiwei Song,Bing Yin亚马逊搜索美国加利福尼亚州帕洛阿尔托摘要像Amazon Search这样的产品搜索引擎通常使用缓存来改善客户用户体验;缓存可以改善系统的延迟和搜索质量。但是,随着搜索流量的增加,高速缓存不断增长的大小可能会降低整体系统性能。此外,在现实世界的产品搜索查询中广泛存在的拼写错误、拼写错误和冗余会导致不必要的缓存未命中,从而降低缓存 在本文中,我们介绍了ROSE,一个RO布S t缓存E,一个系统,是宽容的拼写错误和错别字,同时保留传统的缓存查找成本。ROSE的核心组件是一个随机的客户查询ROSE查询重写大多数交通很少流量30X倍玫瑰深度学习模型客户查询ROSE缩短响应时间散列模式,使ROSE能够索引和检

java中mysql的update

Java中MySQL的update可以通过JDBC实现。具体步骤如下: 1. 导入JDBC驱动包,连接MySQL数据库。 2. 创建Statement对象。 3. 编写SQL语句,使用update关键字更新表中的数据。 4. 执行SQL语句,更新数据。 5. 关闭Statement对象和数据库连接。 以下是一个Java程序示例,用于更新MySQL表中的数据: ```java import java.sql.*; public class UpdateExample { public static void main(String[] args) { String

JavaFX教程-UI控件

JavaFX教程——UI控件包括:标签、按钮、复选框、选择框、文本字段、密码字段、选择器等

社交网络中的信息完整性保护

141社交网络中的信息完整性保护摘要路易斯·加西亚-普埃约Facebook美国门洛帕克lgp@fb.com贝尔纳多·桑塔纳·施瓦茨Facebook美国门洛帕克bsantana@fb.com萨曼莎·格思里Facebook美国门洛帕克samguthrie@fb.com徐宝轩Facebook美国门洛帕克baoxuanxu@fb.com信息渠道。这些网站促进了分发,Facebook和Twitter等社交媒体平台在过去十年中受益于大规模采用,反过来又助长了传播有害内容的可能性,包括虚假和误导性信息。这些内容中的一些通过用户操作(例如共享)获得大规模分发,以至于内容移除或分发减少并不总是阻止其病毒式传播。同时,社交媒体平台实施解决方案以保持其完整性的努力通常是不透明的,导致用户不知道网站上发生的任何完整性干预。在本文中,我们提出了在Facebook News Feed中的内容共享操作中添加现在可见的摩擦机制的基本原理,其设计和实现挑战,以�