كيف اجعل الفورم في المقدمة
#1
بسم الله الرحمن الرحيم

كيف اجعل الفورم في المقدمة البرامج يعني يضهر وانا اعمل على برامجي واناالأن انتهيت منه بس احاول ايجاد طريقة اجعله في مقدمة البرامج لكي اشاهد برنامجي وانا اتصفح على الأنترنت
الرد
#2
السلام عليكم
كود :
FormStyle := fsStayOnTop;
أو API ابحث في المنتدى
بالتوفيق.
الرد
#3
طريقة جميله وجزاك الله الف خير
لكن للأسف ماتلبي الغرض
هل توجد طريقة افضل واقوى فاعليه؟؟
الرد
#4
طيب انا لدي كود فيجوال بيسك 6 وهو يجعل الفورم في المقدمة
لكن هل اقدر احول الكود واخليه يشتغل على الدلفي 7 ؟؟؟؟
الرد
#5
السلام عليكم
1-
إقتباس :'لكن للأسف ماتلبي الغرض'
, من أي ناحييه وضح ؟
2- 'أو API ابحث في المنتدى' , SetWindowPos
كود :
SetWindowPos(Handle, HWND_TOPMOST // HWND_TOP
                   , Form1.Top
                   , Form1.Left
                   , Form1.Width
                   , Form1.Height,0);
بالتوفيق,,
I'M Fly Like A G6

الرد
#6
شكرا اخي على الأكواد لكن الفورم لايضهر في المقدمة
الأن إذا فتحت انا إدارة المهام تضهر في الأمام و الفورم في الخلف وهنا تكمن المشكلة Confused
وفيه بعض البرنامج تظهر بالمقدمة
الرد
#7
طالع هذا المثال:
كود :
http://www.swissdelphicenter.ch/torry/showcode.php?id=261

function ForceForegroundWindow(hwnd: THandle): Boolean;
const
  SPI_GETFOREGROUNDLOCKTIMEOUT = $2000;
  SPI_SETFOREGROUNDLOCKTIMEOUT = $2001;
var
  ForegroundThreadID: DWORD;
  ThisThreadID: DWORD;
  timeout: DWORD;
begin
  if IsIconic(hwnd) then ShowWindow(hwnd, SW_RESTORE);

  if GetForegroundWindow = hwnd then Result := True
  else
  begin
    // Windows 98/2000 doesn't want to foreground a window when some other
    // window has keyboard focus

    if ((Win32Platform = VER_PLATFORM_WIN32_NT) and (Win32MajorVersion > 4)) or
      ((Win32Platform = VER_PLATFORM_WIN32_WINDOWS) and
      ((Win32MajorVersion > 4) or ((Win32MajorVersion = 4) and
      (Win32MinorVersion > 0)))) then
    begin
      // Code from Karl E. Peterson, www.mvps.org/vb/sample.htm
      // Converted to Delphi by Ray Lischner
      // Published in The Delphi Magazine 55, page 16

      Result := False;
      ForegroundThreadID := GetWindowThreadProcessID(GetForegroundWindow, nil);
      ThisThreadID := GetWindowThreadPRocessId(hwnd, nil);
      if AttachThreadInput(ThisThreadID, ForegroundThreadID, True) then
      begin
        BringWindowToTop(hwnd); // IE 5.5 related hack
        SetForegroundWindow(hwnd);
        AttachThreadInput(ThisThreadID, ForegroundThreadID, False);
        Result := (GetForegroundWindow = hwnd);
      end;
      if not Result then
      begin
        // Code by Daniel P. Stasinski
        SystemParametersInfo(SPI_GETFOREGROUNDLOCKTIMEOUT, 0, @timeout, 0);
        SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, TObject(0),
          SPIF_SENDCHANGE);
        BringWindowToTop(hwnd); // IE 5.5 related hack
        SetForegroundWindow(hWnd);
        SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, TObject(timeout), SPIF_SENDCHANGE);
      end;
    end
    else
    begin
      BringWindowToTop(hwnd); // IE 5.5 related hack
      SetForegroundWindow(hwnd);
    end;

    Result := (GetForegroundWindow = hwnd);
  end;
end; { ForceForegroundWindow }


// 2. Way:
//**********************************************

procedure ForceForegroundWindow(hwnd: THandle);
  // (W) 2001 Daniel Rolf
  // http://www.finecode.de
  // rolf@finecode.de
var
  hlp: TForm;
begin
  hlp := TForm.Create(nil);
  try
    hlp.BorderStyle := bsNone;
    hlp.SetBounds(0, 0, 1, 1);
    hlp.FormStyle := fsStayOnTop;
    hlp.Show;
    mouse_event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
    mouse_event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
    SetForegroundWindow(hwnd);
  finally
    hlp.Free;
  end;
end;

// 3. Way:
//**********************************************
// by Thomas Stutz

{
  As far as you know the SetForegroundWindow function on Windows 98/2000 can
  not force a window to the foreground while the user is working with another window.
  Instead, SetForegroundWindow will activate the window and call the FlashWindowEx
  function to notify the user. However in some kind of applications it is necessary
  to make another window active and put the thread that created this window into the
  foreground and of course, you can do it using one more undocumented function from
  the USER32.DLL.

  void SwitchToThisWindow (HWND hWnd,  // Handle to the window that should be activated
  BOOL bRestore // Restore the window if it is minimized
);

}

procedure SwitchToThisWindow(h1: hWnd; x: bool); stdcall;
  external user32 Name 'SwitchToThisWindow';
         {x = false: Size unchanged, x = true: normal size}


procedure TForm1.Button2Click(Sender: TObject);
begin
  SwitchToThisWindow(FindWindow('notepad', nil), True);
end;
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم