史萊姆論壇

返回   史萊姆論壇 > 專業主討論區 > 程式語言討論區
忘記密碼?
論壇說明

歡迎您來到『史萊姆論壇』 ^___^

您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的!

請點擊這裡:『註冊成為我們的一份子!』

Google 提供的廣告


發文 回覆
 
主題工具 顯示模式
舊 2014-02-07, 08:54 PM   #1
魔術王子
版區管理員
 
魔術王子 的頭像
榮譽勳章
UID - 115097
在線等級: 級別:42 | 在線時長:1993小時 | 升級還需:28小時級別:42 | 在線時長:1993小時 | 升級還需:28小時
註冊日期: 2004-01-13
住址: 魔術學園
文章: 2989
精華: 0
現金: 14967 金幣
資產: 2678597 金幣
預設 程式 - [使用版本C++ Builder 6]在桌面建立程式捷徑

感覺上在桌面建立捷徑以及儲存INI檔似乎是相當受歡迎的技巧
所以這次小弟順便將C++ Builder建立捷徑跟建立INI檔的程式分享出來
不過程式還包含設計小時鐘還有在Image元件上來拖曳表單
https://imagizer.imageshack.us/v2/1073x704q90/855/jleq.jpg
引用:
作者: 程式碼
//---------------------------------------------------------------------------

#include <shlobj.h>
#define NO_WIN32_LEAN_AND_MEAN // 擺在這個位置, 就一定Complier OK
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "math.h"
#include "stdlib.h"
#include <Clipbrd.hpp>
#include "inifiles.hpp" //要 include 這個東西才有 TIniFile 類別
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
LPITEMIDLIST DesktopPidl;
char DesktopDir[MAX_PATH];
char sysDir[MAX_PATH];
//將系統路徑填入此字元陣列中
::GetSystemDirectory(sysDir, sizeof(sysDir));
HRESULT hres;
IShellLink* psl;
//取得 IShellLink 介面的指標
hres = CoCreateInstance(CLSID_ShellLink, NULL,
CLSCTX_INPROC_SERVER,
IID_IShellLink, (void**)(&psl));
LPMALLOC ShellMalloc;
// LPITEMIDLIST DesktopPidl;
// char DesktopDir[MAX_PATH];

if(FAILED(SHGetMalloc(&ShellMalloc)))
return;

if(FAILED(SHGetSpecialFolderLocation(NULL,
CSIDL_DESKTOPDIRECTORY,
&DesktopPidl)))
return;

if(!SHGetPathFromIDList(DesktopPidl, DesktopDir))
{
ShellMalloc->Free(DesktopPidl);
ShellMalloc->Release();
return;
}

ShellMalloc->Free(DesktopPidl);
ShellMalloc->Release();

//若成功取得,則進行 IShellLink 各項資料設定
if(SUCCEEDED(hres))
{
//取得 IPersistFile 介面的指標
IPersistFile* ppf;
hres = psl->QueryInterface(IID_IPersistFile, (void**)(&ppf));
//若成功取得,則進行 IShellLink 各項資料設定
if(SUCCEEDED(hres))
{
//此範例連接檔的路徑,即是此執行檔路徑
hres = psl->SetPath(Application->ExeName.c_str());
//此範例連接檔的路徑,即是此執行檔工作路徑
hres = psl->SetWorkingDirectory(ExtractFileDir(Application->ExeName).c_str());
//設定此連接檔的類型
hres = psl->SetDescription("C_ShellLink");
//設定此連接檔放置何處,本範例的連接檔放置在桌面上
WideString strShortCutLocation(DesktopDir);
strShortCutLocation += "\\C_ShellLink.lnk";
hres = ppf->Save(strShortCutLocation.c_bstr(), TRUE);
//hres = ppf->Save(WideString(DesktopDir+"\\C_ShellLink.lnk"), true);
//完成後,將IPersistFile介面釋放
ppf->Release();
}
//完成後,將IShellLink介面釋放
}
psl->Release();
Button1->Enabled=false;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
BorderStyle=bsNone;
Width=200; //若系統不是WIndows 7請移除本段程式碼
LPITEMIDLIST DesktopPidl;
char DesktopDir[MAX_PATH];
RECT rec;
HWND hwnd;
hwnd=::FindWindow("Shell_TrayWnd",NULL);
::GetWindowRect(hwnd,&rec);
Top=rec.top-Height;
Left=rec.right-Width;
if(FileExists(ChangeFileExt( Application->ExeName, ".ini" ))){
Button2->Caption="取消INI檔";
TIniFile *MyIni;
MyIni = new TIniFile(ChangeFileExt( Application->ExeName, ".ini" ) );
Top=MyIni->ReadInteger("Option","Top",Top);
Left=MyIni->ReadInteger("Option","Left",Left);
delete MyIni;
}
if(FAILED(SHGetSpecialFolderLocation(NULL,CSIDL_DESKTOPDIRECTORY,&DesktopPidl))) return; //CSIDL_LOCAL_APPDATA
SHGetPathFromIDList(DesktopPidl, DesktopDir);
if(FileExists((AnsiString(DesktopDir)+"\\C_ShellLink.lnk").c_str())) Button1->Enabled=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
if(FileExists(ChangeFileExt( Application->ExeName, ".ini" ))){
Button2->Caption="儲存INI檔";
DeleteFile(ChangeFileExt( Application->ExeName, ".ini" ));
} else {
Button2->Caption="取消INI檔";
TIniFile *MyIni;
MyIni = new TIniFile(ChangeFileExt( Application->ExeName, ".ini" ) );
MyIni->WriteInteger( "Option","Top",Top);
MyIni->WriteInteger( "Option","Left",Left);
delete MyIni;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
if(FileExists(ChangeFileExt( Application->ExeName, ".ini" ))){
TIniFile *MyIni;
MyIni = new TIniFile(ChangeFileExt( Application->ExeName, ".ini" ) );
MyIni->WriteInteger( "Option","Top",Top);
MyIni->WriteInteger( "Option","Left",Left);
delete MyIni;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
int x,y,hr,min,sec;
float j;
x=Image1->Width/2;
y=Image1->Height/2;
Image1->Canvas->Pen->Color=clBlack;
Image1->Canvas->Pen->Width=2;
Image1->Canvas->Ellipse(0,0,Image1->Width,Image1->Height);
for(int i=0;i<60;i=i+5){
j=-1.57+3.14*i/30;
if (i==0||i==15||i==30||i==45){
Image1->Canvas->Pen->Width=2;
Image1->Canvas->MoveTo(x+cos(j)*85,y+sin(j)*85);
Image1->Canvas->LineTo(x+cos(j)*98,y+sin(j)*98);
} else {
Image1->Canvas->Pen->Width=1;
Image1->Canvas->MoveTo(x+cos(j)*90,y+sin(j)*90);
Image1->Canvas->LineTo(x+cos(j)*98,y+sin(j)*98);
}
if (i==0) Image1->Canvas->TextOut((x+cos(j)*80)-5,(y+sin(j)*80)-5,"12");
else Image1->Canvas->TextOut((x+cos(j)*80)-5,(y+sin(j)*80)-5,i/5);
}
Image1->Canvas->Pen->Color=clBlue;
min=TimeToStr(Time()).SubString(9,2).ToInt();
j=-1.57+3.14*min/30;
Image1->Canvas->Pen->Width=4;
Image1->Canvas->MoveTo(x,y);
Image1->Canvas->LineTo(x+cos(j)*70,y+sin(j)*70);
hr=TimeToStr(Time()).SubString(6,2).ToInt();
// j=-1.57+3.14*(hr*5)/30;
j=-1.57+3.14*hr/6+(3.14/360*min);
Image1->Canvas->Pen->Width=7;
Image1->Canvas->MoveTo(x,y);
Image1->Canvas->LineTo(x+cos(j)*55,y+sin(j)*55);

Image1->Canvas->Pen->Color=clRed;
sec=TimeToStr(Time()).SubString(12,2).ToInt();
j=-1.57+3.14*sec/30;
Image1->Canvas->Pen->Width=3;
Image1->Canvas->MoveTo(x,y);
Image1->Canvas->LineTo(x+cos(j)*80,y+sin(j)*80);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Image1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
if(Button==mbLeft){
::ReleaseCapture();
SNDMSG(Handle,WM_SYSCOMMAND,SC_MOVE+HTCAPTION,0);
}
}
//---------------------------------------------------------------------------
魔術王子 目前離線  
送花文章: 1530, 收花文章: 1555 篇, 收花: 3894 次
回覆時引用此帖
發文 回覆



發表規則
不可以發文
不可以回覆主題
不可以上傳附加檔案
不可以編輯您的文章

論壇啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用

相似的主題
主題 主題作者 討論區 回覆 最後發表
Delphi/C builder 語系修改(瞞天過海) 丹楓 軟體中文化討論區 3 2005-02-06 11:59 PM
問Muiltimedia Builder的問題 ? jason522 一般電腦疑難討論區 5 2003-07-23 10:45 PM
請問Multimedia Builder的問題!!!? jason522 一般電腦疑難討論區 3 2003-06-30 06:20 PM
請問,誰有Screen Saver Builder v3.22的中文化 wilson1964 一般電腦疑難討論區 0 2003-05-09 03:16 AM
karaoke builder nicegood 一般電腦疑難討論區 0 2003-04-11 11:35 AM


所有時間均為台北時間。現在的時間是 06:15 AM


Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.


SEO by vBSEO 3.6.1