bestlong 怕失憶筆記

當健忘由隨機逐漸趨向常態時,作筆記是非常必要的

Entries for the ‘Delphi’ Category

Delphi 的 ExtractFileDir 與 ExtractFilePath 函數有何差異?

ExtractFileDir() 與 ExtractFilePath() 是有差異的,直接用程式來看差異結果

1
2
3
4
5
6
7
8
procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo1.Clear;
  Memo1.Lines.Add(ExtractFileDir('C:\a.exe'));
  Memo1.Lines.Add(ExtractFilePath('C:\a.exe'));
  Memo1.Lines.Add(ExtractFileDir('C:\Program Files\a.exe'));
  Memo1.Lines.Add(ExtractFilePath('C:\Program Files\a.exe'));
end;

得到的執行結果是
C:\
C:\
C:\Program Files
C:\Program Files\

得知 ExtractFilePath() 的結果都會在路徑後保留 \

Leave a Comment

控制 Windows 音效管理員作靜音切換

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
uses
  MMSystem;

function GetMasterMute(Mixer: hMixerObj; var Control: TMixerControl): MMResult;
  // Returns True on success
var
  Line: TMixerLine;
  Controls: TMixerLineControls;
begin
  ZeroMemory(@Line, SizeOf(Line));
  Line.cbStruct := SizeOf(Line);
  Line.dwComponentType := MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
  Result := mixerGetLineInfo(Mixer, @Line, MIXER_GETLINEINFOF_COMPONENTTYPE);
  if Result = MMSYSERR_NOERROR then
  begin
    ZeroMemory(@Controls, SizeOf(Controls));
    Controls.cbStruct := SizeOf(Controls);
    Controls.dwLineID := Line.dwLineID;
    Controls.cControls := 1;
    Controls.dwControlType := MIXERCONTROL_CONTROLTYPE_MUTE;
    Controls.cbmxctrl := SizeOf(Control);
    Controls.pamxctrl := @Control;
    Result := mixerGetLineControls(Mixer, @Controls,
      MIXER_GETLINECONTROLSF_ONEBYTYPE);
  end;
end;

procedure SetMasterMuteValue(Mixer: hMixerObj; Value: Boolean);
var
  MasterMute: TMixerControl;
  Details: TMixerControlDetails;
  BoolDetails: TMixerControlDetailsBoolean;
  Code: MMResult;
begin
  Code := GetMasterMute(0, MasterMute);
  if Code = MMSYSERR_NOERROR then
  begin
    with Details do
    begin
      cbStruct := SizeOf(Details);
      dwControlID := MasterMute.dwControlID;
      cChannels := 1;
      cMultipleItems := 0;
      cbDetails := SizeOf(BoolDetails);
      paDetails := @BoolDetails;
    end;
    LongBool(BoolDetails.fValue) := Value;
    Code := mixerSetControlDetails(0, @Details,MIXER_SETCONTROLDETAILSF_VALUE);
  end;
  if Code <> MMSYSERR_NOERROR then
    raise Exception.CreateFmt('SetMasterMuteValue failure, ' + 'multimedia system error #%d', [Code]);
end;

// Example:

procedure TForm1.Button1Click(Sender: TObject);
begin
  SetMasterMuteValue(0, CheckBox1.Checked); // Mixer device #0 mute on/off
end;

Leave a Comment

Delphi 7 Access violation at address 4085E2C4 in module ‘bdertl70.bpl’

於 Delphi 7 的環境下的專案程式中的 TQuery 元件的 Fields Editor 中要增加欄位出現了下列錯誤訊息

Access violation at address 4085E2C4 in module ‘bdertl70.bpl’. Read of address 00000000.

增加一個新的 TQuery 元件要指定 DatabaseName 屬性也會出現同樣的錯誤
原本是很正常的專案不確定為何會這樣
不過新建一個專案做同樣的處理就不會有同樣錯誤
所以歸納為專案本身的環境問題
才想到前一段時間為了減少 IDE 介面 Palette 上的元件
就去將 Project Options 中將一些沒用到的 Packages 給關掉
不然設計時找元件要點來點去很麻煩
說不定就是元件之間的關連性所導致的問題
趕快把原本關掉的都給弄回來,果然錯誤訊息就不再出現了。

Leave a Comment

Delphi 環境下的 Log 元件

Java 環境下有一個 Log4J 的功能,在 Delphi 環境下也有人開發出類似的元件。可以參考下列兩個專案:

http://log4d.sourceforge.net/
http://sourceforge.net/projects/log4d/

http://log4delphi.sourceforge.net/
http://sourceforge.net/projects/log4delphi

Leave a Comment

SystemRescueCd 救援系統用的 Live CD

網址:http://www.sysresccd.org/

提供下列工具程式

  • GParted
  • GNU Parted
  • PartImage
  • File Systems Tools
  • Ntfs3g
  • SFdisk
  • Test-disk
  • Network tools

還有包含其他未列出的工具程式請參考官方網站

Leave a Comment

  • 工商服務

    廣告讀取中...
  • 近期迴響

  • 標籤

  • 彙整