2013-04-23 10 views
-1

웹에서 사용할 수있는이 질문에 대한 다른 설명을 사용하여 Delphi 10 Lite에서 스크린 세이버를 만들었습니다. 이제 화면 보호기가 제대로 작동하지만 화면 보호기 설정 대화 상자에서 작업 미리보기가 제대로 작동하지 않습니다. 그것을 어떻게 만들 수 있습니까? 이 설명을 읽었습니다 : how to make a screen saver preview in Delphi? 하지만 좀 더 구체적이고, 예를 들어 싶습니다. Windows 7 Ultimate SP1을 사용하고 있습니다. 감사합니다. .델파이에서 스크린 세이버 미리보기를 만듭니다.

+1

방법 화면 보호기가 정확히 구현 되었습니까? – OnTheFly

+2

다른 질문에 대한 지침이 명확하지 않은 이유는 무엇입니까? 'HWND'를 입력으로 받아들이려면'/ p' 명령 행 인자를 구현해야합니다. 제공된다면 스크린 세이버의 UI를위한 부모 윈도우로'HWND'를 사용하여 스크린 세이버를 정상적으로 렌더링 할 수 있습니다. 그렇지 않으면 부모 윈도우로 자신 만의 전체 화면'HWND'를 만듭니다. –

+2

Delphi 10 Lite와 같은 것은 없습니다. 델파이의 어떤 버전을 사용하고 계십니까? –

답변

4

엠바 카데로 사이트는 정상적인 실행 (실행), 미리보기, 암호 설정 등을 포함하는 완벽한 기능의 화면 보호기 샘플을 제공합니다. 이 기사를 사용해보십시오 Random Images Screen Saver - a complete screen saver example, 소스 코드는 here에서 다운로드 할 수 있습니다.

+0

무슨 일이 일어나고 있는지 모르겠지만 소스 코드를 제대로 열 수 없습니다 : 다른 오류 메시지가 나타납니다. 이제 웹 사이트에서 유용한 것을 찾을 수 있는지 살펴 보겠습니다. 어쨌든 고맙습니다. –

+0

@ LaszloBalazs - 확인합니다. 평소처럼 Embarcadero 사이트가 손상되었습니다 (연결 시간이 초과되었습니다). – Ampere

+0

다른 링크 : http://cc.embarcadero.com/item/15504 – Ampere

0

가 여기에 내가 my little scrub screen saver test에 무슨 짓을했는지 (이 광택 수보다 하나 더 작동 방식을 볼 완료) :

WinHandle는/P 스위치 중 전달 된 창 ID입니다. 나는 스크린 세이버가 윈도우 핸들에서 작동하기 위해 스크린 세이버가 정의 된 텍스트를 여러 색상으로 정의 된 텍스트를 그 사이에 정의 된 지연으로 놓았다. 그래서 스크린 세이버 코드 자체를 복제 할 필요가 없었다. SS_Init은 화면 보호기의 일을 초기화하고, SS_Start는 한 걸음 씩, SS_End는 일을 마무리합니다. 여기

if program_state = Preview then // code before indicates /P was passed 
    begin 
    { spindle off messages until window is visible } 
    while not IsWindowVisible(WinHandle) do 
     Application.ProcessMessages; 
    { initialize and do screen saver draw } 
    start_time := WinMSSinceStart; // timeGetTime 
    SS_Init(WinHandle); 
    while IsWindowVisible(Winhandle) do 
     begin 
     if (WinMSSinceStart - Start_Time) >= config_rec.Delay then 
      begin 
      SS_Start(WinHandle); 
      start_time := WinMSSinceStart; 
      end; 
     Application.ProcessMessages; 
     sleep(10); 
     end; 
    SS_End(Winhandle); 
end; 

당신이 전달되는 창 핸들 (이 아니라 모든 일 (SS_Init에)에 그릴 수 TCanvas와 설정 방법 MyCanvas가이 코드에 맞춰 정의 속성이다.

작업이 완료되면
{ get window dimensions and set up TCanvas } 
    GetClientRect(WinHandle, WinRect); 
    MyCanvas := TCanvas.Create; 
    MyCanvas.Handle := GetDC(Winhandle); 

그런 다음 (이것은 내 모든 SS_End 기능이다). 도와 준다

ReleaseDC(WinHandle, MyCanvas.Handle); 
    MyCanvas.Free; 

희망

+0

고마워요, 제가 살펴보고 다시 올게요. –

관련 문제