Обзор программного кода
Каталог «Тематических Блогов Рунета»
Как перемещать форму за любой компонент в Delphi?
Код будет очень коротким. Прописываем для события MouseDown:
procedure TFMain.Image3MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
const sc_dragmove = $f012;
begin
releasecapture;
FMain.perform(wm_syscommand, sc_dragmove, 0);
end;Ну вот собственно и всё. Теперь за это изображение можно перетаскивать форму. Кстати, таким же способом можно перемещать по форме любой компонент. Только в этом случае нужно вместо FMain.perfom() нужно написать Имя_компонента.perfom(). Тогда этот компонент будет перемещаться мышкой по форме. Всё просто!
Как получить расширение файла
Опять же описываем функцию:
function GetFileFormat(St: string): string;
var
z: integer;
n: byte;
begin
for z := length(St) -1 downto 0 do
if (St[z] = '.') then
begin
n := z;
break;
end;
Delete(St, 1, n);
Result := St;
end;Т.е. здесь всё работает точно так же как и в первой нашей функции, только ограничения немножко другие.
Теперь выводим результат в Label:
Label1.Caption:=GetFileFormat(OpenPictureDialog1.FileName);Ну вот и всё. Тут даже и пояснений никаких не надо, всё предельно ясно! ;)
- - - - - - - - - -
Интересно почитать:
Как получить короткое имя файла
Как получить короткое имя файла без расширения
Как получить короткое имя файла без расширения
В предыдущем посте мы получили короткое имя файла, но с расширением. А что, если нам необходимо убрать расширение и получить только имя. Для этого напишем простенькую функцию, в которой будем использовать функцию из предыдущего поста:
function FileNameWithoutFormat(str: string): string;
var
z: Integer;
ind: Byte;
st: String;
begin
st := GetShortFileName(Str);
for z := length(st) - 1 downto 0 do
if (st[z] = '.') then
begin
ind := z;
break;
end;
Delete(st, ind, length(st));
Result := st;
end;Как Вы видите, мы работаем по тому же принципу. Только сначала мы обрезаем путь до имени файла с расширением, а затем уже работаем с полученной строкой, т.е. обрезаем её. Принцип такой: как только мы встречаем знак "."(точка), то мы прекращаем дальнейший перебор и обрезаем строку.
Вывод результата осуществляем по прежнему в Label:
Label1.Caption:=FileNameWithoutFormat(OpenPictureDialog1.FileName);В следующем посте поговорим о том, как получить расширение файла. Думаю, что многие уже сами смогут написать такую фугкцию. ;)
- - - - - - - - - -
Интересно почитать:
Как получить короткое имя файла
Как получить расширение файла
Как получить короткое имя файла
Вот описание самой функции:
function GetShortFileName(Str: string): string;
var
z: integer;
n: byte;
begin
for z := length(Str) -1 downto 0 do
if Str[z] = '\' then
begin
n := z;
break;
end;
Delete(Str, 1, n);
Result := Str;
end;Теперь нам необходимо вызвать эту функцию в нужном месте программы и внести в неё нужный параметр. Например, мы получаем короткое имя при открытии какого-нибудь файла (результат выводим в Label):
Label1.Caption:=GetShortFileName(OpenDialog1.FileName);Заметьте, что расширение у файла остаётся!
В следующем посте свяжем данную функцию с ещё одной, полезной и очень похожей на эту! ;)
- - - - - - - - - -
Интересно почитать:
Как получить короткое имя файла без расширения
Как получить расширение файла
Как вычислить объём ОЗУ
function GetRAM: Cardinal;
var
MS: TMemoryStatus;
begin
MS.dwLength := SizeOf(MS);
GlobalMemoryStatus(MS);
Result := Round(MS.dwTotalPhys / 1048576);
end;
Ну и теперь выводим результат функции на экран, а именно в Label:
Label1.Caption:=FloatToStr(GetRAM);
На этом всё! ;)
Как определить тактовую частоту процессора
Для начала описываем отдельно функцию:
function GetCPUSpeed: Double;
const
DelayTime = 500;
var
TimerHi, TimerLo: DWORD;
PriorityClass, Priority: Integer;
begin
PriorityClass := GetPriorityClass(GetCurrentProcess);
Priority := GetThreadPriority(GetCurrentThread);
SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_TIME_CRITICAL);
Sleep(10);
asm
dw 310Fh
mov TimerLo, eax
mov TimerHi, edx
end;
Sleep(DelayTime);
asm
dw 310Fh
sub eax, TimerLo
sbb edx, TimerHi
mov TimerLo, eax
mov TimerHi, edx
end;
SetThreadPriority(GetCurrentThread, Priority);
SetPriorityClass(GetCurrentProcess, PriorityClass);
Result := TimerLo/(1000.0 * DelayTime);
end;Как Вы видите помимо функций WinAPI мы ещё используем и ассемблеровский код. Затем на необходимо вывести значение функции. Будем выводит, например, в Label:
Label1.Caption:=FloatToStr(GetCPUSpeed);Вот и всё. Таким образом Вы получите тактовую чистоту Вашего процессора. Можете использовать какую-нибудь функцию для округления значения, поскольку значение выдаётся не в целом виде, а, например, 1717,209404. Ну и подберите единицу измерения (это будет MHz).
Начинаем работу
Всем привет!
Это первый пост данного и по традиции я напишу, что Вы сможете найти на страницах моего блога.
Если кто ещё не понял, то скажу, что речь будет идти о программировании. А именно будем рассматривать различные языки программирования, в частности, их функции, приёмы работы с ними, производить какой-то анализ и прочее. Вообщем будет достаточно интересно.
Пока что у меня в плане лежит рассмотрение следующих языков: Object Pascal, C++, C#, JavaScript, html, php, asm, lisp, prolog. Со временем перейдём и к другим языкам программирования.
Так что, друзья, подписывайтесь на обновления блога! Будет очень интересно! ;)
До встречи!