테스크 바 버튼 숨기기

APP/UI 2013. 4. 16. 16:47 |
 

테스크 바 버튼 숨기기

// ******************************************************* //
// 델파이 2006 이하
// ******************************************************* //

procedure TForm1.FormCreate(Sender: TObject);
begin
  ShowWindow(Application.Handle, SW_HIDE) ;
  SetWindowLong(Application.Handle, GWL_EXSTYLE, getWindowLong(Application.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW) ;
  ShowWindow(Application.Handle, SW_SHOW) ;
end;


// ******************************************************* //
// 델파이 2007 이상
// ******************************************************* //

// Menu->Project->View Source
program Project1;

uses
  Vcl.Forms,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := False;   // False로 설정
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

// Unit1.pas
procedure TForm1.FormActivate(Sender: TObject);
begin
  ShowWindow(Application.Handle, SW_HIDE);
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  ShowWindow(Application.Handle, SW_HIDE);
end;


Posted by ezmind
:

중복 실행 방지

APP 2012. 10. 23. 20:09 |
 

program Project1;

uses
  Forms,
  windows,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

var
  FMutexHandle: THandle;
  FMutexErrCode: integer;
begin
  FMutexHandle := CreateMutex(nil, TRUE, pchar('여기다 중복되지 않을 뮤텍스 이름을 지정한다') );
  FMutexErrCode := GetLastError;
  if FMutexHandle <> 0 then
  begin
    if FMutexErrCode = ERROR_ALREADY_EXISTS then
    begin
      CloseHandle(FMutexHandle);
      exit;
    end;
  end;

  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end;


'APP' 카테고리의 다른 글

Static 변수 사용하기  (0) 2012.10.23
TListView 스크롤바 없애기  (0) 2012.10.23
바탕화면, 즐겨찾기, 내 문서 등의 경로얻기  (0) 2012.10.23
GUID 생성  (0) 2012.10.23
현재 떠있는 모든 창 캡션 구하기  (0) 2012.10.23
Posted by ezmind
:

Static 변수 사용하기

APP 2012. 10. 23. 20:08 |
 
procedure TForm1.Button1Click(Sender: TObject);
const
{$J+}
  aaa: integer = 1;
{$J-}

begin
  caption := inttostr(aaa);
  aaa := aaa + 1;
end;


'APP' 카테고리의 다른 글

중복 실행 방지  (0) 2012.10.23
TListView 스크롤바 없애기  (0) 2012.10.23
바탕화면, 즐겨찾기, 내 문서 등의 경로얻기  (0) 2012.10.23
GUID 생성  (0) 2012.10.23
현재 떠있는 모든 창 캡션 구하기  (0) 2012.10.23
Posted by ezmind
:

TListView 스크롤바 없애기

APP 2012. 10. 23. 20:08 |
 
type
  TForm1 = class(TForm)
    ListView1: TListView;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    FListViewWndProc: TWndMethod;
    procedure ListViewWndProc(var Msg: TMessage);
  public
   { Private declarations }
    FShowHoriz: Boolean;
    FShowVert: Boolean;
  end;
  
var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ListViewWndProc(var Msg: TMessage);
begin
  ShowScrollBar(ListView1.Handle, SB_HORZ, FShowHoriz);
  ShowScrollBar(ListView1.Handle, SB_VERT, FShowVert);
  FListViewWndProc(Msg); // process message
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  FShowHoriz := True; // show the horiz scrollbar
  FShowVert := False; // hide vert scrollbar
  FListViewWndProc := ListView1.WindowProc; // save old window proc
  ListView1.WindowProc := ListViewWndProc; // subclass
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  ListView1.WindowProc := FListViewWndProc; // restore window proc
  FListViewWndProc := nil;
end;


'APP' 카테고리의 다른 글

중복 실행 방지  (0) 2012.10.23
Static 변수 사용하기  (0) 2012.10.23
바탕화면, 즐겨찾기, 내 문서 등의 경로얻기  (0) 2012.10.23
GUID 생성  (0) 2012.10.23
현재 떠있는 모든 창 캡션 구하기  (0) 2012.10.23
Posted by ezmind
:
 
uses 
ShlObj, ActiveX;

{ 
This code shows the SelectDirectory dialog with additional expansions: 
- an edit box, where the user can type the path name, 
- also files can appear in the list, 
- a button to create new directories. 


Dieser Code zeigt den SelectDirectory-Dialog mit zusatzlichen Erweiterungen: 
- eine Edit-Box, wo der Benutzer den Verzeichnisnamen eingeben kann, 
- auch Dateien konnen in der Liste angezeigt werden, 
- eine Schaltflache zum Erstellen neuer Verzeichnisse. 
} 

function AdvSelectDirectory(const Caption: string; const Root: WideString; 
var Directory: string; EditBox: Boolean = False; ShowFiles: Boolean = False; 
AllowCreateDirs: Boolean = True): Boolean; 
// callback function that is called when the dialog has been initialized 
//or a new directory has been selected 

// Callback-Funktion, die aufgerufen wird, wenn der Dialog initialisiert oder 
//ein neues Verzeichnis selektiert wurde 
  function SelectDirCB(Wnd: HWND; uMsg: UINT; lParam, lpData: lParam): Integer; stdcall;
  var
    PathName: array[0..MAX_PATH] of Char;
  begin 
    case uMsg of
      BFFM_INITIALIZED: SendMessage(Wnd, BFFM_SETSELECTION, Ord(True), Integer(lpData));
      // include the following comment into your code if you want to react on the
      //event that is called when a new directory has been selected
      // binde den folgenden Kommentar in deinen Code ein, wenn du auf das Ereignis
      //reagieren willst, das aufgerufen wird, wenn ein neues Verzeichnis selektiert wurde
      {BFFM_SELCHANGED:
      begin
      SHGetPathFromIDList(PItemIDList(lParam), @PathName);
      // the directory "PathName" has been selected
      // das Verzeichnis "PathName" wurde selektiert
      end;}
    end; 
    Result := 0;
  end;
var 
  WindowList: Pointer;
  BrowseInfo: TBrowseInfo;
  Buffer: PChar;
  RootItemIDList, ItemIDList: PItemIDList;
  ShellMalloc: IMalloc;
  IDesktopFolder: IShellFolder;
  Eaten, Flags: LongWord;
const
  // necessary for some of the additional expansions
  // notwendig fur einige der zusatzlichen Erweiterungen
  BIF_USENEWUI = $0040;
  BIF_NOCREATEDIRS = $0200;
begin 
  Result := False;
  if not DirectoryExists(Directory) then 
    Directory := '';

  FillChar(BrowseInfo, SizeOf(BrowseInfo), 0); 
  if (ShGetMalloc(ShellMalloc) = S_OK) and (ShellMalloc <> nil) then 
  begin
    Buffer := ShellMalloc.Alloc(MAX_PATH);
    try
      RootItemIDList := nil;
      if Root <> '' then 
      begin 
        SHGetDesktopFolder(IDesktopFolder);
        IDesktopFolder.ParseDisplayName(Application.Handle, nil,
        POleStr(Root), Eaten, RootItemIDList, Flags);
      end; 

      OleInitialize(nil);

      with BrowseInfo do 
      begin 
        hwndOwner := Application.Handle;
        pidlRoot := RootItemIDList;
        pszDisplayName := Buffer;
        lpszTitle := PChar(Caption);
        // defines how the dialog will appear:
        // legt fest, wie der Dialog erscheint:
        ulFlags := BIF_RETURNONLYFSDIRS or BIF_USENEWUI or
        BIF_EDITBOX * Ord(EditBox) or BIF_BROWSEINCLUDEFILES * Ord(ShowFiles) or
        BIF_NOCREATEDIRS * Ord(not AllowCreateDirs);
        lpfn := @SelectDirCB;
        if Directory <> '' then
          lParam := Integer(PChar(Directory));
      end;

      WindowList := DisableTaskWindows(0);
      try
        ItemIDList := ShBrowseForFolder(BrowseInfo);
      finally
        EnableTaskWindows(WindowList);
      end;

      Result := ItemIDList <> nil;

      if Result then
      begin
        ShGetPathFromIDList(ItemIDList, Buffer);
        ShellMalloc.Free(ItemIDList);
        Directory := Buffer;
      end;
    finally 
      ShellMalloc.Free(Buffer);
    end;
  end;
end; 


// Example: 
procedure TForm1.Button1Click(Sender: TObject); 
var 
  dir: string;
begin
  AdvSelectDirectory('Caption', 'c:\', dir, False, False, True);
  Label1.Caption := dir;
end; 


'APP > 파일관련' 카테고리의 다른 글

SelectDirectory 원하는 위치에 띄우기  (0) 2012.10.23
폴더 복사,이동,삭제  (0) 2012.10.23
파일 버전 구하기  (0) 2012.10.23
부모풀더까지 한방에 만들기  (0) 2012.10.23
Posted by ezmind
:
 
uses Math, ShlObj, ActiveX;

function SelectDirectoryEx(const Caption: string; const Root: string;
  out Directory: string; AX, AY: Integer): Boolean;

  type
  PBFFRecord = ^TBFFRecord;

  TBFFRecord = record
  InitDir: PChar;
  X: Integer;
  Y: Integer;
  end;

var
  BFFR:TBFFRecord;
  IDList: PItemIDList;
  BrowseInfo: TBrowseInfo;
  Malloc:IMalloc;
  WindowList: Pointer;
  Buffer: PChar;


  function BrowseFolderProc(hWindow: HWND; uMsg: UINT; lParam: LPARAM;
    lpData: LPARAM): Integer; stdcall;
  var
    PathName: array[0..MAX_PATH] of Char;
    PBFFR:PBFFRecord;
    r: TRect;
    x, y, cx, cy, w, h: Integer;

  begin
    case uMsg of
      BFFM_INITIALIZED:
        begin
          PBFFR := Pointer(lpData);
          if lstrlen(PBFFR^.InitDir) > 1 then
            SendMessage(hWindow,BFFM_SETSELECTION, 1, Integer(PBFFR^.InitDir));

          cx := GetSystemMetrics(SM_CXSCREEN);
          cy := GetSystemMetrics(SM_CYSCREEN);
          GetWindowRect(hWindow, r);
          w := r.Right - r.Left;
          h := r.Bottom - r.Top;
          x := PBFFR^.X;
          y := PBFFR^.Y;

          if (x = 0) or (y = 0) then
          begin
            x := (cx - w) div 2;
            y := (cy - h) div 2;
          end;

          x := Max(Min(x, cx - w), 0);
          y := Max(Min(y, cy - h), 0);

          SetWindowPos(hWindow, 0, x, y, 0, 0, SWP_NOSIZE or SWP_NOZORDER);
        end;
      BFFM_SELCHANGED:
        begin
          SHGetPathFromIDList(PItemIDList(lParam), @PathName);
          SendMessage(hWindow, BFFM_SETSTATUSTEXT, 0, LongInt(PChar(@PathName)));
        end;
    end;
    Result := 0;
  end;
begin
  Result := False;
  Directory := '';
  BFFR.InitDir := PChar(Root);
  BFFR.X := AX;
  BFFR.Y := AY;
  FillChar(BrowseInfo, SizeOf(BrowseInfo), 0);

  if (ShGetMalloc(Malloc) = S_OK) and (Malloc <> nil) then
  begin
  Buffer := Malloc.Alloc(MAX_PATH);
  try
    with BrowseInfo do
    begin
      hwndOwner := Application.Handle;
      pidlRoot := nil;
      pszDisplayName := Buffer;
      lpszTitle := PChar(Caption);
      ulFlags := BIF_STATUSTEXT or BIF_RETURNONLYFSDIRS;
      lpfn := @BrowseFolderProc;
      lParam := Integer(@BFFR);
    end;
    WindowList := DisableTaskWindows(0);
    try
      IDList := ShBrowseForFolder(BrowseInfo);
    finally
      EnableTaskWindows(WindowList);
    end;
    Result := IDList <> nil;
    if Result then
    begin
      ShGetPathFromIDList(IDList, Buffer);
      Malloc.Free(IDList);
      Directory := Buffer;
    end;
    finally
      Malloc.Free(Buffer);
    end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  s: string;
begin
  if SelectDirectoryEx('폴더를 선택해 주세요', 'C:\Windows', s, 300, 300) then
  Label1.Caption := s;

  if SelectDirectoryEx('화면의 한가운데', 'C:\Windows', s, 0, 0) then
  Label1.Caption := s;


end;


'APP > 파일관련' 카테고리의 다른 글

SelectDirectory 확장  (0) 2012.10.23
폴더 복사,이동,삭제  (0) 2012.10.23
파일 버전 구하기  (0) 2012.10.23
부모풀더까지 한방에 만들기  (0) 2012.10.23
Posted by ezmind
:

GUID 생성

APP 2012. 10. 23. 20:05 |
 
uses
  ComObj, ActiveX;

function CreateGuid: string;
var
  ID: TGUID;
begin
  Result := '';
  if CoCreateGuid(ID) = S_OK then
    Result := GUIDToString(ID);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Edit1.Text := CreateGuid;
end;


Posted by ezmind
:
 
function EnumWindowProc( hWnd:HWND; lParam: LPARAM ):bool; stdcall;
var
  pid: DWORD;
  buf: string;
begin
  if (not IsWindow(hwnd)) or (not IsWindowVisible(hwnd)) then // || GetParent(hwnd)!=0)
  begin
    result := true;
    exit;
  end;

  GetWindowThreadProcessId(hwnd, @pid);
  if (pid = 0) then
  begin
    result := true;
    exit;
  end;

  SetLength( buf, 256 );
  GetWindowText(hwnd, pchar(buf), 256);
  if (buf = '') then
  begin
    result := true;
    exit;
  end;

  form1.Memo1.Lines.Add(buf)
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  EnumDesktopWindows(HDESK(0),@EnumWindowProc, 0);
end;


'APP' 카테고리의 다른 글

바탕화면, 즐겨찾기, 내 문서 등의 경로얻기  (0) 2012.10.23
GUID 생성  (0) 2012.10.23
파일명으로 아이콘 구하기  (0) 2012.10.23
TEXT 파일 제어  (0) 2012.10.23
클립보드  (0) 2012.10.23
Posted by ezmind
:
 

function GetFileIcon( FileName: String ): HICON;
var
  SHFileInfo: TSHFileInfo;
begin
  ShGetFileInfo( PChar( FileName ), 0, SHFileInfo, SizeOf( TSHFileInfo ), 
  	SHGFI_USEFILEATTRIBUTES or SHGFI_ICON or SHGFI_EXETYPE {or SHGFI_SMALLICON });
  Result := SHFileInfo.hIcon;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  AIcon: TIcon;
begin
  AIcon := TIcon.Create;
  try
    AIcon.Handle := GetFileIcon( 'C:\Program Files\Internet Explorer\iexplore.exe' );
    Image1.Picture.Assign( AIcon );
  finally
    AIcon.Free;
  end;
end;


'APP' 카테고리의 다른 글

GUID 생성  (0) 2012.10.23
현재 떠있는 모든 창 캡션 구하기  (0) 2012.10.23
TEXT 파일 제어  (0) 2012.10.23
클립보드  (0) 2012.10.23
프린트 스크린 키 눌렸는지 확인  (0) 2012.10.23
Posted by ezmind
:
 
uses
  ShellApi;

function CopyDir(const fromDir, toDir: string): Boolean;
var
  fos: TSHFileOpStruct;
begin
  ZeroMemory(@fos, SizeOf(fos));
  with fos do
  begin
    wFunc  := FO_COPY;
    fFlags := FOF_FILESONLY;
    pFrom  := PChar(fromDir + #0);
    pTo    := PChar(toDir)
  end;
  Result := (0 = ShFileOperation(fos));
end;


function MoveDir(const fromDir, toDir: string): Boolean;
var
  fos: TSHFileOpStruct;
begin
  ZeroMemory(@fos, SizeOf(fos));
  with fos do
  begin
    wFunc  := FO_MOVE;
    fFlags := FOF_FILESONLY;
    pFrom  := PChar(fromDir + #0);
    pTo    := PChar(toDir)
  end;
  Result := (0 = ShFileOperation(fos));
end;

function DelDir(dir: string): Boolean;
var
  fos: TSHFileOpStruct;
begin
  ZeroMemory(@fos, SizeOf(fos));
  with fos do
  begin
    wFunc  := FO_DELETE;
    fFlags := FOF_SILENT or FOF_NOCONFIRMATION;
    pFrom  := PChar(dir + #0);
  end;
  Result := (0 = ShFileOperation(fos));
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
  if cCopyDir('d:\download', 'e:\') = True then
    ShowMessage('Directory copied.');
end;


'APP > 파일관련' 카테고리의 다른 글

SelectDirectory 확장  (0) 2012.10.23
SelectDirectory 원하는 위치에 띄우기  (0) 2012.10.23
파일 버전 구하기  (0) 2012.10.23
부모풀더까지 한방에 만들기  (0) 2012.10.23
Posted by ezmind
: