zoukankan      html  css  js  c++  java
  • Delphi经验总结(2)

    Q: 怎么来改变ListBox的字体呢?就修改其中的一行。

    A: 先把ListBox1.Style 设成lbOwnerDrawFixed 
    然后在 OnDrawItem 事件下写下如下代码

    procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; 
    Rect: TRect; State: TOwnerDrawState); 
    var 
    Offset: Integer; 
    begin 
    Offset := 2; 
    with (Control as TListBox).Canvas do begin 
    FillRect(Rect); 
    if Index = 2 then begin 
    Font.Name := 'Fixedsys'; 
    Font.Color := clRed; 
    Font.Size := 12; 
    end else begin 
    Font.Name := 'Arial'; 
    Font.Color := clBlack; 
    Font.Size := 8; 
    end; 
    if odSelected in State then begin 
    Font.Color := clWhite; 
    end; 
    TextOut(Rect.Left + Offset, Rect.Top, (Control as TListBox).Items[Index]); 
    end; 
    end; 
    ---------------------------------------- 
    Q:怎么在RichEdit里面插入图片?

    A: 请到这里来看看会找到答案

    http://www.undu.com/Articles/991107c.html 
    ---------------------------------------------- 
    Q:怎么才能目录呢?

    A:我来。

    uses ShellAPI;

    procedure DeleteFiles(Source: string); 
    var 
    FO: TShFileOpStruct; 
    begin 
    FillChar(FO,SizeOf(FO),#0); 
    FO.Wnd := Form1.Handle; 
    FO.wFunc := FO_Delete; 
    FO.pFrom := PChar(Source); 
    ShFileOperation(FO); 
    end;

    procedure EmptyDirectory(Path: String); 
    begin 
    if DirectoryExists(Path) then 
    begin 
    DeleteFiles(Path+'*'); 
    end 
    else 
    ForceDirectories(Path); 
    end; 
    -------------------------------------------------- 
    Q:如何映射网络驱动器?

    比如我要把Serversys映射为F盘。我需要一个函数比如

    给出输入参数为serversyshomebruno给我的返回值是F:homebruno

    A:

    Function UNCToDrive(UNCPath: STring): STring; 
    var 
    DriveNum: Integer; 
    DriveChar: Char; 
    DriveBits: set of 0..25; 
    StartSTr,TestStr: STring; 
    begin 
    result := UNCPath; 
    StartSTr := UNCPath; 
    Integer(DriveBits) := GetLogicalDrives; 
    for DriveNum := 0 to 25 do 
    begin 
    if (DriveNum in DriveBits) then begin 
    DriveChar := Char(DriveNum + ord('A')); 
    TestSTr := ExpandUNCFileName(DriveChar+':'); 
    If TEstStr <> '' then 
    If Pos(Uppercase(TestSTr),Uppercase(STartSTr)) > 0 then 
    begin 
    Delete(StartSTr,1,Length(TestSTr)); 
    result := DriveChar+':'+StartSTr; 
    break; 
    end; 
    end; 
    end; 
    end; 
    --------------------------------------------------------- 
    Q:我有一些特殊语言的字体来用,它们存储在我的EXE文件里,但是两点。

    * 我不想放到font文件夹里 
    * 我不想从EXE文件里面提取出来

    如果可能,请告诉我。

    因为,我的字体是自己做的不是windows自带的,我想保护自己的东西。

    A:不太可能,必须提取出来。你可以使用这个保护过程来保护你的文件不被修改和删除。

    在EXE执行的时候把字体放到临时文件夹里,结束的时候删除它。

    function ProtectFile(sFilename : string) : hFile; 
    var 
    hf: hFile; 
    lwHFileSize, lwFilesize: longword; 
    ofs : TOFStruct; 
    begin 
    if FileExists(sFilename) then 
    begin 
    hf := OpenFile(pchar(sFilename), ofs, OF_READ or OF_WRITE or OF_SHARE_EXCLUSIVE); 
    if hf <> 0 then 
    begin 
    lwFilesize := GetFileSize(hf, @lwHFileSize); 
    if LockFile(hf, 0, 0, lwFilesize, lwHFilesize) then 
    Result := hf else Result := 0; 
    end 
    else Result := 0; 
    end 
    else Result := 0; 
    end;

    //.. 
    var 
    ResS: TResourceStream; 
    TempPath: array [0..MAX_PATH] of Char; 
    TempDir: string; 
    begin 
    GetTempPath(Sizeof(TempPath), TempPath); 
    TempDir := StrPas(Path); 
    ResS := TResourceStream.Create(hInstance, 'SOME_FONT', 'RT_FONT'); 
    ResS.SavetoFile(TempDir+'some_font.ttf'); 
    ResS.Free; 
    AddFontResource(TempDir+'some_font.ttf'); 
    SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0); 
    ProtectFile(TempDir+'some_font.ttf'); 
    end; 
    ------------------------------------------------------- 
    Q:如何得到当前的ProgramFiles得路径?

    A:用读写注册表的方法就可以做到。

    代码如下:

    uses registry;

    procedure TForm1.Button1Click(Sender: TObject); 
    var 
    reg:TRegistry; 
    begin 
    reg:=TRegistry.Create; 
    reg.RootKey:=HKEY_LOCAL_MACHINE; 
    if reg.OpenKey('SOFTWAREMicrosoftWindowsCurrentVersion',false) then 
    begin 
    edit1.Text:=reg.ReadString('ProgramFilesDir'); 
    reg.CloseKey; 
    reg.Free; 
    end; 
    end; 
    -------------------------------------------------------------- 
    Q:如何在Jpg图像上写上字?

    A:这里有个代码。

    hmm, here's a sample with help of Bitmap, you can chance the brush style of canvas to bsClear to make the text transparent

    uses 
    Jpeg;

    procedure TForm1.Button1Click(Sender: TObject); 
    var 
    Bmp : TBitmap; 
    Jpg : TJpegImage; 
    begin 
    try 
    Bmp := TBitmap.Create; 
    Jpg := TjpegImage.Create; 
    Jpg.LoadFromFile('c:img.jpg'); 
    Bmp.Assign(Jpg); 
    Bmp.Canvas.Brush.Style := bsClear; 
    Bmp.Canvas.Font.Color := clYellow; 
    Bmp.Canvas.TextOut(10,10,'Hello World'); 
    Jpg.Assign(Bmp); 
    Jpg.SaveToFile('c:img2.jpg'); 
    finally 
    bmp.Free; 
    jpg.Free; 
    end; 
    end; 
    ---------------------------------------------------- 
    DBGrid中如何让回车变为光标右移动 :

    procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; 
    Shift: TShiftState); 
    begin 
    if key=VK_F1 then 
    begin 
    DBGrid1.DataSource:=DataSource1; 
    ADOTable1.Active:=true; 
    ADOTable2.Active:=false; 
    end 
    else if key=VK_F2 then 
    begin 
    DBGrid1.DataSource:=DataSource2; 
    ADOTable2.Active:=true; 
    ADOTable1.Active:=false; 
    end 
    end ;

    case key of 
    vk_f11: 
    begin

    end;

    if edit1.Text=ADOTable1.FieldByName('no').AsString then 
    begin 
    edit2.Text:=ADOTable1.FieldValues['pname']; 
    edit3.Text:=ADOTable1.FieldValues['kroom']; 
    edit4.Text:=ADOTable1.FieldValues['dname']; 
    end

    DBGrid中如何让回车变为光标右移动 
    在Form.OnKeyPress事件中写如下代码:

    if Key = #13 then 
    if ActiveControl = DBGrid1 then begin 
    TDBGrid(ActiveControl).SelectedIndex := TDBGrid(ActiveControl).SelectedIndex + 1; 
    Key := #0; 
    end;

    有2点需要注意: 
    1.当光标达到DBGird最右列的时候,再按回车,光标还会停留在原地。 
    2.Key := #0一句让光标移动到下一列以后处于浏览状态,如果去掉这行代码光标移动到下一列以后将处于编辑状态。 
    ----------------------------------------------------------------- 
    Q:怎么用delphi修改文件的时间呢?

    在windows下,属性里面有三个日起,创建,修改,存储。我怎么来修改啊?

    A:Here is the excerpt from the Jedi Code Library. If it is not complete then get the JCL.

    type 
    // indicates the file time to set, used by SetFileTimesHelper and SetDirTimesHelper 
    TFileTimes = (ftLastAccess, ftLastWrite, ftCreation);

    function SetFileTim
    esHelper(const FileName: string; const DateTime: TDateTime; Times: TFileTimes): Boolean; 
    var 
    Handle: THandle; 
    FileTime: TFileTime; 
    SystemTime: TSystemTime; 
    begin 
    Result := False; 
    Handle := CreateFile(PChar(FileName), GENERIC_WRITE, FILE_SHARE_READ, nil, 
    OPEN_EXISTING, 0, 0); 
    if Handle <> INVALID_HANDLE_VALUE then 
    try 
    //SysUtils.DateTimeToSystemTime(DateTimeToLocalDateTime(DateTime), SystemTime); 
    SysUtils.DateTimeToSystemTime(DateTime, SystemTime); 
    if Windows.SystemTimeToFileTime(SystemTime, FileTime) then 
    begin 
    case Times of 
    ftLastAccess: 
    Result := SetFileTime(Handle, nil, @FileTime, nil); 
    ftLastWrite: 
    Result := SetFileTime(Handle, nil, nil, @FileTime); 
    ftCreation: 
    Result := SetFileTime(Handle, @FileTime, nil, nil); 
    end; 
    end; 
    finally 
    CloseHandle(Handle); 
    end; 
    end;

    //--------------------------------------------------------------------------------------------------

    function SetFileLastAccess(const FileName: string; const DateTime: TDateTime): Boolean; 
    begin 
    Result := SetFileTimesHelper(FileName, DateTime, ftLastAccess); 
    end;

    //--------------------------------------------------------------------------------------------------

    function SetFileLastWrite(const FileName: string; const DateTime: TDateTime): Boolean; 
    begin 
    Result := SetFileTimesHelper(FileName, DateTime, ftLastWrite); 
    end;

    //--------------------------------------------------------------------------------------------------

    function SetFileCreation(const FileName: string; const DateTime: TDateTime): Boolean; 
    begin 
    Result := SetFileTimesHelper(FileName, DateTime, ftCreation); 
    end; 
    ----------------------------------------------------------------------

  • 相关阅读:
    route命令
    linux下限制ip访问
    linux安装oracle客户端
    Upgrading to Kentico 12
    online youtube subtitle downloader
    Driving continuous quality of your code with SonarCloud
    炉石传说 乱斗模式 三足鼎立
    Behavior-driven development
    TestNG like unit testing framework in C# (C sharp)
    Windows 10 & 8: Install Active Directory Users and Computers
  • 原文地址:https://www.cnblogs.com/m0488/p/3430655.html
Copyright © 2011-2022 走看看