小编Jak*_*ays的帖子

在firemonkey移动开发中正确使用TAniIndicator等待处理

我正在使用Delphi XE-5(Firemonkey移动应用程序)

我想通过在长时间处理期间显示来让TAniIndicator工作.我的主表单上有一个TAniIndicator(AniIndi),但它没有旋转.它显示正确,但不旋转.

begin
 Loading:= True;
 AniIndi.Visible:= True;
 AniIndi.Enabled:= True;
 UpdateAll;
 Application.ProcessMessages;

 //do my processsing here

 Loading:= False;
 AniIndi.Enabled:= False;
 AniIndi.Visible:= False;
 UpdateAll;
 Application.ProcessMessages;
end;
Run Code Online (Sandbox Code Playgroud)

//基于REMY的答案进行编辑

TLoadThread = class(TThread)
 public
  Config: Boolean;
  constructor Create(const aConfig: Boolean); reintroduce;
 protected
  procedure DoProcessing;
  procedure Execute; Override;
 end;

var
 loading: Boolean = false;
 zLThread: TLoadThread = nil;

constructor TLoadThread.Create(const aConfig: Boolean);
begin
 inherited Create(true);
 Config:= aConfig;
end;

procedure TLoadThread.DoProcessing;
var
begin
 //do processing here and update main form
end;

procedure TLoadThread.Execute;
begin
 FreeOnTerminate:= true; …
Run Code Online (Sandbox Code Playgroud)

delphi firemonkey delphi-xe5

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

我应该在哪里存储配置文件?

我需要通过Win8在WinXP中读取和写入配置文件到Windows磁盘.他们最适合这样做的地方在哪里?看起来似乎不允许ProgramData文件夹

procedure TfrmMain.FormCreate(Sender: TObject);
var
  path: array[0..MAX_PATH] of char;
begin
   SHGetFolderPath(0, CSIDL_COMMON_APPDATA, 0, SHGFP_TYPE_CURRENT, @path);
  AppPath:= Path;
  AppPath:= AppPath + '\Customer\';
  if not DirectoryExists(AppPath) then
   CreateDir(AppPath);
 if FileExists(AppPath + 'Customers.cst') then
 LoadFromFile(AppPath + 'Customers.cst');
end;

procedure TfrmMain.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
 if ListModified  then
 begin
  if MessageDlg('Save Changes?', mtWarning, [mbYes, mbNo], 0) = mrYes  then
   SaveToFile(AppPath + 'Customers.cst');
  canClose:= True;
 end
 else 
canClose:= False;
end;
Run Code Online (Sandbox Code Playgroud)

windows delphi

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

排序的TStringList错误 - 排序列表上不允许操作

我收到以下错误 - "排序列表上不允许操作"

Idx:= Customers.IndexOfName(ListView1.Selected.Caption);
Customers[idx]:= Edit1.Text + '=' + Edit2.Text + ',' + Edit3.Text //error occurs here 
Run Code Online (Sandbox Code Playgroud)

有没有办法解决?除了写我自己的例程来获取索引值

感谢名单

delphi delphi-2010

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

排序 TListView 列

我有一个包含 4 列(当然都是字符串)的 TListview,但是,我将数据存储在其中:

  • Caption: 任何字符串

  • SubItems[0]:整数,例如 '5016'

  • SubItems[1]:日期,例如 '03/22/13'

  • Subitems[2]: 任何字符串

当用户单击coolumn 标题时,我使用以下代码进行排序

我正在看这篇文章“如何根据子项 [x] 在 Tlistview 中进行排序”,但我无法弄清楚如何考虑不同的列类型。

procedure TfrmFind.lvwTagsColumnClick(Sender: TObject; Column: TListColumn);
begin
 ColumnToSort := Column.Index;
 (Sender as TCustomListView).AlphaSort;
end;

procedure TfrmFind.lvwTagsCompare(Sender: TObject; Item1, Item2: TListItem;
  Data: Integer; var Compare: Integer);
var
 ix: Integer;
 begin
 if ColumnToSort = 0 then
 Compare := CompareText(Item1.Caption,Item2.Caption)
 else begin
 ix := ColumnToSort - 1;
 Compare := CompareText(Item1.SubItems[ix],Item2.SubItems[ix]);
 end;
end;
Run Code Online (Sandbox Code Playgroud)

如何考虑 Integer 和 Date 列,以便它们不会按字符串排序?

谢谢

delphi

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

对TListView列进行排序 - 续.(升序降序)

我最近得到了帮助,根据列数据类型对TListView的列进行排序.

这是代码:

procedure TfrmFind.lvwTagsColumnClick(Sender: TObject; Column: TListColumn);
begin
 ColumnToSort := Column.Index;
 (Sender as TCustomListView).AlphaSort;
end;

procedure TfrmFind.lvwTagsCompare(Sender: TObject; Item1, Item2: TListItem;
  Data: Integer; var Compare: Integer);
var
 ix: Integer;
 begin
 if ColumnToSort = 0 then
  Compare := CompareText(Item1.Caption,Item2.Caption)
 else
 if ColumnToSort = 1 then
  Compare := CompareTextAsInteger(Item1.subitems[0],Item2.subitems[0])
 else
if ColumnToSort = 2 then
  Compare := CompareTextAsDateTime(Item1.subitems[1],Item2.subitems[1])
 else
 begin
 ix := ColumnToSort - 1;
 Compare := CompareText(Item1.SubItems[ix],Item2.SubItems[ix]);
 end;
end;
Run Code Online (Sandbox Code Playgroud)

如果有可能,我想添加升序和降序排序功能吗?

用户单击一次以升序排序,然后再次单击降序排序

我可以从我目前的代码中执行此操作吗?

如何在左列添加一个字形以显示排序类型(升序与降序)?

******************************************************************************
Run Code Online (Sandbox Code Playgroud)

基于专家的修改答案:2013年3月25日

procedure TfrmFind.lvwTagsColumnClick(Sender: …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-2010

3
推荐指数
2
解决办法
8018
查看次数

OnKeyDown不能处理从主窗体调用的Dialog(它也使用OnKeyDown)

Delphi 2010

我在我的主窗体上使用OnFormKeyDown事件,我基本上在Dialog上使用相同的事件

//主要形式

procedure TfrmMain.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
   case Key of
      VK_DOWN: btnLast.OnClick(Self);
      VK_Up:  btnFirst.OnClick(Self);
      VK_Left:  btnPrev.OnClick(Self);
      VK_Right:  btnNext.OnClick(Self);
    end;
end;

procedure TfrmMain.mniShowOwnedClick(Sender: TObject);
var
 I: Integer;
begin
 frmMain.KeyPreview:= False;
 frmOwned.KeyPreview:= True;
 frmOwned.Owned2.Clear;
 for I := 0 to Tags.Count - 1 do
  if Owned.IndexOf(Tags.Names[I]) <> -1 then
     frmOwned.Owned2.Add(Tags[I]);
 if frmOwned.ShowModal = mrOK then
 begin
  frmMain.KeyPreview:= True;
  frmOwned.KeyPreview:= False;
 end;
end;
Run Code Online (Sandbox Code Playgroud)

//对话

procedure TfrmOwned.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
   case Key of
      VK_DOWN: btnLast.OnClick(Self); …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-2010

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

从任务管理器隐藏和显示进程

Delphi 2010

我有一个列表框,我填写了所有进程ID的列表.

function EnumProcess(hHwnd: HWND;lParam : integer): boolean; stdcall;
var
  pPid : DWORD;
  title, className : string;
begin
  if(hHwnd=NULL) then
  begin
   result := false;
  end
  else
  begin
   GetWindowThreadProcessId(hHwnd,pPid);
   SetLength(className, 255);
   SetLength(className, GetClassName(hHwnd, PChar(className), Length(className)));
   SetLength(title, 255);
   SetLength(title, GetWindowText(hHwnd, PChar(title), Length(title)));
   //form1.ListBox1.Items.Add('Class Name = ' + className + '; Title = ' + title + '; HWND = ' + IntToStr(hHwnd) + '; Pid = ' + IntToStr(pPid));
   form1.ListBox1.Items.Add(IntToStr(pPid));
   result := true;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

有没有办法隐藏和显示PID?我需要一个Hide函数和一个可以处理它们的函数

function HidePID(Value: DWord): Boolean;

function …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-2010

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

简单的TListView保存和加载文件(仅保存列字符串值)

我正在使用Delphi 2010,我搜索了互联网并找到了一些例子,但它们都没有用.我使用它可能是因为2010年和unicode?无论如何......

我正在寻找两个例程来对TListView进行简单的保存和加载文件.我只对保存每列中的字符串值感兴趣.即标题和子项.我对保存布局或任何对象不感兴趣.

procedure SaveToFile(const FileName: string);
procedure LoadFromFile(const FileName: string);
Run Code Online (Sandbox Code Playgroud)

delphi delphi-2010

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

自定义组件TImage事件导致错误"不存在"

我有一个自定义组件,包含以下事件

 private
    { Private declarations }
    ...
    fOnImageClick: TNotifyEvent;
    fOnImageMouseUp: TMouseEvent;
    fOnImageMouseDown: TMouseEvent;
    fOnImageMouseMove:  TMouseMoveEvent;
    fOnImageMouseEnter: TNotifyEvent;
    fOnImageMouseLeave: TNotifyEvent;
    fOnImageSelect: TNotifyEvent;
    fOnImageDblClick: TNotifyEvent;
  protected
    ...
  public
    { Public declarations }
     ...
  published
     ...
     property OnImageClick: TNotifyEvent read  fOnImageClick write  fOnImageClick;
     property OnImageSelect: TNotifyEvent read  fOnImageSelect write  fOnImageSelect;
     property OnImageDblClick: TNotifyEvent read  fOnImageDblClick write  fOnImageDblClick;
     property OnImageMouseDown: TMouseEvent read  fOnImageMouseDown write  fOnImageMouseDown;
     property OnImageMouseUp: TMouseEvent read  fOnImageMouseUp write  fOnImageMouseUp;
     property OnImageMouseMove:  TMouseMoveEvent read  fOnImageMouseMove write  fOnImageMouseMove;
     property OnImageMouseLeave: TNotifyEvent read  fOnImageMouseLeave …
Run Code Online (Sandbox Code Playgroud)

delphi vcl delphi-2010

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

名称/值对上的TStringList CustomSort方法

是否可以使用名称/值对中的名称在TStringList上使用customSort

我当前正在使用TStringList对每个pos中的一个值进行排序.我现在需要使用此值添加其他数据,因此我现在使用TStringList作为名称/值

我目前的CompareSort是:

function StrCmpLogicalW(sz1, sz2: PWideChar): Integer; stdcall;
  external 'shlwapi.dll' name 'StrCmpLogicalW';


function MyCompare(List: TStringList; Index1, Index2: Integer): Integer;
begin
  Result := StrCmpLogicalW(PWideChar(List[Index1]), PWideChar(List[Index2]));
end;
Usage:
  StringList.CustomSort(MyCompare);
Run Code Online (Sandbox Code Playgroud)

有没有办法修改它,以便它根据名称值对的名称进行排序?

或者,还有另一种方式吗?

delphi delphi-2010

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

标签 统计

delphi ×10

delphi-2010 ×7

delphi-xe5 ×1

firemonkey ×1

vcl ×1

windows ×1