PHP: uses windows; Function GetConsoleWindow: HWND; stdcall; external 'Kernel32.dll'; var hConsoleWindow: HWND; wndStyle:DWORD; clientRect:TRECT; begin hConsoleWindow:=GetConsoleWindow(); wndStyle:=GetWindowLong(hConsoleWindow, GWL_STYLE); wndStyle:=wndStyle or WS_SIZEBOX; ShowWindow(hConsoleWindow, SW_HIDE); SetWindowLong(hConsoleWindow, GWL_STYLE, wndStyle); ShowWindow(hConsoleWindow, SW_SHOW); ShowScrollBar(hConsoleWindow, SB_BOTH, false); GetClientRect(hConsoleWindow, clientRect); InvalidateRect(hConsoleWindow, @clientRect, true);
Чтобы полос прокрутки не было, надо размеры буфера экрана консоли правильно задать. А вообще, подобные манипуляции не предусмотрены для консольных приложений, и в частности для самого ConHost. Читайте матчасть: http://msdn.microsoft.com/ru-ru/library/windows/desktop/ms682055(v=vs.85).aspx http://msdn.microsoft.com/ru-ru/library/windows/desktop/ms682073(v=vs.85).aspx
хм, скомпилил у себя, ограничение размеров работает. Естественно, данный код ограничивает ресайз посредством передвижения мышью границ окна - но не ограничивает ресайз через окно "Свойства - Расположение". должно быть так: PHP: wndStyle := wndStyle and not WS_SIZEBOX; т.е. мы должны оставить все текущие стили, кроме WS_SIZEBOX. Насчет скроллинга - у меня отключение через ShowScrollBar срабатывает как-то через раз можно задать размер фреймбуфера равным размеру окна примерно так: Code: var // ... csbi : CONSOLE_SCREEN_BUFFER_INFO; newSizeInfo : COORD; begin // ... GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), @csbi); newSizeInfo.X = csbi.srWindow.Right - csbi.srWindow.Left + 1; newSizeInfo.Y = csbi.srWindow.Bottom - csbi.srWindow.Top + 1; if not SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), newSizeInfo) then begin raise Exception.Create('WinAPI Error ' + IntToStr(GetLastError)); end; end;
Спасибо всем, кто принимает участие, уже где-то недалеко от истины) В общем мне нужно задать размеры консольного окна, затем запретить изменение размера и убрать полосы прокрутки. И еще желательно, чтоб окно было в центре экрана. Еще раз всем спасибо за помощь. Запрет размера действительно работает, а вот полосы прокрутки все такие же)
В общем вроде бы все сработало) Спасибо всем, только когда сворачиваешь, прога исчезает из виду)) В диспетчере приложений отображается) Как-то так, это правильно или можно что-то добавить/выкинуть??: PHP: R.Right := 32; R.Bottom := 13; SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), Coord1); SetConsoleWindowInfo(GetStdHandle(STD_OUTPUT_HANDLE), True, R); SetConsoleTitle('...'); GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), csbi); newSizeInfo.X := csbi.srWindow.Right - csbi.srWindow.Left + 1; newSizeInfo.Y := csbi.srWindow.Bottom - csbi.srWindow.Top + 1; if not SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), newSizeInfo) then begin raise Exception.Create('WinAPI Error ' + IntToStr(GetLastError)); end; hConsoleWindow := GetConsoleWindow(); wndStyle := GetWindowLong(hConsoleWindow, GWL_STYLE); wndStyle := wndStyle and not WS_SIZEBOX; ShowWindow(hConsoleWindow, SW_HIDE); SetWindowLong(hConsoleWindow, GWL_STYLE, wndStyle); ShowWindow(hConsoleWindow, SW_SHOW); ShowScrollBar(hConsoleWindow, SB_BOTH, false); GetClientRect(hConsoleWindow, clientRect); InvalidateRect(hConsoleWindow, @clientRect, true); И чтоб при запуске была в центре экрана еще нужно)
Никто не поможет?) Еще системную кнопку max_size disable сделать) Сократил код до такого: PHP: R.Right := 32; R.Bottom := 13; SetConsoleWindowInfo(GetStdHandle(STD_OUTPUT_HANDLE), True, R); SetConsoleTitle('***'); GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), csbi); Coord.X := csbi.srWindow.Right - csbi.srWindow.Left + 1; Coord.Y := csbi.srWindow.Bottom - csbi.srWindow.Top + 1; SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), Coord); hConsoleWindow := GetConsoleWindow(); wndStyle := GetWindowLong(hConsoleWindow, GWL_STYLE); wndStyle := wndStyle and not WS_SIZEBOX; SetWindowLong(hConsoleWindow, GWL_STYLE, wndStyle); ShowScrollBar(hConsoleWindow, SB_BOTH, false); Вроде ничего не ухудшилось. Осталось размещение окна в центре экрана при запуске + disable (системная кнопка "Развернуть во весь экран) зы: И не помешал бы запрет выделения мышкой (внутри консольного окна)
Есть функция которая ищет на большом изображении другое поменьше. Где buf1, buf2 это массивы в которых вписаны цвета каждого пикселя изображения поочередно. buf2 это искомое изображение. Функция работает замечательно, но ищется всего 1 вхождение изображения. Подскажите как сделать чтобы находило все вхождения, то есть если на большом изображении 3 маленьких искомых чтобы он искал все? Code: function TForm1.CompareIMG(Source, Find: TBitmap): FRes; var y, x, yy, xx: integer; begin y := 0; repeat x := 0; repeat Result.found := true; yy := 0; repeat xx:=0; repeat if buf1[y + yy, x + xx] <> buf2[yy, xx] then Result.found := false; inc(xx); until (xx >= find.Width) or (Not Result.found); inc(yy); until (yy >= find.Height) or (Not Result.found); inc(x); until (x > source.Width - find.Width) or (Result.found); inc(y); until (y > source.Height - find.Height) or (Result.found); if Result.found then begin Result.x := x-1; Result.y := y-1; end; end;
Ку всем, такой вопрос, пытаюсь портировать с delphi старших версий (7) на delphi2, тут нет поддержки динамических массивов, конкретно интересует array of string возможно как-то реализовать? Спасибо При статическом происходит нехилая утечка памяти) Хотя статический массив наверно не выход. PHP: AssignFile(f, 'source.txt'); Reset(f); while not EOF(f) do begin inc(num); readln(f); end; Reset(f); SetLength(accounts, succ(num)); for k := 0 to num do readln(f, accounts[k]);
Будьте любезны, подскажите, создал некое количество потоков, они выполняются, пока не будет достигнуто конкретное решение, потоки созданы через BeginThread, вопрос: Как узнать количество работающих в данный момент потоков?
При создании каждого нового потока инкрементировать счетчик, что было в моем коде, который я тебе показывал. При завершении потока, соответственно декремент
Здравствуйте, как мне организовать передачу данных и вызов функций из моей программы и dll. Dll подгружена в чужом процессе и хукает пару функций.
Всем здравствуйте. Задача в следующем, давно хотел написать прогу для управления некой базой данных в обычном текстовом формате без сторонних библиотек. Теперь сижу и мучаюсь. Как осуществить поиск по одному значению не проблема. А Как осуществить поиск по нескольким значениям? То есть вбиваем в текстовые поля значения, проверяем, есть ли эти значения в строке, если есть, выводим.
Ну дык и пиши по щелчку Form1_Load и передавай нужные параметры з.ы.: может моя дельфя совершенно устарела, но я впервые слышу о событии Form1_Load