Блог О пользователеviewcode

Регистрация

Обзор программного кода

 

Каталог «Тематических Блогов Рунета»


Друзья, на днях наткнулся на новый каталог, ещё не испорченный всяким Г… Так что вперёд на регистрацию. Я уже зарегился! =)

Каталог «Тематических Блогов Рунета»

 
Теги: каталоги
 
 

Как перемещать форму за любой компонент в 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);


Ну вот и всё. Тут даже и пояснений никаких не надо, всё предельно ясно! ;)

- - - - - - - - - -

Интересно почитать:

Как получить короткое имя файла
Как получить короткое имя файла без расширения

 
Теги: delphi
 
 

Как получить короткое имя файла без расширения


В предыдущем посте мы получили короткое имя файла, но с расширением. А что, если нам необходимо убрать расширение и получить только имя. Для этого напишем простенькую функцию, в которой будем использовать функцию из предыдущего поста:

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);


В следующем посте поговорим о том, как получить расширение файла. Думаю, что многие уже сами смогут написать такую фугкцию. ;)

- - - - - - - - - -

Интересно почитать:

Как получить короткое имя файла
Как получить расширение файла


 
Теги: delphi
 
 

Как получить короткое имя файла


Зачастую сталкивался с такой проблемой, поэтому решил написать как быстро и легко решить данную задачу. На самом деле всё достаточно просто, достаточно написать небольшую функцию с одним параметром. Грубо говоря, функция будет просто обрезать полный путь к файлу и оставлять только имя файла.

Вот описание самой функции:

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);


Заметьте, что расширение у файла остаётся!
В следующем посте свяжем данную функцию с ещё одной, полезной и очень похожей на эту! ;)

- - - - - - - - - -

Интересно почитать:

Как получить короткое имя файла без расширения
Как получить расширение файла

 
Теги: delphi
 
 

Как вычислить объём ОЗУ


Как и в предыдущем случае напишем для этого отедльную функцию (пример будет опять на Delphi):


function GetRAM: Cardinal;
var
  MS: TMemoryStatus;
begin
  MS.dwLength := SizeOf(MS);
  GlobalMemoryStatus(MS);
  Result := Round(MS.dwTotalPhys  / 1048576);
end;


Ну и теперь выводим результат функции на экран, а именно в Label:

Label1.Caption:=FloatToStr(GetRAM);


На этом всё! ;)

 
Теги: delphi
 
 

Как определить тактовую частоту процессора


Сегодня я расскажу Вам как определить тактовую частоту Вашего процессора. Пример приведён ниже на Delphi. Но думаю, что в C++ его будет несложно переделать (я имею в виду C++ Builder).

Для начала описываем отдельно функцию: 

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).

 
Теги: delphi
 
 

Начинаем работу


 
Всем привет!

Это первый пост данного блога и по традиции я напишу, что Вы сможете найти на страницах моего блога.

Если кто ещё не понял, то скажу, что речь будет идти о программировании. А именно будем рассматривать различные языки программирования, в частности, их функции, приёмы работы с ними, производить какой-то анализ и прочее. Вообщем будет достаточно интересно.

Пока что у меня в плане лежит рассмотрение следующих языков: Object Pascal, C++, C#, JavaScript, html, php, asm, lisp, prolog. Со временем перейдём и к другим языкам программирования.

Так что, друзья, подписывайтесь на обновления блога! Будет очень интересно! ;)

До встречи!


 
Теги: блог