我的应用程序从分形创建图像,我喜欢在分形周围"飞行"的感觉.我曾经保存了大约2000个位图文件并使用Premiere从它创建了一个AVI.尽管我成功创作了一部电影,但这种体验却令人沮丧.这太壮观了.当然我想从我的应用程序中创建一个视频.我实际上并不关心编解码器,压缩或其他什么的漂亮.我只想要一个可以在大多数系统上重放的视频.
在过去,我尝试过但从未成功过.我最近被一个问题触发了,但唉不能让FFMpeg运行.
更新
我决定略微调整这个问题并为此付出赏金.我看过几个解决方案,但最吸引人的(因为它很简单)在我看来是TAviWrite.我试过TAviWriter但没有成功.在程序TAviWriter.Write; 函数调用370行
AVIERR := AVISaveV(s,
// pchar(FileName),
nil, // File handler
nil, // Callback
nStreams, // Number of streams
Streams,
CompOptions); // Compress options for VideoStream
Run Code Online (Sandbox Code Playgroud)
不返回AVIERR_OK.
更新2
上述错误的原因是AVISaveV的错误声明,它应该被声明为AVIS指出的AVISaveVW.下面发布了用于创建BMP文件的AVI文件的正确代码.下面的原始代码是从efg下载的一个示例单元.
在Windows 7上使用Delphi XE.
unit AviWriter;
/////////////////////////////////////////////////////////////////////////////
// //
// AviWriter -- a component to create rudimentary AVI files //
// by Elliott Shevin, with large pieces of code //
// stolen from Anders Melander //
// version 1.0. Please send comments, suggestions, and advice …Run Code Online (Sandbox Code Playgroud) 对于我当前的应用程序,我使用一个非常简单的方案来注册新用户.当新用户注册时,将使用密钥发送电子邮件.为了检查这个密钥是否正确,计算了一种校验和(3-7-11数字检查),它被添加为密钥的最后2位数.没有检查密钥的任何进一步有效性.应用程序不检查密钥是否失效.
这是一个简单的方案,有人花时间通过反汇编代码破解它.我想为我的新应用程序使用另一种方案,但我不确定最好的方法是什么.
一些注册方案要求应用程序每次在网络服务器检查密钥是否仍然有效.我宁愿不去那么远,因为这需要在服务器端付出很多努力.
任何有关注册新用户的强大方式的建议或链接都是非常受欢迎的.
4I必须将字符串写入二进制MIDI文件.该标准要求人们知道字符串的长度(以字节为单位).因为我想为移动设备写作,所以我不能使用AnsiString,这是确保字符串是一个单字节字符串的好方法.这简化了事情.我测试了以下代码:
TByte = array of Byte;
function TForm3.convertSB (arg: string): TByte;
var
i: Int32;
begin
Label1.Text := (SizeOf (Char));
for i := Low (arg) to High (arg) do
begin
label1.Text := label1.Text + ' ' + IntToStr (Ord (arg [i]));
end;
end; // convert SB //
convertSB ('MThd');
Run Code Online (Sandbox Code Playgroud)
它在Windows和Android中返回2 77 84 104 100(作为标签文本).这是否意味着Delphi默认将字符串视为UTF-8?这将大大简化一些事情,但我无法在帮助中找到它.将此转换为字节数组的最佳方法是什么?读取每个字符并测试它是1,2或4字节并在数组中分配此空间?要转换回字符:只读取字节数,直到遇到一个字节<128?
我有一个由a TFrame,a TPanel和a组成的对象TImage.将位图分配给TImage包含钢琴卷的位图.此框架对象放在a上TImage,包含包含网格的图像.有关示例,请参见图像.

问题:是否可以使框架部分透明,以便包含网格(在主窗体上)的背景图像模糊可见?理想情况下,用户可以设置透明度.位图是32位深,但尝试alpha通道没有帮助.该小组不是绝对必要的.它用于快速在对象周围有一个边框.我可以在图像上画出来.
更新1添加了一个小代码示例.主单元绘制垂直线条的背景.第二个单元包含一个TFrame和一个绘制水平线的TImage.我想看到的是垂直线部分通过TFrame图像发光.
更新2我在原始问题中未指定的内容:TFrame是更大应用程序的一部分,并且独立运行.如果透明度问题可由TFrame本身处理,将会有所帮助.
///////////////// Main unit, on mouse click draw lines and plot TFrame
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls,
Unit2;
type
TForm1 = class(TForm)
Image1: TImage;
procedure Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var background: TBitmap;
f: TFrame2; …Run Code Online (Sandbox Code Playgroud) 我想使用通用TList的OnNotify事件.将过程分配给OnNotify会产生错误消息:
E2010 Incompatible types: 'System.Generics.Collections.TCollectionNotification' and 'System.Classes.TCollectionNotification'
Run Code Online (Sandbox Code Playgroud)
我正在声明一个类,并在其中使用通用TList如下:
TEditor_Table = class (TObject)
public
FEditors: TList<TGradient_Editor>; // List containing the editors
Run Code Online (Sandbox Code Playgroud)
这不是最好的方法,但我需要这个来进行测试.该列表在构造函数中实例化:
constructor TEditor_Table.Create (Owner: TFMXObject);
begin
inherited Create;
FEditors := TList<TGradient_Editor>.Create;
FOwner := Owner;
end; // Create //
Run Code Online (Sandbox Code Playgroud)
接下来在main表单中声明一个函数
procedure do_editor_change (Sender: TObject; const Item: TGradient_Editor; Action: TCollectionNotification);
Run Code Online (Sandbox Code Playgroud)
并且TColor_Editor类实例化如下:
FColor_Editor := TEditor_Table.Create (List_Gradients);
FColor_Editor.FEditors.OnNotify := do_editor_change;
^
error occurs here----------------------------------+
Run Code Online (Sandbox Code Playgroud)
我根本不理解这个消息,而且为什么编译器似乎混淆了两个单元:'System.Generics.Collections.TCollectionNotification'和'System.Classes.TCollectionNotification'.我究竟做错了什么?
我想为Delphi Android应用添加MIDI功能.MIDI可通过SoniVox库获得,可通过Android NDK访问.可以在此处找到此驱动程序的示例.驱动程序是用C语言编写的,使用NDK可以创建一个可以通过System.loadLibrary调用访问的本机语言库.
// MidiDriver - An Android Midi Driver.
// Copyright (C) 2013 Bill Farmer
// Bill Farmer william j farmer [at] yahoo [dot] co [dot] uk.
#include <jni.h>
// for EAS midi
#include "eas.h"
#include "eas_reverb.h"
// determines how many EAS buffers to fill a host buffer
#define NUM_BUFFERS 4
// EAS data
static EAS_DATA_HANDLE pEASData;
const S_EAS_LIB_CONFIG *pLibConfig;
static EAS_PCM *buffer;
static EAS_I32 bufferSize;
static EAS_HANDLE midiHandle;
// init EAS midi
jint
Java_org_drivers_midioutput_MidiDriver_init(JNIEnv *env,
jobject …Run Code Online (Sandbox Code Playgroud) 我试图通过隐藏一些元素给用户一个"干净简单"的界面.只有一个小箭头表示他可以扩展主菜单栏的某些部分.全部关闭后,它看起来像这样:

当你打开所有它看起来像这样:

每个箭头都是一个SpeedButton,位于面板的左侧.通过单击按钮,宽度在设计时(打开)的Speedbutton(已关闭)宽度和面板宽度之间切换.设计时面板的宽度存储为常量.show_hide_controls程序处理这个:
procedure TCompose_Main.show_hide_controls (key: string; Button: TSpeedButton; Panel: TPanel; width: Int32);
begin
if GPA.iKey [key] = 1
then Panel.Width := width // show panel, set panel to design width
else Panel.Width := Button.Width; // hide panel, set with to button width
Button.Glyph.Assign (nil);
Images_Left_Right.GetBitmap (GPA.iKey [key], Button.Glyph);
end; // show_hide_controls //
Run Code Online (Sandbox Code Playgroud)
此例程调用如下:
show_hide_controls ('Show Play Controls', // index to panel to show/hide
Enlarge_Play, // Speedbutton requesting the enlargement/hide
Panel_Play, // Panel to show/hide
cPlayWidth); // Width of panel …Run Code Online (Sandbox Code Playgroud) 下一个代码:
function get_symbol (var s: String): String;
var c: Char;
p: Int32;
begin
// ... some more code ...
c := upcase (s [p]);
if IsDigit (c) then
Run Code Online (Sandbox Code Playgroud)
导致以下错误消息:
[dcc32 Warning] fmx_utilities_string.pas(188): W1000 Symbol 'IsDigit' is deprecated: 'Use TCharHelper'
我不理解这条消息,因为包含了System.Character,c被声明为Char,而TCharhelper被声明为Char的字符助手.我究竟做错了什么?
我有一个长度范围很大的字符串序列:从30到282420个字符。我想使用jdbc将每个字符串存储到postgres数据库中。
String query = "INSERT INTO " + tableName +
" (cbsID, ownerID, naam, soortRegio, jaar, centroidLat, centroidLon, borders) " +
" VALUES (?, ?, ?, ?, ?, ?, ?, ?)";
PreparedStatement ps = connection.prepareStatement(query);
for (Marker marker: gemeenteMarkers)
{
Area gemeente = (Area) marker.getProperty("area");
String sloc = "";
// ... do some computations
// Compute sloc, a string that may contain over 250.000 characters
ps.setInt (1, gemeente.getAreaId ());
ps.setInt (2, gemeente.getParentId ());
ps.setString (3, gemeente.getAreaName ());
ps.setString (4, "GM"); …Run Code Online (Sandbox Code Playgroud) 我希望在uses子句中有不同的单元列表,具体取决于FMX或VCL的编译.在下面的代码中,我尝试测试FireMonkeyVersion哪个在FMX项目中工作(label1.Text是'FMX').当我将$ IF语句移动到uses子句中时,我收到一条错误消息([dcc32 Error] fmx_text.pas(7): E2026 Constant expression expected).有没有办法获得所需的条件编译?
unit fmx_text;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Rtti, System.Classes,
System.Variants, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.Types;
{$IF FireMonkeyVersion >= 16}
{$DEFINE HAS_FMX}
{$ELSE}
{$DEFINE HAS_VCL}
{$IFEND}
type
TForm2 = class(TForm)
Label1: TLabel;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.fmx}
procedure TForm2.FormCreate(Sender: TObject);
begin
label1.Text := 'Undefined';
{$IFDEF HAS_FMX}
label1.Text := 'FMX'; …Run Code Online (Sandbox Code Playgroud) delphi ×9
delphi-xe5 ×3
bitmap ×2
delphi-xe ×2
android-ndk ×1
char ×1
delphi-xe2 ×1
firemonkey ×1
generics ×1
java ×1
jdbc ×1
panel ×1
postgresql ×1
string ×1
transparency ×1
vcl ×1
video ×1
windows-7 ×1