我想让Drag和Dock在我的应用程序中也能像在Delphi IDE中那样工作(即能够在Object Inspector/Structure View中拖动它们并将它们停靠在合适的站点上).将表格对接到PageControl我已经取得了相当不错的成功,但是想知道是否有人知道如何使用小关闭按钮和引脚等工作.
我也有兴趣了解Delphi IDE使用哪些组件来实现这一目标.
当你有一个TDBGrid,全行选择,并且总是显示选择,即使没有聚焦,你想完全拥有它,你可以选择一个不赞成的事件OnDrawDataCell,一个新的事件DrawColumnCell,我选择后者并尝试这个:
procedure TDbGridTestForm.mygridDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if gdSelected in State then begin
// mygrid.DrawCellHighlight(Rect, State, Col, Row);
mygrid.Canvas.Brush.Color := clHighlight;
mygrid.Canvas.Font.Color := clHighlightText;
mygrid.Canvas.FillRect(Rect);
end;
mygrid.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
Run Code Online (Sandbox Code Playgroud)
让我疯狂的是,我不会使用DefaultDrawColumnCell代码绘制焦点指示(高亮颜色和焦点矩形),我确信我应该调用DrawCellHighlight而不是执行上面我正在做的FillRect hack.
如果我打开DefaultDrawing,我会得到一组毛刺(奇怪的字体绘画问题),如果我将其关闭,我会得到另一组毛刺(即使在gdSelected时也没有突出显示).
DBGrids.pas DefaultDrawColumnCell中的代码除了绘制文本之外什么都不做.很明显,如果你自己接管所有绘图代码,你应该做更多.但是,DBGrids.pas所依赖的Grids.pas中内置的高亮绘图代码并非设计为从此上下文调用.我无法弄清楚我是否应该直接调用DrawCellHighlight(如上所示),并计算Col和Row值,或者我是否应该编写自己的TCustomGrid.DrawCellHighlight复杂版本来手动处理所有各种情况.
当然,这是如此简单,明显,我只是忽略它.我必须关闭DefaultDrawing,因此我必须完全从我的所有者绘制事件中绘制,并且我必须能够在主题服务不可用时运行,并且我必须在主题服务可用时使用它们.所以我需要直接调用TCustomGrid.DrawCellHighlight(我不知道如何),或者我需要完全重新实现它.
我使用/ etc/default/jenkins设置了JENKINS_ARGS,并使用www-data用户启动jenkins作为守护进程.
系统信息页面显示--prefix =/jenkins已设置
HOME/var/www HUDSON_HOME/var/jenkins JENKINS_ARGS --prefix =/jenkins
但仍然只能通过http:// ip:port /而不是http:// ip:port / jenkin访问jenkins .
我还在配置页面上设置了Jenkins URL,但没有成功.
如果还有什么我应该做的,你知道更多吗?
这是我的环境:Linux robopar12227 2.6.35-22-server#35-Ubuntu SMP Sat Oct 16 22:02:33 UTC 2010 x86_64 GNU/Linux java version"1.6.0_20"OpenJDK Runtime Environment(IcedTea6 1.9.13)( 6b20-1.9.13-0ubuntu1~10.10.1)OpenJDK 64位服务器VM(内置19.0-b09,混合模式)Jenkins ver.1.447
我正在寻找一种组件或其他技术来压缩和加密多个大文件(文件大小超过4GB,因此不适合win32进程可用的内存)到一个文件中.我希望加密非常强大(256位AES或更好),但压缩对我来说并不重要.
现在,我正在使用TJvZlibMultiple创建自己的非Zip文件格式的组件,但我必须创建存档,然后在单独的步骤中加密它(我现在正在使用DcpCrypt).我想在一次传递中使用流,而不使用等于文件大小的内存(ergo,压缩和加密应该在流中发生,而不是在内存中).
我已经看到了,并且不想使用任何需要外部DLL的东西,比如7zip dll.商业工具还可以,或任何代码或样本Delphi源代码,但我在Delphi中寻找彻底的实现,而不是在dll中导入和调用函数的东西.
在Windows中,我可以通过调用GetProcessMemoryInfo来获取Peak Memory的使用情况
function TProcess.Peek: Cardinal;
var
PMC: PPROCESS_MEMORY_COUNTERS;
PMCSize: Cardinal;
begin
PMCSize := SizeOf(PROCESS_MEMORY_COUNTERS);
GetMem(PMC, PMCSize);
try
PMC^.cb := PMCSize;
if GetProcessMemoryInfo(FHandle, PMC, PMCSize) then
Exit(PMC^.PeakWorkingSetSize)
else
Exit(0);
finally
FreeMem(PMC);
end;
end;
Run Code Online (Sandbox Code Playgroud)
什么是Mac OS相当于这样做?
我发现某些类型的代码清理和重构由于难以在大型项目的uses-clause中添加单元而变得非常困难.
我想在单个项目中的所有delphi .pas单元的interface-uses-clause中添加一个单元,这意味着在500多个地方手动执行该操作.每当我重构一个巨大的单元并将其从一个单元拆分为两个单元时,我可以使用"notepad ++"之类的东西进行搜索和替换,将"MyOldUnit"更改为"MyOldUnit,MyNewUnit",但有时候,这样做是不安全的.它还错过了"MyOldUnit"是uses子句中的最后一个("使用MyOldUnit;")的情况.
无论如何,搜索和替换文件是危险的业务.如果不存在这样的工具,我正在考虑使用Castalia delphi解析器编写一个.我检查了GExperts,Castalia,ModelMakerCodeExplorer,但没有一种方法可以将单元批量插入到项目的所有使用子句中.我希望有一个工具可以做到这一点.
其次,在很多情况下,我将一个功能从一个不属于另一个单元的单元移动,但这意味着我需要将该单元添加到项目单元的30%,而不是其他70%已经已经添加.这意味着需要解析器方法,而不是正则表达式方法.
我正在使用Mercurial,但我想任何知道它下面的版本控制系统的合并工具都可以做一些合并工具,它不知道版本控制系统,只看到两个不同文件夹中的两个"文件" ,永远不会.
我一直在使用KDIFF3,最近尝试过BeyondCompare,他们都不会这样做,至少不是我能搞清楚的.
我想要做的是最好地显示在这张图片,一个注释列,甚至可能从这些注释列打开其他窗口,这样我就可以浏览特定文件的特定版本,以便在尝试合并时查看上下文.
在这里的图像中,我显示了双向合并,但同样适用于三向合并.在显示的实际文件内容的右侧或左侧,我想要一个装订线或右侧注释列,显示这种更改来自何处的某种注释.由于Mercurial hex id相对不友好且无用,并且由于repository-local-revision-numbers是本地存储库,我认为基于提交注释的简短文本描述将是最有帮助的.当然,对于Mercurial,99%的提交评论都会说"Merge",而不是别的.(呻吟.)但是让我们假装我们没有使用工具和工作流程让我们在合并时瘫痪,相反,每次我们都可以看到有用的提交注释:

现在,复杂合并的工作流程对我来说是这样的:
使用我的分布式版本控制工具(mercurial),从另一个实际上是分支的存储库中提取更改.合并.TortoiseHg的合并窗口通常是我从这里开始的.这反过来让我配置合并工具(超出比较或Kdiff3).
但是,似乎没有任何合并工具(我已经看到)可以被告知,"嘿,你不只是在两个完全不同的文件夹中使用不同版本的文件以两种方式或三种方式合并,我告诉你的名字,但这些文件也是具有完整编辑历史的文件,可以向你展示你的人类实际的上下文,这些行更改的提交来自他们的提交注释,通常有一个错误号作为提交将使合并的人能够看到真正发生的事情.
我会从Mercurial改为Git,例如,甚至,对于一个真正的合并体验,并没有强迫我手动完成我认为我的工具可以自动为我做的事情.我正在使用Mercurial,TortoiseHG和KDIFF3,如果我可以从KDIFF3更改为其他工具,或者根本不做任何注释并在一个屏幕上合并,我想这样做.
下面是一些示例代码,它是Delphi中的一个独立控制台应用程序,它创建一个对象,然后创建一个对象,TInterfacedObject并将接口引用分配给TObject中的字段:
program ReferenceCountingProblemProject;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils;
type
ITestInterface = interface
['{A665E2EB-183C-4426-82D4-C81531DBA89B}']
procedure AnAction;
end;
TTestInterfaceImpl = class(TInterfacedObject,ITestInterface)
constructor Create;
destructor Destroy; override;
// implement ITestInterface:
procedure AnAction;
end;
TOwnerObjectTest = class
public
FieldReferencingAnInterfaceType1:ITestInterface;
end;
constructor TTestInterfaceImpl.Create;
begin
WriteLn('TTestInterfaceImpl object created');
end;
destructor TTestInterfaceImpl.Destroy;
begin
WriteLn('TTestInterfaceImpl object destroyed');
end;
procedure TTestInterfaceImpl.AnAction;
begin
WriteLn('TTestInterfaceImpl AnAction');
end;
procedure Test;
var
OwnerObjectTest:TOwnerObjectTest;
begin
OwnerObjectTest := TOwnerObjectTest.Create;
OwnerObjectTest.FieldReferencingAnInterfaceType1 := TTestInterfaceImpl.Create as ITestInterface;
OwnerObjectTest.FieldReferencingAnInterfaceType1.AnAction;
OwnerObjectTest.Free; // This DOES cause the clearing …Run Code Online (Sandbox Code Playgroud) 我试图在Tkinter中使用网格布局管理器来创建一个对话框.我希望底部的文本区域有一个滚动条.不幸的是,我无法弄清楚如何使滚动条与它旁边的文本小部件的高度相同.下面的示例显示滚动条位于正确位置但尺寸错误(仅为Text小部件高度的10%左右).

from tkinter import *
class queryrunner(Tk):
def __init__(self,parent):
Tk.__init__(self,parent)
self.parent = parent
self.minsize(width=800,height=500)
self.initialize()
def initialize(self):
self.grid_columnconfigure(2,weight=1)
self.grid_columnconfigure(3,weight=1)
self.grid_columnconfigure(6,weight=2)
self.grid_rowconfigure(0,weight=1)
self.grid_rowconfigure(1,weight=1)
self.grid_rowconfigure(2,weight=1)
self.grid_rowconfigure(3,weight=1)
self.grid_rowconfigure(4,weight=1)
# BUCKET AND N1QL LABEL + INPUT PAIRS:
self.label = Label(self,text="Bucket", width=10, anchor="w")
self.label.grid(column=0,row=0,columnspan=1,sticky='W')
self.entry = Entry(self);
self.entry.grid(column=1,row=0, columnspan=3, sticky='EW')
self.entry.insert(0, "couchbase://couchbase1.mycompany.com/beer-sample" )
# EXECUTE N1QL QUERY AGAINST BUCKET WHEN BUTTON CLICKED:
self.button = Button(self,text="Go",width=20)
self.button.grid(column=6,row=0)
self.label2 = Label(self,text="N1QL", anchor="w")
self.label2.grid(column=0,row=1,columnspan=1,sticky='W')
self.entry2 = Text(self,height=5);
self.entry2.grid(column=1,row=1, columnspan=3, rowspan=1, sticky='W')
self.label3 = Label(self,text="Output:", width=50,anchor="w")
self.label3.grid(column=0,row=4,columnspan=5,sticky='W')
self.entry3 = …Run Code Online (Sandbox Code Playgroud) 我有一个程序,用于搜索用户在路径和子路径中输入的文件,除了这一行,我对它的大部分内容都有很好的理解:
if ((Rec.Attr and faDirectory) <> 0) and (Rec.Name<>'.') and (Rec.Name<>'..')
Run Code Online (Sandbox Code Playgroud)
整个过程如下,帮助将被欣赏,因为我不确定这行代码的目的,是它检查子路径中的东西?
procedure TfrmProject.btnOpenDocumentClick(Sender: TObject);
begin
FileSearch('C:\Users\Guest\Documents', edtDocument.Text+'.docx');
end;
procedure TfrmProject.FileSearch(const Pathname, FileName : string);
var Word : Variant;
Rec : TSearchRec;
Path : string;
begin
Path := IncludeTrailingBackslash(Pathname);
if FindFirst(Path + FileName, faAnyFile - faDirectory, Rec) = 0
then repeat Word:=CreateOLEObject('Word.Application');
Word.Visible:=True;
Word.Documents.Open(Path + FileName);
until FindNext(Rec) <> 0;
FindClose(Rec);
if FindFirst(Path + '*.*', faDirectory, Rec) = 0 then
try
repeat
if ((Rec.Attr and faDirectory) <> 0) and (Rec.Name<>'.') …Run Code Online (Sandbox Code Playgroud) delphi ×7
delphi-xe2 ×2
blame ×1
components ×1
compression ×1
dbgrid ×1
delphi-7 ×1
encryption ×1
gexperts ×1
interface ×1
jenkins ×1
macos ×1
memory ×1
mercurial ×1
merge ×1
python ×1
tkinter ×1
tortoisehg ×1
uses-clause ×1
vcl ×1