
Часть [1] - Часть [2]
31. Как в Edit1 написать Real`ную переменную и наоборот ?
32. Как имена полей БД записать в список ListBox или ComboBox ?
33. Как сделать нужную ячейку StringGrid активной ?
34. Как программно вырезать часть картинки ?
35. Как сделать фон формы в виде картинки ?
36. Как на форме оставить след от движения мыши ?
37. Как для каждого сотрудника в БД загрузить его фотографию ?
38. Как сделать ограничения на изменение размера формы ?
39. Как получить имя пользователя и организации ?
40. Как закрыть чужую программу ?
41. Можно ли создать свой собственный цвет форме или компоненту ?
42. Как запретить выполнение обработчика события, например, нажатия кнопки ?
43. Как вывести сообщение, используя данные введенные юзером ?
44. Как сделать разноязычный интерфейс программы ?
45. Как добавить программу в автозапуск Windows ?
46. Как извлечь иконку из чужой программы ?
47. Как сделать, чтобы при изменении цены или количества товара, сразу же...
48. Как вызвать Pop-Up меню не используя правую кнопку мыши ?
49. Как загрузить картинку в BLOB-поле и потом ее от туда извлечь?
50. Как сделать выравнивание по центру или правому краю в Edit ?
51. Как ассоциировать расширение файла с моей программой ?
52. Как получить содержимое ячейки DBGrid ?
53. Как получить имя файла без расширения ?
54. Как преобразовать BMP в JPEG и наоборот ?
55. Кaк мнe уcтaнoвить пpoгpaммнo зaдepжку для Hint ?
56. Как программно выключить компьютер ?
57. Как проверить нажатие функциональных клавиш ?
58. Как заставить нажаться TButton правой кнопкой мыши ?
59. Как получить координаты курсора мыши относительно формы ?
60. Как узнать и поменять разрешение экрана ?
Вопрос № 31: Как в Edit1 написать Real`ную переменную и наоборот ?
Ответ: Для это существуют функции FloatToStr и StrToFloat:
procedure TForm1.Button1Click(Sender: TObject);
Var A, B: Real;
begin
A:=4.5;
Edit1.Text:=FloatToStr(A);
B:=StrToFloat(Edit1.Text);
end;
|
Вопрос № 32: Как имена полей БД записать в список ListBox или ComboBox ?
Ответ:См. пример:
procedure TForm1.Button1Click(Sender: TObject);
Var I: Integer;
begin
ListBox1.Clear;
For I:=0 To Query1.FieldCount-1 Do
ListBox1.Items.Add(Query1.Fields[I].FieldName);
end;
|
Вопрос № 33: Как сделать нужную ячейку StringGrid активной ?
Ответ:Нужно просто задать строку и столбец сетки:
procedure TForm1.Button1Click(Sender: TObject);
begin
StringGrid1.Row:=1;
StringGrid1.Col:=2;
If StringGrid1.CanFocus Then StringGrid1.SetFocus;
end;
|
Вопрос № 34: Как программно вырезать часть картинки ?
Ответ:См. пример (немного грубоватый):
procedure TForm1.Button1Click(Sender: TObject);
Var JPG: TJPEGImage;
BMP: TBitmap;
begin
JPG:=TJPEGImage.Create;
BMP:=TBitmap.Create;
If OpenPictureDialog1.Execute Then
Begin
If ExtractFileExt(OpenPictureDialog1.FileName) = '.jpg' Then
Begin
JPG.LoadFromFile(OpenPictureDialog1.FileName);
BMP.Assign(JPG);
BMP.Width:=200;
BMP.Height:=150;
JPG.Assign(BMP);
JPG.SaveToFile('New_Picture.jpg');
End
Else
If ExtractFileExt(OpenPictureDialog1.FileName) = '.bmp' Then
Begin
BMP.LoadFromFile(OpenPictureDialog1.FileName);
BMP.Width:=200;
BMP.Height:=150;
BMP.SaveToFile('New_Picture.bmp');
End;
End;
JPG.Free;
BMP.Free;
end;
|
Вопрос № 35: Как у формы сделать фон в виде картинки ?
Ответ:См. 2 примера:
procedure TForm1.Button1Click(Sender: TObject);
Var BMP: TBitmap;
begin
BMP:=TBitmap.Create;
BMP.LoadFromFile('Picture.bmp');
Form1.Canvas.Brush.Bitmap:=BMP;
Form1.Canvas.FillRect(Rect(0, 0, Screen.Width, Screen.Height));
BMP.Free;
end;
procedure TForm1.Button2Click(Sender: TObject);
Var BMP: TBitmap;
begin
BMP:=TBitmap.Create;
BMP.LoadFromFile('Picture.bmp');
Form1.Canvas.Draw(0, 0, BMP);
BMP.Free;
end;
|
Вопрос № 36: Как на форме оставить след от движения мыши ?
Ответ:См. пример:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
If Shift = [ssLeft] Then
Begin
Form1.Canvas.LineTo(Mouse.CursorPos.X, Mouse.CursorPos.Y-20);
End;
end;
|
Вопрос № 37: Как для каждого сотрудника в БД загрузить его фотографию ?
Ответ: Для этого существуют так называемые Blob-поля. См. пример:
// Загружаем картинку в поле текущей записи
procedure TForm1.Button1Click(Sender: TObject);
begin
If OpenPictureDialog1.Execute Then
Begin
Table1.Edit;
TBLOBField(Table1.FieldByName('Photo')).LoadFromFile(OpenPictureDialog1.FileName);
End;
end;
// Очищаем поле с картинкой текущей записи
procedure TForm1.Button2Click(Sender: TObject);
begin
Table1.Edit;
TBLOBField(Table1.Fields[1]).Clear;
end;
|
Вопрос № 38: Как сделать ограничения на изменение размера формы ?
Ответ: Чтобы форме нельзя было изменить размер можно поиграть свойством BorderStyle и
обходить стороной значение bsSizeable. Либо написать свой обработчик события изменения размеров
формы. Но, не нужно забывать и о свойстве BorderIcon, в котором значению biMaximize нужно задать
значение False. См. пример:
procedure TForm1.FormResize(Sender: TObject);
begin
If (Form1.Width >= 100) OR (Form1.Width <= 100) OR
(Form1.Height >= 100) OR (Form1.Height <= 100)
Then
Begin
Form1.Width:=100;
Form1.Height:=100
End;
end;
|
Вопрос № 39: Как получить имя пользователя и организации ?
Ответ: Все эти значения можно найти в реестре по адресу:
HKEY_LOCAL_MACHINE\SoftWare\Microsoft\Windows\CurrentVersion
где,
RegisteredOrganization - Организация.
RegisteredOwner - Имя владельца.
А по адресу HKEY_LOCAL_MACHINE\System\Control\ComputerName\ComputerName
можно узнать имя компьютера, заданное при инсталляции Windows.
Вопрос № 40: Как закрыть чужую программу ?
Ответ: См. пример:
procedure TForm1.Button1Click(Sender: TObject);
Var H: HWND;
begin
H:=FindWindow(Nil, 'WinRar - WinRar');
If H <> 0 Then SendMessage(H, WM_CLOSE, 0, 0);
end;
|
Вопрос № 41: Можно ли создать свой собственный цвет форме или компоненту ?
Ответ: Вот небольшой рабочий пример:
procedure TForm1.Button1Click(Sender: TObject);
begin
Form1.Color:=RGB(StrToInt(Edit1.Text), StrToInt(Edit2.Text), StrToInt(Edit3.Text));
Label1.Color:=PaletteRGB(StrToInt(Edit1.Text), StrToInt(Edit2.Text), StrToInt(Edit3.Text));
end;
|
Вопрос № 42: Как запретить выполнение обработчика события, например, нажатия кнопки ?
Ответ: Например, вот так:
procedure TForm1.FormCreate(Sender: TObject);
begin
If Edit1.Text = '' Then Button1.OnClick:=Nil
Else Button1.OnClick:=Button1Click;
end;
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
If CheckBox1.Checked Then Button2.OnClick:=Nil
Else Button2.OnClick:=Button2Click;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(Button1.ClassName);
end;
|
Вопрос № 43: Как вывести сообщение, используя данные введенные юзером ?
Ответ: Здесь просто нужно строку преобразовать к типу PChar:
Application.MessageBox(PChar('Запись с номером ''' + edtCode.Text +
''' в базе уже существует !'),
'Ошибка:', MB_OK);
|
Вопрос № 44: Как сделать разноязычный интерфейс программы ?
Ответ: Для этого нужно создать текстовый INI-файлы со значениями, например, заголовков
компонентов, которые будут загружены при смене языка. Для примера создадим файл Russian.lng
и English.lng, примерно со следующим содержанием:
; Russian.lng
[Menu File]
mnuFile=Файл
mnuFileOpen=Открыть
mnuFileSave=Сохранить
mnuFileExit=Выход
[Menu Language]
mnuLanguage=Язык
mnuLanguageRus=Русский
mnuLanguageEng=Английский
[Menu Help]
mnuHelp=Справка
mnuGetHelp=Помощь
mnuAbout=О программе...
|
; English.lng
[Menu File]
mnuFile=File
mnuFileOpen=Open
mnuFileSave=Save
mnuFileExit=Exit
[Menu Language]
mnuLanguage=Language
mnuLanguageRus=Russian
mnuLanguageEng=English
[Menu Help]
mnuHelp=Help
mnuGetHelp=Help
mnuAbout=About...
|
// Русский интерфейс
procedure TForm1.mnuLanguageRusClick(Sender: TObject);
Var Ini: TIniFile;
begin
Ini:=TIniFile.Create(ExtractFilePath(Application.ExeName) + 'Russian.lng');
mnuFile.Caption:=Ini.ReadString('Menu File', 'mnuFile', 'Файл');
mnuFileOpen.Caption:=Ini.ReadString('Menu File', 'mnuFileOpen', 'Открыть');
mnuFileSave.Caption:=Ini.ReadString('Menu File', 'mnuFileSave', 'Сохранить');
mnuFileExit.Caption:=Ini.ReadString('Menu File', 'mnuFileExit', 'Выход');
mnuLanguage.Caption:=Ini.ReadString('Menu Language', 'mnuLanguage', 'Язык');
mnuLanguageRus.Caption:=Ini.ReadString('Menu Language', 'mnuLanguageRus', 'Русский');
mnuLanguageEng.Caption:=Ini.ReadString('Menu Language', 'mnuLanguageEng', 'Английский');
mnuHelp.Caption:=Ini.ReadString('Menu Help', 'mnuHelp', 'Справка');
mnuGetHelp.Caption:=Ini.ReadString('Menu Help', 'mnuGetHelp', 'Помощь');
mnuAbout.Caption:=Ini.ReadString('Menu Help', 'mnuAbout', 'О программе...');
Ini.Free;
end;
// Английский интерфейс
procedure TForm1.mnuLanguageEngClick(Sender: TObject);
Var Ini: TIniFile;
begin
Ini:=TIniFile.Create(ExtractFilePath(Application.ExeName) + 'English.lng');
mnuFile.Caption:=Ini.ReadString('Menu File', 'mnuFile', 'File');
mnuFileOpen.Caption:=Ini.ReadString('Menu File', 'mnuFileOpen', 'Open');
mnuFileSave.Caption:=Ini.ReadString('Menu File', 'mnuFileSave', 'Save');
mnuFileExit.Caption:=Ini.ReadString('Menu File', 'mnuFileExit', 'Exit');
mnuLanguage.Caption:=Ini.ReadString('Menu Language', 'mnuLanguage', 'Language');
mnuLanguageRus.Caption:=Ini.ReadString('Menu Language', 'mnuLanguageRus', 'Russian');
mnuLanguageEng.Caption:=Ini.ReadString('Menu Language', 'mnuLanguageEng', 'English');
mnuHelp.Caption:=Ini.ReadString('Menu Help', 'mnuHelp', 'Help');
mnuGetHelp.Caption:=Ini.ReadString('Menu Help', 'mnuGetHelp', 'Help');
mnuAbout.Caption:=Ini.ReadString('Menu Help', 'mnuAbout', 'About...');
Ini.Free;
end;
|
Вопрос № 45: Как добавить программу в автозапуск Windows ?
Ответ:См. пример:
...
Var Reg : TRegistry;
RegPath : String;
begin
Reg:=TRegIniFile.Create;
Reg.RootKey:=HKEY_LOCAL_MACHINE;
RegPath:='\Software\Microsoft\Windows\CurrentVersion\Run';
If Reg.OpenKey(RegPath, False) Then
If Reg.ReadString(RegPath) = ''
Then Reg.WriteString('ProgName', ExtractFilePath(Application.ExeName) + 'ProgName');
Reg.Free;
end;
|
Вопрос № 46: Как извлечь иконку из чужой программы ?
Ответ:См. пример:
...
Var HIco : HIcon;
TIco : TIcon;
I : Integer;
begin
I:=0;
Repeat
HIco:=ExtractIcon(Handle, PChar(OpenDialog1.FileName), I);
If HIco > 0 Then
Begin
TIco.Handle:=HIco;
TIco.SaveToFile(IntTostr(I) + '.ico');
Inc(I);
End;
Until HIco = 0;
end;
|
Вопрос № 47: Как сделать, чтобы при изменении цены или количества товара, сразу же пересчитывалась итоговая сумма ?
Ответ:Нужно отслеживать обработчик события нажатия клавиш сетки DBGrid:
procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
Table1.Edit;
Table1.FieldByName('Itogo').AsFloat:=
Table1.FieldByName('Cena').AsFloat * Table1.FieldByName('Kol_Vo').AsFloat;
end;
|
Вопрос № 48: Как вызвать Pop-Up меню не используя правую кнопку мыши ?
Ответ: Используйте метод Popup(X, Y):
procedure TForm1.Button1Click(Sender: TObject);
begin
PopupMenu1.Popup(100, 50);
end;
|
Вопрос № 49: Как загрузить картинку в BLOB-поле и потом ее от туда извлечь?
Ответ:См. пример:
// Загружаем картинку
procedure TForm1.Button1Click(Sender: TObject);
begin
If OpenPictureDialog1.Execute Then
Begin
Table1.Edit;
TBLOBField(Table1.FieldByName('gr')).LoadFromFile(OpenPictureDialog1.FileName);
End;
end;
// Сохраняем картинку
procedure TForm1.Button1Click(Sender: TObject);
begin
If SavePictureDialog1.Execute
Then TBLOBField(Table1.FieldByName('gr')).SaveToFile(SaveDialog1.FileName);
end;
|
Вопрос № 50: Как сделать выравнивание по центру или правому краю в Edit ?
Ответ: Можно использовать Memo, но предватирельно запретить нажатия клавиш управления
курсором вверх (#38), вниз (#40), Enter.
procedure TForm1.FormCreate(Sender: TObject);
begin
Memo1.Clear;
Memo1.Alignment:=taCenter;
end;
procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
begin
If Key In [#13] Then Key:=#0;
end;
procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
If Key In [38, 40] Then Key:=0;
end;
|
Вопрос № 51: Как ассоциировать расширение файла с моей программой ?
Ответ: См. пример:
procedure TForm1.FormCreate(Sender: TObject);
Var I : Integer;
NameFile : String;
begin
Try
// Загружаем выбранный файл в редактор
If ParamCount > 0 Then
For I:=1 To ParamCount Do NameFile:=ParamStr(I);
If NameFile <> '' Then Memo1.Lines.LoadFromFile(NameFile);
Except
End;
end;
procedure TForm1.Button1Click(Sender: TObject);
Var Reg : TRegistry;
begin
Reg:=TRegIniFile.Create;
Reg.RootKey:=HKEY_CLASSES_ROOT;
If NOT Reg.KeyExists('.ttt') Then Reg.CreateKey('.ttt');
If Reg.OpenKey('.ttt', False) Then
Begin
Reg.WriteString('', 'ttt_text_file');
Reg.CloseKey;
End;
If NOT Reg.KeyExists('ttt_text_file') Then
Begin
Reg.CreateKey('ttt_text_file');
If Reg.OpenKey('ttt_text_file', False)
Then Reg.WriteString('', 'Файл TTT');
Reg.CloseKey;
End;
If NOT Reg.KeyExists('ttt_text_file\shell') Then
Begin
Reg.CreateKey('ttt_text_file\shell');
Reg.CloseKey;
End;
If NOT Reg.KeyExists('ttt_text_file\shell\open') Then
Begin
Reg.CreateKey('ttt_text_file\shell\open');
If Reg.OpenKey('ttt_text_file\shell\open', False)
Then Reg.WriteString('', '');
Reg.CloseKey;
End;
If NOT Reg.KeyExists('ttt_text_file\shell\open\command') Then
Begin
Reg.CreateKey('ttt_text_file\shell\open\command');
If Reg.OpenKey('ttt_text_file\shell\open\command', False)
Then Reg.WriteString('', Application.ExeName + ' "%1"');
Reg.CloseKey;
End;
Reg.Free;
end;
|
Вопрос № 52: Как получить содержимое ячейки DBGrid ?
Ответ:Например, вот так:
procedure TForm1.Button1Click(Sender: TObject);
begin
Button1.Caption:=DBGrid1.Columns.Grid.SelectedField.Text;
end;
|
Вопрос № 53: Как получить имя файла без расширения ?
Ответ: См. пример:
procedure TForm1.Button1Click(Sender: TObject);
Var J : Integer;
FName : String;
begin
Repeat
Inc(J);
If ExtractFileName(OpenDialog1.FileName)[J] <> '.' Then
FName:=FName + ExtractFileName(OpenDialog1.FileName)[J];
Until (Length(ExtractFileName(OpenDialog1.FileName))= 0) OR
(ExtractFileName(OpenDialog1.FileName)[J] = '.');
end;
|
Вопрос № 54: Как преобразовать BMP в JPEG и наоборот ?
Ответ:См. пример:
procedure TForm1.Button2Click(Sender: TObject);
Var BMP: TBitmap;
JPG: TJPEGImage;
begin
BMP:=TBitmap.Create;
JPG:=TJPEGImage.Create;
// Преобразование BMP в JPG
BMP.LoadFromFile('Picture.bmp');
JPG.Assign(BMP);
JPG.SaveToFile('C:\Pic_JPG.jpg');
// Преобразование JPG в BMP
JPG.LoadFromFile('Picture.jpg');
BMP.Assign(JPG);
BMP.SaveToFile('C:\Pic_BMP.bmp');
JPG.Free;
BMP.Free;
end;
|
Вопрос № 55: Кaк мнe уcтaнoвить пpoгpaммнo зaдepжку для Hint ?
Ответ:Вот так:
Application.HintHidePause:=5000;
// А так можно регулировать время появления подсказки
Application.HintPause:=1000;
|
Вопрос № 56: Как программно выключить компьютер ?
Ответ:См. пример:
procedure TForm1.Button1Click(Sender: TObject);
begin
ExitWindowsEx(EWX_SHUTDOWN, 1);
// А так перезугрузить
ExitWindowsEx(EWX_REBOOT, 1);
end;
|
Вопрос № 57: Как проверить нажатие функциональных клавиш ?
Ответ: Для этого существует функция GetKeyState, которая возвращает 1 если функциональная
кнопка нажата и 0, если функциональная кнопка не нажата.
...
Application.OnIdle:=IdleProc;
...
procedure IdleProc;
Begin
If GetKeyState(VK_NUMLOCK) = 1 Then Labe1.Caption:='NumLock'
Else
If GetKeyState(VK_CAPITAL)=1 Then Labe1.Caption:='CapsLock'
Else
If GetKeyState(VK_SCROLL)=1 Then Labe1.Caption:='ScrollLock';
Done:=False;
End;
|
Вопрос № 58: Как заставить нажаться TButton правой кнопкой мыши ?
Ответ:См. пример:
procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
If Button = mbRight Then Button1Click(Sender);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage('Вы нажали одну из кнопок мыши !!!');
end;
|
Вопрос № 59: Как получить координаты курсора мыши относительно формы ?
Ответ: См. пример:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Caption:=IntToStr(Mouse.CursorPos.X) + '/' + IntToStr(Mouse.CursorPos.Y)
end;
|
Вопрос № 60: Как узнать и поменять разрешение экрана ?
Ответ: Как поменять я пока не знаю, а вот узнать можно так:
...
Form1.Caption:=IntToStr(Screen.Width) + '/' + IntToStr(Screen.Height);
...
|
Вернуться в оглавление
Вернуться на главную страницу
|