Ваш цикл foreach может быть немного проще и производить то, что вы хотите
echo "<h1>Topics</h1>";
$sql = "SELECT * FROM categories WHERE parent = 1";
$result = $db -> getRows($sql,[]);
$numrows = $db -> getrows("SELECT count(*) FROM stories",[]);
if($numrows == 0) {
echo "<p>No categories</p>";
} else {
foreach($result as $row){
echo $row['category'] . "\n";
}
}
Звуки хорошо, но как Drejc указали, панель задач может появиться где угодно, так также могли дополнительные прикрепленные боковые панели как Google Desktop, Winamp, и т.д.
Вместо этого, возможно, используйте что-то как Экран. WorkAreaRect для получения клиентской области экрана. Например.
with Screen.WorkAreaRect do
Form1.SetBounds(Left, Top, Right - Left, Bottom - Top);
Одна дополнительная подсказка. Панель задач может также быть расположена справа или левые экрана (не только вершина и нижняя часть). Таким образом, необходимо дополнительно выяснить, где панель задач.
Я предложил бы, чтобы Вы изучили реализацию Delphi SetWidnowState. В Delphi7 это - эта часть кода:
procedure TCustomForm.SetWindowState(Value: TWindowState);
const
ShowCommands: array[TWindowState] of Integer =
(SW_SHOWNORMAL, SW_MINIMIZE, SW_SHOWMAXIMIZED);
begin
if FWindowState <> Value then
begin
FWindowState := Value;
if not (csDesigning in ComponentState) and Showing then
ShowWindow(Handle, ShowCommands[Value]);
end;
end;
ShowWindow является вызовом библиотеки Win32:
function ShowWindow; external user32 name 'ShowWindow';
где user32 = 'user32.dll'; если я не путаю. Поэтому выройте в эту библиотеку, возможно, существует некоторая информация TaskBar где-нибудь.