小编use*_*126的帖子

如何生成不同频率的连续音?

我希望生成并播放具有随时间变化的特定频率和幅度的连续声音.我不希望声音之间有延迟.如何使用Delphi或C++ Builder完成此操作?

delphi audio winapi c++builder

9
推荐指数
2
解决办法
3562
查看次数

在Delphi中打开表单

我想从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方法

forms delphi synchronization thread-safety

9
推荐指数
2
解决办法
1万
查看次数

我可以在非GUI线程中读取VCL控件的属性吗?

如果一个线程异步读取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)

如果它不是线程安全的,我应该如何在复选框更改其属性时捕获事件.

delphi asynchronous thread-safety

6
推荐指数
1
解决办法
284
查看次数

在Delphi 2010中绘制不透明度椭圆

我期待在CodeGear Delphi 2010中绘制不透明椭圆.

我试图绘制另一个位图,我设置了位图透明色(用于背景)调用椭圆方法.

在我的图像中,我使用不透明度参数(来自重载)绘制位图.但它不起作用.

我想要这样的东西http://www.java2s.com/Tutorial/VBImages/WPF-UseOpacityMaskAndRadialGradientBrush.PNG

有人知道一种工作方法吗?

delphi transparency ellipse opacity delphi-2010

5
推荐指数
1
解决办法
5182
查看次数

C++中的析构函数和继承?

我使用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)

c++ destructor c++builder

5
推荐指数
1
解决办法
6676
查看次数

使用Timer和其他线程之间的关键部分进行多线程Delphi同步

这是同步问题.我为我的问题做了简化,所以我有一个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

5
推荐指数
1
解决办法
1万
查看次数

Delphi ListView拖放整行

我对Delphi中用于ListView的拖放系统很陌生.我在互联网上找到了一个简单的解决方案,可以在ListView中拖放项目.问题是代码只显示拖动第一列,我想显示并拖动整行.

您可以在下面的图片中查看我得到的以及我想要得到的内容.

在Delphi中拖放

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 listview drag-and-drop listitem

5
推荐指数
1
解决办法
1939
查看次数

RTTI动态阵列TValue Delphi 2010

我有个问题.我是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.

arrays delphi set rtti

4
推荐指数
1
解决办法
3019
查看次数

RTTI Delphi创建一个n维矩阵作为TValue

美好的一天,

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)

delphi matrix rtti delphi-2010 tvalue

4
推荐指数
1
解决办法
1776
查看次数

在位图Delphi中绘制异步线程

如果许多异步线程都在全局TBitmap中绘制,会引发错误吗?我应该使用关键部分来创建代码吗?(从网上冲浪中,我发现TBitmap.Draw不是线程安全的)

另一个问题:如果许多同步线程都在全局TBitmap中绘制并且VCL计时器异步读取TBitmap中的内容,这会引起我错误吗?

谢谢!

delphi graphics multithreading asynchronous bitmap

3
推荐指数
1
解决办法
2286
查看次数