我希望生成并播放具有随时间变化的特定频率和幅度的连续声音.我不希望声音之间有延迟.如何使用Delphi或C++ Builder完成此操作?
我想从Thread创建表单的新实例(并显示它们).但似乎它冻结了我的应用程序和我的线程(我的线程变成了非同步线程,它冻结了我的应用程序).
像这样(但它不是我想要的)
procedure a.Execute;
var frForm:TForm;
B:TCriticalSection;
begin
b:=TCriticalSection.Create;
while 1=1 do
begin
b.Enter;
frForm:=TForm.Create(Application);
frForm.Show;
b.Leave;
sleep(500); //this sleep with sleep my entire application and not only the thread.
//sleep(1000);
end;
end;
Run Code Online (Sandbox Code Playgroud)
我不想用Classes.TThread.Synchronize方法
如果一个线程异步读取Delphi中VCL控件的信息,那么线程是否安全?
例如.
procedure TMyThread.Execute;
var bOK:Boolean;
iOK:Integer;
begin
while not terminated do
begin
bOk:=MyForm.cbCheckBox.Checked;
iOK:=MyForm.Left;
sleep(20);
end;
end;
Run Code Online (Sandbox Code Playgroud)
如果它不是线程安全的,我应该如何在复选框更改其属性时捕获事件.
我期待在CodeGear Delphi 2010中绘制不透明椭圆.
我试图绘制另一个位图,我设置了位图透明色(用于背景)调用椭圆方法.
在我的图像中,我使用不透明度参数(来自重载)绘制位图.但它不起作用.
我想要这样的东西http://www.java2s.com/Tutorial/VBImages/WPF-UseOpacityMaskAndRadialGradientBrush.PNG
有人知道一种工作方法吗?
我使用Borland C++ Builder.
我有问题
#include <Classes.hpp>
class TMyObject : public TObject
{
__fastcall TMyObject();
__fastcall ~TMyObject();//I would like to inherite my destructor from TObject
};
__fastcall TMyObject::TMyObject() : TObject()//it will inherited my constructor from TObject
{
}
Run Code Online (Sandbox Code Playgroud)
对于那个将继承的新析构函数~TObject?
__fastcall TMyObject::~TMyObject?????????????
Run Code Online (Sandbox Code Playgroud) 这是同步问题.我为我的问题做了简化,所以我有一个VCL计时器和几个线程.线程试图用两个位图写东西,而计时器正试图将位图绘制成图像(TImage).以下是对我的代码的修改,以便更容易理解(此粘贴代码非常模糊).
//------------------------------------------------------------------------------
Procedure TMyForm.Add(iX,iY,iNr:integer);
begin
EnterCriticalSection(csCriticalSection);
bmRed.Canvas.Lock;
bmBlue.Canvas.Lock;
//.... drawing etc...
bmRed.Canvas.TextOut(iX,iY,IntToStr(iNr));
bmBlue.Canvas.TextOut(iX,iY,IntToSTr(iNr));
bmRed.Canvas.Unlock;
bmBlue.Canvas.Unlock;
LeaveCriticalSection(csCriticalSection);
end;
//------------------------------------------------------------------------------
procedure TMyForm.tmTimer(...);
begin
EnterCriticalSection(csCriticalSection);
bmRed.Canvas.Lock;
bmBlue.Canvas.Lock;
//Drawing on bmRed and bmBlue
imBlue.Canvas.Draw(bmBlue);
imRed.Canvas.Draw(bmBlue);
bmRed.Canvas.Unlock;
bmBlue.Canvas.Unlock;
LeaveCriticalSection(csCriticalSection);
end;
//------------------------------------------------------------------------------
Procedure TMyThread.Execute();
begin
Randomize;
while not terminated do
begin
MyFormInstance.Add(Random(100),Random(100),Random(100));
Sleep(20);
end;
end;
initialization
InitializeCriticalSection(csCriticalSection);
finalization
DeleteCriticalSection(csCriticalSection);
Run Code Online (Sandbox Code Playgroud)
通常线程在进入临界区时给出错误,或者在几秒钟后计时器将不再为我画任何东西.
delphi multithreading synchronization asynchronous delphi-xe2
我对Delphi中用于ListView的拖放系统很陌生.我在互联网上找到了一个简单的解决方案,可以在ListView中拖放项目.问题是代码只显示拖动第一列,我想显示并拖动整行.
您可以在下面的图片中查看我得到的以及我想要得到的内容.
procedure TForm1.ListView1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
DragItem, DropItem, CurrentItem, NextItem: TListItem;
begin
if Sender = Source then
with TListView(Sender) do
begin
DropItem := GetItemAt(X, Y);
CurrentItem := Selected;
while CurrentItem <> nil do
begin
NextItem := GetNextItem(CurrentItem, SdAll, [IsSelected]);
if DropItem = nil then DragItem := Items.Add
else
DragItem := Items.Insert(DropItem.Index);
DragItem.Assign(CurrentItem);
CurrentItem.Free;
CurrentItem := NextItem;
end;
end;
end;
procedure TForm1.ListView1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
Accept := …Run Code Online (Sandbox Code Playgroud) 我有个问题.我是Delphi 2010中运行时类型信息的新手.我需要将长度设置为动态数组到TValue中.你可以看到代码.
Type TMyArray = array of integer;
TMyClass = class
publihed
function Do:TMyArray;
end;
function TMyClass.Do:TMyArray;
begin
SetLength(Result,5);
for i:=0 to 4 Result[i]=3;
end;
.......
.......
......
y:TValue;
Param:array of TValue;
.........
y=Methods[i].Invoke(Obj,Param);//delphi give me a DynArray type kind, is working, Param works to any functions.
if Method[i].ReturnType.TypeKind = tkDynArray then//is working...
begin
I want to set length for y to 10000//i don't know how to write.
end;
Run Code Online (Sandbox Code Playgroud)
我不喜欢Generics Collections.
美好的一天,
TValue是Delphi-2010及更高版本的RTTI功能.
继我之前的问题之后,我曾尝试使用循环函数将TValue作为n维返回.矩阵(2D,3D,4D ...)
例如,此过程将显示n维矩阵(它将列出来自n维矩阵的所有元素作为TValue变量):
Procedure Show(X:TValue);
var i:integer;
begin
if x.IsArray then
begin
for i:=0 to x.GetArrayLength-1 do
show(x.GetArrayElement(i));
writeln;
end else
write(x.ToString,' ');
end;
Run Code Online (Sandbox Code Playgroud)
我不明白如何创建一个函数来从TValue创建一个n维矩阵.例如,我需要一个Function CreateDynArray(Dimensions:整数数组; Kind:TTypeKind):TValue; 并且该函数将返回一个TValue,这是一个动态数组,如何包含dimenssions例如:
返回= CreateDynArray([2,3],tkInteger); 将返回TValue作为tkDynArray,如果我将显示(返回)将列出
0 0 0
0 0 0
Run Code Online (Sandbox Code Playgroud)
没有终止.从TValue我尝试创建一个具有n维度的DynArray
Procedure CreateArray(var Value:TValue; NewDimmension:integer; NewValue2Kind:TTypeKind; NewValue2:TValue; IsLast:Boolean);
var i:integer;
NewValue:TValue;
len:Longint;
begin
If Value.IsArray then// we have components in this dimension
begin
for i:=0 to Value.GetArrayLength-1 do// list all
begin
NewValue:=Value.GetArrayElement[i];
CreateArray(newValue,NewDimension,NewValue2Kind,NewValue2,IsLast);
Value.SetArrayElement(i,NewValue);
end;
end;
end else …Run Code Online (Sandbox Code Playgroud) 如果许多异步线程都在全局TBitmap中绘制,会引发错误吗?我应该使用关键部分来创建代码吗?(从网上冲浪中,我发现TBitmap.Draw不是线程安全的)
另一个问题:如果许多同步线程都在全局TBitmap中绘制并且VCL计时器异步读取TBitmap中的内容,这会引起我错误吗?
谢谢!
delphi ×9
asynchronous ×3
c++builder ×2
delphi-2010 ×2
rtti ×2
arrays ×1
audio ×1
bitmap ×1
c++ ×1
delphi-xe2 ×1
destructor ×1
ellipse ×1
forms ×1
graphics ×1
listitem ×1
listview ×1
matrix ×1
opacity ×1
set ×1
transparency ×1
tvalue ×1
winapi ×1