标签: delphi-7

如何使用Delphi 7将文本文件从ANSI转换为UTF-8?

我用Delphi 7编写了一个程序,用于*.srt在硬盘上搜索文件.此程序在备忘录中列出这些文件的路径和名称.现在我需要将这些文件从ANSI转换为UTF-8,但我还没有成功.

delphi ansi utf-8 delphi-7 character-encoding

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

使用事务和数据感知组件编写Delphi数据库应用程序的优选方法

使用事务和数据感知组件编写Delphi数据库应用程序的首选方法是什么?

我必须编写一个访问InnoDB表的客户端应用程序,并在事务中执行一些主要的详细信息.在对交易进行一些研究之后(从一般的观点来看),我谦虚地得出结论,非数据感知组件和手工编码的SQL将是交易的"完美匹配"; 但数据感知组件不会.它们似乎并不是为彼此而制造的.

我真的需要使用事务,但另一方面,我不能只是抛弃数据感知组件,因为它们大大简化了事情.

有人可以赐教我吗?我一直在谷歌搜索它,但我没有找到任何有用的答案.也许是因为我的英语不够好,我的关键词有限.

顺便说一下,我正在使用Delphi 7,目前正在评估UniDAC作为数据访问库.

谢谢.

编辑

用于描述我的问题的一个方面的示例:

想象一下有一个包含2个DBGrids的表单.第一个网格是MasterGrid,上面是这些按钮:添加,编辑和删除.第二个网格是DetailGrid.如果用户单击"添加",则它将如下所示:

  • Connection.StartTransaction
  • Master.Append然后Master.Post然后Master.Edit(所以主数据集有自动增量主键,现在可以编辑)
  • 以模态方式显示编辑表单,用户填写主记录,并使用其他表单添加一些详细记录.
  • 如果用户单击"确定",则应用程序将执行Master.Post和Connection.Commit.如果用户单击"取消",则应用程序将执行Connection.Rollback.

我知道交易应该尽可能短,但你可以看到,交易只是填写表格的用户的速度.

如果我使用的是非数据感知组件,我会根据用户输入自定义插入SQL,然后在StartTransaction和Commit之间执行SQL.所以我可以实现非常短的交易.

编辑2

我感谢你们所有人的亲切参与.我从vcldeveloper中选择答案,因为它是我目前需要的最接近的解决方案.

database delphi transactions delphi-7 data-aware

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

如何在delphi7中制作数字时钟?

我是delphi的新手,想从容易开始.有人可以告诉我一个如何制作一个将"时间"(小时,分钟,秒)转移到标签的数字时钟的例子吗?或类似的东西

delphi pascal delphi-7

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

范围检查错误的原因(Delphi)

如果我打开那些编译器检查指令,这是一些导致范围检查错误和溢出错误的代码的精简版本.我理解为什么这会导致溢出,在C1的乘法中,它似乎可能超过数据类型的最大值.但为什么这也会触发范围检查错误?Delphi的文档和其他关于堆栈溢出的帖子使得听起来像范围检查错误通常用于超出范围的数组访问.但是我没有在线上访问一个数组,它说是导致范围检查错误.也许是关于param1的任务?但是,如果是这样,为什么这会是范围检查而不是溢出错误?

const
  C1 = 44001;
  C2 = 17999;

function fxnName(..other params...; param1: Word): String;
var
  someByte: byte;
begin
  // some code
  // by now we're in a loop. the following line is where it breaks to in the debugger: 
  param1 := (someByte + param1) * C1 + C2;
  // more code
end;
Run Code Online (Sandbox Code Playgroud)

如果它是相关的,当它在调试器中的那一行中断时,除了param1之外,所有值都按预期显示,当我要求Delphi评估它时,它显示"未声明的标识符:'param1'".

delphi delphi-7

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

大于2 GB的文件存在TReadOnlyCachedFileStream错误

David Heffernan在这里发布了一个自定义文件流: 缓冲文件(用于更快的磁盘访问)

它适用于小于2 GB的文件,没有问题,速度非常快.在大于2GB的文件上,它始终在1.90 GB左右失败.错误是:

Project1.exe raised exception class EStreamError with message 'SetFilePointerEx failed for C:\Projects\Huge.txt. An Attempt was made to move the file pointer before the beginning of the file'. Process stopped.

`

const
 bufsz = 65536; //64K
var
  strTmp : AnsiString;
  bufStreamIN  : TReadOnlyCachedFileStream;
  bufStreamOut : TWriteCachedFileStream;
  strmsize, BytesRead, M, NumberOfBytes, J : LongWord;
  Buffer: PByte;

      J := bufStreamIn.Size; 
try
      while (bufStreamIN.Position < J)  do
      begin
        BytesRead := bfStreamIN.Read(Buffer^, bufsz);
        NumberOfBytes := NumberOfBytes + BytesRead; …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-7 filestream

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

TTrackBar有自定义职位吗?

我试图在Win 7缩放轨道栏中复制PAINT应用程序的行为:(我知道这是一个常见的轨道栏控件)

100%放大

100%位于市中心.它有11个可用职位:

50%放大 200%放大 等等...

12.5%, 25%, 50%, 100%, 200%, 300%, 400%, 500%, 600%, 700%, 800%

所以我的缩放值(ZoomArray)是:
0.125, 0.25, 0.5, 1, 2, 3, 4, 5, 6, 7, 8

这很容易我可以将Min设置为1,Max设置为11并获得我需要的值:
ZoomArray[TrackBar1.Position]

问题是如何保持100%在中心位置,唯一可用的位置是上面的位置?

我试图在数组中使用虚拟值来保持1在中心,例如:
0.125, 0.25, 0.5, -1, -1, -1, -1, 1, 2, 3, 4, 5, 6, 7, 8
并在Change事件上重新定位轨迹栏,但我的逻辑似乎没有正常工作.

有任何想法吗?

delphi delphi-7 trackbar

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

如何使用Owner创建一个TStringList后代,它将自动释放TStringList?

我希望创建类似"TOwnedStringList"(类名是小说)的东西,我可以构造为:

sl := TOwnedStringList.Create(Self);
sl.Sorted := True;
sl.Duplicates := dupIgnore; 
sl.Add(...);
// etc...
Run Code Online (Sandbox Code Playgroud)

哪里Self可以是一个Form(例如),以便所有者将自动释放StringList.我希望能够避免给sl.Free自己打电话.

这可能吗?

delphi delphi-7

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

如何使控制台应用程序等待"Enter"键,但在一段时间后自动继续?

我在delphi 7中创建了一个控制台应用程序,它应该在你按下回车键后显示消息:

begin
  writeln ('Press ENTER to continue');
  readln;
  writeln ('blablabla');
  writeln ('blablabla');
end;
Run Code Online (Sandbox Code Playgroud)

问题是用户可以按任何按钮继续,这就是问题所在.如果用户按下键盘的输入按钮,我只希望程序继续.除此之外,我需要它在一段时间后自动继续,例如5秒,无需用户输入.

如何让控制台应用程序等待一段时间让用户按下Enter键,但如果用户没有,则自动继续?

delphi console-application delphi-7

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

在Delphi中缩放画布区域

我在Delphi中制作看起来像Paint的东西.我找到了如何制作缩放功能:

procedure SetCanvasZoomFactor(Canvas: TCanvas; AZoomFactor: Integer);
var
  i: Integer;
begin
  if AZoomFactor = 100 then
    SetMapMode(Canvas.Handle, MM_TEXT)
  else
  begin
    SetMapMode(Canvas.Handle, MM_ISOTROPIC);
    SetWindowExtEx(Canvas.Handle, AZoomFactor, AZoomFactor, nil);
    SetViewportExtEx(Canvas.Handle, 100, 100, nil);
  end;
end;



procedure TMainForm.btnZoomPlusClick(Sender: TObject);
var
  bitmap: TBitmap;
begin 

  bitmap := TBitmap.Create;
  if(zoomVal < 1000) then
      zoomVal:=zoomVal+zoomConst; //zoomVal = 100 by default; zoomConst = 150;
  try
    bitmap.Assign(MainForm.imgMain.Picture.Bitmap);
    SetCanvasZoomFactor(bitmap.Canvas, zoomVal);
    Canvas.Draw(MainForm.imgMain.Left,MainForm.imgMain.Top, bitmap); 
  finally
    bitmap.Free
  end;
end;
Run Code Online (Sandbox Code Playgroud)

但是,问题是 - 它仅缩放图像的左上区域.

缩放前的示例: 在此输入图像描述 放大后: 在此输入图像描述

我希望能够在缩放后移动所有图片区域.我该怎么做?

delphi canvas delphi-7 zooming mousemove

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

如何从Delphi中的文本文件中删除特定行

我有一个文本文件,其中逐行存储了用户信息.每行的格式为:UserID#UserEmail#UserPassword'#'为分隔符.

我试图使用此编码来执行任务:

var sl:TStringList;
begin
  sl:=TStringList.Create;
  sl.LoadFromFile('filename');
  sl.Delete(Index);
  sl.SaveToFile('filename');
  sl.free;
end;
Run Code Online (Sandbox Code Playgroud)

但我不确定在"索引"空间放什么.

有什么方法可以接收用户ID作为输入,然后从具有此用户ID的文本文件中删除文本行?任何帮助,将不胜感激.

delphi delphi-7 text-files

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