Есть ли в delphi эквивалент функции sendkeys visual basic’а


Содержание

Есть ли в delphi эквивалент функции sendkeys visual basic’а?

Как вставить содержимое файла в текущую позицию курсора в компонете TMemo?

Считайте файл в TMemoryStream, затем ипользуйте метод TMemo SetSelTextBuf() для вставки текста;

var TheMStream : TMemoryStream; Zero : char; begin TheMStream := TMemoryStream.Create; TheMStream.LoadFromFile(‘C:\AUTOEXEC.BAT’); TheMStream.Seek(0, soFromEnd); //Null terminate the buffer! Zero := #0; TheMStream.Write(Zero, 1); TheMStream.Seek(0, soFromBeginning); Memo1.SetSelTextBuf(TheMStream.Memory); TheMStream.Free; end;

Вопрос:

Как в компоненте TMemo перехватить нажатие Ctrl-V и вставить специальный текст не из буфера обмена (clipboard)?

uses ClipBrd; procedure TForm1.Memo1KeyDown (Sender: TObject; var Key: Word; Shift: TShiftState); begin if ((Key = ord(‘V’)) and (ssCtrl in Shift)) then begin if Clipboard.HasFormat(CF_TEXT) then ClipBoard.Clear; Memo1.SelText := ‘Delphi is RAD!’; key := 0; end; end;

Вопрос:

Как создать эквивалент TEdit но только с выравниваением вводимого текста по центру или по правой стороне?

TEdit не поддерживает выравниваение текста по центру и по правой стороне — лучше использовать компонент TMemo. Вам понадобится запретить пользователю нажимать Enter, Ctrl-Enter и всевозможные комбинации клавиш со стрелками, чтобы избежать появления нескольких сторк в Memo. Этого можно добиться и просматривая содержимое текста в TMemo в поисках кода возврата каретки (13) и перевода строки(10) на событиях TMemo Change и KeyPress. Можно также заменять код возврата каретки на пробел — для того чтобы позволять вставку из буфера обмена многострочного текста в виде одной строки.

procedure TForm1.FormCreate(Sender: TObject); begin Memo1.Alignment := taRightJustify; Memo1.MaxLength := 24; Memo1.WantReturns := false; Memo1.WordWrap := false; end; procedure MultiLineMemoToSingleLine(Memo : TMemo); var t : string; begin t := Memo.Text; if Pos(#13, t) > 0 then begin while Pos(#13, t) > 0 do delete(t, Pos(#13, t), 1); while Pos(#10, t) > 0 do delete(t, Pos(#10, t), 1); Memo.Text := t; end; end; procedure TForm1.Memo1Change(Sender: TObject); begin MultiLineMemoToSingleLine(Memo1); end; procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char); begin MultiLineMemoToSingleLine(Memo1); end;

Вопрос:

Как запрограммировать undo?

Memo1.Perform(EM_UNDO, 0, 0);
Если Вы хотите узнать, возможно ли выполнить операцию «Undo», проверьте «Undo status»:

If Memo1.Perform(EM_CANUNDO, 0, 0) <> 0 then begin end;
Для выполнения «Redo» выполните «Undo» еще раз.

Вопрос:

Можно ли создать форму, которая получает дополнительные параметры в методе Сreate?

Просто замените конструктор Create класса Вашей формы.

unit Unit2; interface uses Windows, Messages, SysUtils, ); Unit2.Form2.Show; end;

Вопрос:

Почему при изменении цвета шрифта в StatusBar’s он (шрифт) не меняется?

Status bar (строка состояния) — стандартный элемент управления Windows и цвет его шрифта задается через Control Panel (константа clBtnText). Этот цвет по умолчанию черный и может меняться при выборе пользователем той или иной цветовой схемы. У компонента ТStatusBar и его панелей есть возможность «owner-draw» — программной перерисовки, которая позволяет выводить на панель текст любого цвета. Измените свойство Style компонента TStatusBar.Panels на OwnerDraw.

procedure TForm1.StatusBar1DrawPanel(StatusBar: TStatusBar; Panel: TStatusPanel; const Rect: TRect); begin if Panel = StatusBar.Panels[0] then begin StatusBar.Canvas.Font.Color := clRed; StatusBar.Canvas.TextOut(Rect.Left, Rect.Top, ‘Panel — 0’) end else begin StatusBar.Canvas.Font.Color := clGreen; StatusBar.Canvas.TextOut(Rect.Left, Rect.Top, ‘Panel — 1’); end; end;

Вопрос:

Как бы мне создать эдакий trackbar в котором вместо широкой белой полоски с ползунком была бы тонкая линия?

В примере создается компонент, унаследованный от TTrackbar который переопределяет метод CreateParams и убират флаг TBS_ENABLESELRANGE из Style. Константа TBS_ENABLESELRANGE обьявленна в модуле CommCtrl.

uses CommCtrl, ComCtrls; type TMyTrackBar = >

Вопрос:

Мне нужен временный canvas, но когда я пытаюсь его создать получаю сообщения об ошибках. Как создать TCanvas?

Создайте Bitmap и используйте свойство canvas класса TBitmap. Пример создает Bitmap, рисует на его canvas’е, выводит этот canvas на форму и освобождает bitmap.

procedure TForm1.Button1Click(Sender: TObject); var bm : TBitmap; begin bm := TBitmap.Create; bm.W >

Вопрос:

В некоторых видео режимах прозрачная часть glyph’а стандартного TBitBtn становится видной. Как этого избежать?

В примере используется техника закраски прозрачной части glyph’а цветом кнопки на которой он находится — таким образом glyph кажется прозрачным.

function InitStdBitBtn(BitBtn : TBitBtn; kind : TBitBtnKind) : bool; var Bm1 : TBitmap; Bm2 : TBitmap; begin Result := false; if Kind = bkCustom then exit; Bm1 := TBitmap.Create; case Kind of bkOK : Bm1.Handle := LoadBitmap(hInstance, ‘BBOK’); bkCancel : Bm1.Handle := LoadBitmap(hInstance, ‘BBCANCEL’); bkHelp : Bm1.Handle := LoadBitmap(hInstance, ‘BBHELP’); bkYes : Bm1.Handle := LoadBitmap(hInstance, ‘BBYES’); bkNo : Bm1.Handle := LoadBitmap(hInstance, ‘BBNO’); bkClose : Bm1.Handle := LoadBitmap(hInstance, ‘BBCLOSE’); bkAbort : Bm1.Handle := LoadBitmap(hInstance, ‘BBABORT’); bkRetry : Bm1.Handle := LoadBitmap(hInstance, ‘BBRETRY’); bkIgnore : Bm1.Handle := LoadBitmap(hInstance, ‘BBIGNORE’); bkAll : Bm1.Handle := LoadBitmap(hInstance, ‘BBALL’); end; Bm2 := TBitmap.Create; Bm2.W >

Вопрос:

Создание PolyPolygon используя массив точек?

Polygon — метод компонента TCanvas получает в качестве параметра динамический массив точек. Функция PolyPolygon() из Windows GDI получает указатель на массив точек.

procedure TForm1.Button1Click(Sender: TObject); var ptArray : array[0..9] of TPOINT; PtCounts : array[0..1] of integer; begin PtArray[0] := Point(0, 0); PtArray[1] := Point(0, 100); PtArray[2] := Point(100, 100); PtArray[3] := Point(100, 0); PtArray[4] := Point(0, 0); PtCounts[0] := 5; PtArray[5] := Point(25, 25); PtArray[6] := Point(25, 75); PtArray[7] := Point(75, 75); PtArray[8] := Point(75, 25); PtArray[9] := Point(25, 25); PtCounts[1] := 5; PolyPolygon(Form1.Canvas.Handle, PtArray,PtCounts,2); end;

Вопрос:

Как создать невизуальный компонент без иконоки, которая изображается в палитре компонентов в «design-time» (вроде TField)?

Невизуальные компоненты без иконоки удобны для субкомпонентов, связанных с какими-то другими компонентами. Создайте компонент как обычно, но используйте RegisterNoIcon вместо RegisterComponent.

Вопрос:

Как показывать нестандартный встроенный редактор (inplace editor) в ячейке stringgrid (например combobox).

Вопрос:

Как узнать есть ли в заданном CD-ROM’е Audio CD?

Можно использовать функцию Windows API GetDriveType() чтобы определить является ли дисковод CD-ROM’мом. И функцию API GetVolumeInformation() чтобы проверить VolumeName на равенство ‘Audio CD’.

function IsAudioCD(Drive : char) : bool; var DrivePath : string; MaximumComponentLength : DWORD; FileSystemFlags : DWORD; VolumeName : string; Begin sult := false; DrivePath := Drive + ‘:\’; if GetDriveType(PChar(DrivePath)) <> DRIVE_CDROM then exit; SetLength(VolumeName, 64); GetVolumeInformation(PChar(DrivePath),PChar(VolumeName), Length(VolumeName),nil,MaximumComponentLength,FileSystemFlags,nil,0); if lStrCmp(PChar(VolumeName),’Audio CD’) = 0 then result := true; end; function PlayAudioCD(Drive : char) : bool; var mp : TMediaPlayer; begin result := false; Application.ProcessMessages; if not IsAudioCD(Drive) then exit; mp := TMediaPlayer.Create(nil); mp.Visible := false; mp.Parent := Application.MainForm; mp.Shareable := true; mp.DeviceType := dtCDAudio; mp.FileName := Drive + ‘:’; mp.Shareable := true; mp.Open; Application.ProcessMessages; mp.Play; Application.ProcessMessages; mp.Close; Application.ProcessMessages; mp.free; result := true; end; procedure TForm1.Button1Click(Sender: TObject); begin if not PlayAudioCD(‘D’) then ShowMessage(‘Not an Audio CD’); end;

Вопрос:

Как узнать есть ли у мыши колесико?

Свойство «WheelPresent» глобального обьекта «mouse».

Вопрос:

События KeyPress и KeyDown не вызываются для клавиши Tab — как определить, что она была нажата?

На уровне формы клавиша tab обычно обрабатывается Windows. В примере создается обработчик события CM_Dialog для перехвата Dialog keys.

type TForm1 = class(TForm) private procedure CMDialogKey( Var msg: TCMDialogKey ); message CM_DIALOGKEY; end; var Form1: TForm1; implementation <$R *.DFM>procedure TForm1.CMDialogKey(var msg: TCMDialogKey); begin if msg.Charcode <> VK_TAB then inherited; end; procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key = VK_TAB then Form1.Caption := ‘Tab Key Down!’; end;

Вопрос:

В чем отличие между Create(Self) и Create(Application)?

Self может быть использовано только в методе класса, и ссылается на текущий экземпляр класса. Таким образом «Self» в методе класса TForm1 ссылается на текущий экземпляр TForm1. При создании компонента Вы передаете его владельца (owner) в конструктор. При уничтожении формы или компонента автоматически уничтожаются и все компоненты владельцем которого она является. Таким образом если при создании формы передать в качестве владельца Application эта форма будет автоматически уничтожена при уничтожении Application. Если же при создании формы передать в качестве владельца другую форму, вновь созданная форма будет автоматически уничтоженна при уничтожении формы-владельца.

Вопрос:

Как во время выполнения определить поддерживает ли обьект заданное свойство?

Ответ:
function HasProperty(Obj : TObject; Prop : string) : PPropInfo; begin Result := GetPropInfo(Obj. ); if p <> nil then SetOrdProp(Button1, p, clRed) else ShowMessage(‘Button has no color property’); p := HasProperty(Label1, ‘Color’); if p <> nil then SetOrdProp(Label1, p, clRed) else ShowMessage(‘Label has no color property’); p := HasProperty(Label1.Font, ‘Color’); if p <> nil then SetOrdProp(Label1.Font.Color, p, clBlue) else ShowMessage(‘Label.Font has no color property’); end;

Вопрос:

Как при проигрывании музыки с Audio CD показывать сколько прошло минут и секунд?

В примере время выводится по таймеру.

uses MMSystem; procedure TForm1.Timer1Timer(Sender: TObject); var Trk : Word; Min : Word; Sec : Word; begin with MediaPlayer1 do begin Trk := MCI_TMSF_TRACK(Position); Min := MCI_TMSF_MINUTE(Position); Sec := MCI_TMSF_SECOND(Position); Label1.Caption := Format(‘%.2d’,[Trk]); Label2.Caption := Format(‘%.2d:%.2d’,[Min,Sec]); end; end;

Вопрос:

Можно ли рисовать на рамке формы?

Обрабатывайте событие WM_NCPAINT. В примере рамка обводится красной линией толщиной в 1 пиксел.

Вопрос:

Как выполнить какой-то процесс тогда, когда пользователь не работает с моим приложением?

Создайте процедуру, которая будет вызываться при событии Application.OnIdle.
Обьявим процедуру:
procedure IdleEventHandler(Sender: TObject; var Done: Boolean);
В разделе implementation опишем поцедуру:
procedure TForm1. >
В методе Form’ы OnCreate — укажем что наша процедура вызывается на событии Application.OnIdle.
Application.On >
Событие OnIdle возникает один раз — когда приложение переходит в режим «безделья» (idle). Если в обработчике переменной Done присвоить False событие будет вызываться вновь и вновь, до тех пор пока приложение «бездельничает» и переменной Done не присвоенно значение True.

Вопрос:

При перемещении фокуса ввода клавишей Tab чтобы переместить его в RadioGroup нужно нажать клавишу Tab дважды если какой нибудь пункт RadioGroup уже выбран, но только один раз если не выбран. Можно ли сделать поведение RadioGroup логичным?

Установка свойства RadioGroup’ы TabStop в false должна решить эту проблему — поскольку клавиша tab будет продолжать работать — перемещаясь сразу на выделенный пункт RadioGroup.

Вопрос:

Как разместить маленькие картинки в компоненте TPopUpMenu?

В приведенном примере показано как это сделать с использованием функции Windows API SetMenuItemBitmaps(). Эта функция получает handle popup menu, позицию строчки меню куда будет помещена картинка, и два дескриптора(handles) на две картинки (одна из них — картинка которая будет показана когда строка меню доступна, вторая — когда строка меню недоступна).

type TForm1 = ); SetMenuItemBitmaps(PopUpMenu1.Handle,1,MF_BYPOSITION,BmUnChecked.Handle, BmChecked.Handle); end; procedure TForm1.FormDestroy(Sender: TObject); begin bmUnChecked.Free; bmChecked.Free; end; procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var pt : TPoint; begin pt := ClientToScreen(Point(x, y)); PopUpMenu1.Popup(pt.x, pt.y); end;

Вопрос:

Как узнать число кадров AVI файла, и выяснить как долго будет проигрывться этот файл?

Илон Маск рекомендует:  Функции выполнения программы

В приведенном примере указано как получить эту информацию.

procedure TForm1.Button1Click(Sender: TObject); begin MediaPlayer1.TimeFormat := tfFrames; ShowMessage(‘Number of frames = ‘ + IntToStr(MediaPlayer1.Length)); MediaPlayer1.TimeFormat := tfMilliseconds; ShowMessage(‘Number of milliseconds = ‘ + IntToStr(MediaPlayer1.Length)); end;

Вопрос:

Как изменить число фиксированных колонок в TDbGrid?

procedure TForm1.Button1Click(Sender: TObject); begin TStringGr >

Вопрос:

Некоторые компоненты баз данных (и среди них TDBGrid) никак не меняют визуальных свойств, когда к ним отключен доступ (disabled). Как это изменить програмно?

Ниже приведен пример, меняющий цвет шрифта на clGray, когда доступ к элементу управления (в данном случае TDBGrid) запрещен (disabled).

procedure TForm1.Button1Click(Sender: TObject); begin DbGr >

Вопрос:

Как определить нажаты ли клавиши Shift, Alt, or Ctrl в какой-либо момент времени?

В приведенном примере показано как определить нажата ли клавиша Shift при выборе строчки меню. Пример также содержит функции проверки состояния клавиш Alt, Ctrl.

function CtrlDown : Boolean; var State : TKeyboardState; begin GetKeyboardState(State); Result := ((State[vk_Control] And 128) <> 0); end; function ShiftDown : Boolean; var State : TKeyboardState; begin GetKeyboardState(State); Result := ((State[vk_Shift] and 128) <> 0); end; function AltDown : Boolean; var State : TKeyboardState; begin GetKeyboardState(State); Result := ((State[vk_Menu] and 128) <> 0); end; procedure TForm1.MenuItem12Click(Sender: TObject); begin if ShiftDown then Form1.Caption := ‘Shift’ else Form1.Caption := »; end;

Вопрос:

Как изменить шрифта hint’а?

В примере перехватывается событие Application.OnShowHint и изменяется шрифт Hint’а.

type TForm1 = ; Font.Size:= 18; Font.Style:= [fsBold]; HintInfo.HintColor:= clWhite; end; end; procedure TForm1.FormCreate(Sender: TObject); begin Application.OnShowHint := MyShowHint; end;

Вопрос:

Есть ли в Delphi эквивалент функции SendKeys Visual Basic’а?

Ниже приведена процедура, позволяющаю отправлять нажатия в любой элемент управления (window control), способный принимать ввод с клавиатуры. Вы можете использовать эту технику чтобы включать клавиши NumLock, CapsLock и ScrollLock под Windows NT. Та же техника работает и под Windows 95 для CapsLock и ScrollLock но не работает для клавиши NumLock.
Обратите внимание, что приведены четыре поцедуры: SimulateKeyDown() — эмулировать нажатие клавиши (без отпускания) SimulateKeyUp() — эмулировать отпускание клавиши SimulateKeystroke() — эмулировать удар по клавише (нажатие и отпускание) и SendKeys(), позволяющие Вам гибко контролировать посылаемые сообщения клавиатуры.
SimulateKeyDown(), SimulateKeyUp() и SimulateKeystroke() получают коды виртуальных клавиш (virtural key) (вроде VK_F1). Процедура SimulateKeystroke() получает дополнительный параметр, полезный при эмуляции нажатия PrintScreen. Когда этот параметр равен нулю весь экран будет скопирован в буфер обмена (clipboard). Если дополнительный параметр равен 1 будет скопированно только активное окно.
Четыре метода «button click» демонстрируют использование: ButtonClick1 — включает capslock ButtonClick2 — перехватывает весь экран в буфер обмена (clipboard). ButtonClick3 — перехватывает активное окно в буфер обмена (clipboard). ButtonClick4 — устанавливает фокус в Edit и отправляет в него строку.

procedure SimulateKeyDown(Key : byte); begin keybd_event(Key, 0, 0, 0); end; procedure SimulateKeyUp(Key : byte); begin keybd_event(Key, 0, KEYEVENTF_KEYUP, 0); end; procedure SimulateKeystroke(Key : byte; extra : DWORD); begin keybd_event(Key,extra,0,0); keybd_event(Key,extra,KEYEVENTF_KEYUP,0); end; procedure SendKeys(s : string); var i : integer; flag : bool; w : word; begin flag := not GetKeyState(VK_CAPITAL) and 1 = 0; if flag then SimulateKeystroke(VK_CAPITAL, 0); for i := 1 to Length(s) do begin w := VkKeyScan(s[i]); if ((HiByte(w) <> $FF) and (LoByte(w) <> $FF)) then begin if HiByte(w) and 1 = 1 then SimulateKeyDown(VK_SHIFT); SimulateKeystroke(LoByte(w), 0); if HiByte(w) and 1 = 1 then SimulateKeyUp(VK_SHIFT); end; end; if flag then SimulateKeystroke(VK_CAPITAL, 0); end; procedure TForm1.Button1Click(Sender: TObject); begin SimulateKeystroke(VK_CAPITAL, 0); end; procedure TForm1.Button2Click(Sender: TObject); begin SimulateKeystroke(VK_SNAPSHOT, 0); end; procedure TForm1.Button3Click(Sender: TObject); begin SimulateKeystroke(VK_SNAPSHOT, 1); end; procedure TForm1.Button4Click(Sender: TObject); begin Application.ProcessMessages; Edit1.SetFocus; SendKeys(‘Delphi Is RAD!’); end;

Вопрос:

Я загружаю TImageList динамически. Как сделать картинки из TImageList прозрачными?

procedure TForm1.Button1Click(Sender: TObject); var bm : TBitmap; il : TImageList; begin bm := TBitmap.Create; bm.LoadFromFile(‘C:\DownLoad\TEST.BMP’); il := TImageList.CreateSize(bm.W >

Вопрос:

Как заставить TMediaPlayer проигрывать одно и тоже бесконечно? AVI например?

В примере AVI файл проигрывается снова и снова — используем событие MediaPlayer’а Notify

procedure TForm1.MediaPlayer1Notify(Sender: TObject); begin with MediaPlayer1 do if NotifyValue = nvSuccessful then begin Notify := True; Play; end; end;

Вопрос:

При выполнении диалога FontDialog со свойством Device равным fdBoth or fdPrinter, появляется ошибка «There are no fonts installed».

Эти установки должны показать шрифты совместимые либо с принтером либо с экраном. В примере диалог Windows ChooseFont вызывается напрямую чтобы показать список шрифтов, совместимых одновременно и с экраном и с принтером.

uses Printers, CommDlg; procedure TForm1.Button1Click(Sender: TObject); var cf : TChooseFont; lf : TLogFont; tf : TFont; begin if PrintDialog1.Execute then begin GetObject(Form1.Canvas.Font.Handle, sizeof(lf),@lf); FillChar(cf, sizeof(cf), #0); cf.lStructSize := sizeof(cf); cf.hWndOwner := Form1.Handle; cf.hdc := Printer.Handle; cf.lpLogFont := @lf; cf.iPointSize := Form1.Canvas.Font.Size * 10; cf.Flags := CF_BOTH or CF_INITTOLOGFONTSTRUCT or CF_EFFECTS or CF_SCALABLEONLY or CF_WYSIWYG; cf.rgbColors := Form1.Canvas.Font.Color; if ChooseFont(cf) <> false then begin tf := TFont.Create; tf.Handle := CreateFontIndirect(lf); tf.COlor := cf.RgbColors; Form1.Canvas.Font.Assign(tf); tf.Free; Form1.Canvas.TextOut(10, 10, ‘Test’); end; end; end;

Вопрос:

Как сменить дисковод, откуда MediaPlayer проигрывает аудио CD?

Вопрос:

Как убрать кнопку с названием моей программы из Панели Задач(Taskbar)?

Отредактируйте файл-проекта (View -> Project Source) Добавьте модуль Windows в раздел uses. Application.ShowMainForm := False; в строку после «Application.Initialize;». Добавьте ShowWindow(Application.Handle, SW_HIDE); в строку перед «Application.Run;» Ваш файл проекта должен выглядеть приблизительно так:

program Project1; uses Windows, Forms, Unit1 in ‘Unit1.pas’ , Unit2 in ‘Unit2.pas’ ; <$R *.RES>begin Application.Initialize; Application.ShowMainForm := False; Application.CreateForm(TForm1, Form1); Application.CreateForm(TForm2, Form2); ShowWindow(Application.Handle, SW_HIDE); Application.Run; end. В разделе «initialization» (в самом низу) каждого unit’а добавьте begin ShowWindow(Application.Handle, SW_HIDE); end.

Вопрос:

Как преобразовать цвета в строку — название цвета VCL?

Модуль graphics.pas содержит функцию ColorToString() которое преобразует допустимое значение TColor в его строковое представление используя либо константу-название цвета (по возможности) либо шестнадцатиричную строку. Обратная функция — StringToColor()

procedure TForm1.Button1Click(Sender: TObject); begin Memo1.Lines.Add(ColorToString(clRed)); Memo1.Lines.Add(IntToStr(StringToColor(‘clRed’))); end;

Вопрос:

При показе максимизированное формы она перекрывает task bar и не выравнивается по верху экрана. В чем тут дело?

Это может произойти когда свойство position формы установленно в poScreenCenter. Установите position = poDefault.

Вопрос:

Как заставить TEdit не ‘пикать’ при нажатии недопустимых клавиш?

Перехватите событие KeyPress и установите key = #0 для недопустимых клавиш.

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if ((UpCase(Key) ‘Z’)) then Key := #0; end;

Вопрос:

Как получить число и список всех компонентов, расположенных на TNoteBook?

В примере список выводится на Listbox.

procedure TForm1.Button1Click(Sender: TObject); var n: integer; p: integer; begin ListBox1.Clear; with Notebook1 do begin for n := 0 to ControlCount — 1 do begin with TPage(Controls[n]) do begin ListBox1.Items.Add(‘Notebook Page: ‘ + TPage(Notebook1.Controls[n]).Caption); for p := 0 to ControlCount — 1 do ListBox1.Items.Add(Controls[p].Name); ListBox1.Items.Add(EmptyStr); end; end; end; end;

Вопрос:

Я хочу вставить escape code в строку при использовании функции Format(). Например, я хочу создать строку, содержащую символ табуляции. В «C» я бы написал что-то вроде sprintf(buffer, «%s\t%s», str);. А как это будет на Pascal’e?

Функция Format Pascal’я не использует escape codes. Вместо этого нужно вставить в строку действительное значение символа в кодировке ASCII.

Buffer := Format(‘%s’#9’%s’, [Str1, Str2]); ShowMessage(Format(‘%s’#9’%s’, [‘Column1’, ‘Column2’]));

Вопрос:

Как показать первый кадр AVI-файла?

procedure TForm1.Button1Click(Sender: TObject); begin Application.ProcessMessages; MediaPlayer1.Open; Application.ProcessMessages; MediaPlayer1.Step; Application.ProcessMessages; MediaPlayer1.Previous; end;

Вопрос:

Когда пользователь щелкает по listview, он переходит в режим редактирования. Как перевисти его в редим редактирования по нажатию клавиши (например F2)?

Лови Книгу .ру

Огромная коллекция книг в открытом доступе

Виртуальная библиотека Delphi

procedure TForm1.FormCreate(Sender: TObject);

Есть ли в Delphi эквивалент функции SendKeys Visual Basic’а?

Ниже приведена процедура, позволяющаю отправлять нажатия в любой элемент управления (window control), способный принимать ввод с клавиатуры. Вы можете использовать эту технику чтобы включать клавиши NumLock, CapsLock и ScrollLock под Windows NT. Та же техника работает и под Windows 95 для CapsLock и ScrollLock но не работает для клавиши NumLock.

Обратите внимание, что приведены четыре процедуры: SimulateKeyDown() — эмулировать нажатие клавиши (без отпускания), SimulateKeyUp() — эмулировать отпускание клавиши, SimulateKeystroke() — эмулировать удар по клавише (нажатие и отпускание) и SendKeys(), позволяющие Вам гибко контролировать посылаемые сообщения клавиатуры.

SimulateKeyDown(), SimulateKeyUp() и SimulateKeystroke() получают коды виртуальных клавиш (virtural key) (вроде VK_F1).

Есть ли в delphi эквивалент функции sendkeys visual basic’а?

Выпуск от 22.01.02 09:04

Новые компоненты |x|
    DIPcre 1.50 (80Kb)(21.01.02 14:04)

Обработчик регулярных выражений для Boland Delphi. Используется Perl5-совместимый синтаксис, включая полное выделение подстрок, регистронезависимость при сравнении и т.д. DIPcre включает также два редактора регулярных выражений: TDIPcreEdit и TDIPcreComboBox. Оба позволяют пользователю вводить образец регулярного выражения.

Включает полный исходный код, некоммерческое использование допускается без каких-либо ограничений.
Источник: www.delphipages.com Автор: The Delphi Inspiration http://www.zeitungsjunge.de/delphi/
-= * VCL * Samples * =- [Перевел: Сергей Касаткин]

  • Для уменьшения объема писем здесь публикуется не весь список новых компонент, потому заглядывайте и на сайт!
  • Кое-что из нашей кладовки |x|
    • MathParserconstKolganoff22@mail.ru(20.01.02 09:27)

      Компонент MathParser разбирает математические выражения и вычисляет их. Математическое выражение может состоять из чисел (целых и действительных), переменных (любая последовательность букв и цифр начинающаяся с буквы), действий арифметики (плюс, минус, умножить, разделить, возвести в степень ), функций (любая последовательность букв и цифр начинающаяся с буквы и заканчивающаяся круглыми скобками) и скобки для задания приоритетов. Перемнные и функции чувствтельны к регистру.
      »»» Скачать: исходные тексты (5кб)

      Как часто, садясь за комп, Вы теряли чувство времени? Теперь с этой прогой все
      закончено. Вам достаточно запустить ее, установить время в которое Вас нужно
      предупредить (разбудить :-)), при желании ввести текст сообщения, которое
      появится при достижении указанного времени и нажать кнопку . При
      достижении указанного времени программа выдаст на экран окно сообщения и
      звуковой сигнал на колонки. После этого при нажатии на кнопку программа
      завершит свою работу, а при нажатии на опять появится окно настроек.
      Примечания:
      1. Программа написана таким образом, что проверяет не текущее время, а время
      прошедшее после нажатия на кнопку , поэтому после запуска програмы Вы
      можете со спокойной душой менять показания системного времени, программа не
      подведет.
      2. Программа может работать не более 24 часов с момента нажатия на
      (лично мне хватало :-)), однако если нужно работать дольше, то этого можно
      добиться следующим макаром: устанавливаете время активации равное текущему
      времени и жмете на . Прога работает 24 часа. Я думаю, что делать дальше
      Вы догадались.
      »»» Скачать: исходные тексты (21кб) демонстрационный EXE файл (170кб)

      Упаковщик EXE DLL файлов. Защита от отладки и т.п.
      Степень сжатия Delphi-программ до 60% (100% — худшее сжатие) (Прога не моя, посему исходников нет)
      »»» Скачать: исходные тексты (110кб)

      Маленький класс для работы с ID3Tag-ами MP3 файлов.
      »»» Скачать: исходные тексты (5кб)

    Лучшее из нашего FAQ |x|

    Есть ли в Delphi эквивалент функции SendKeys Visual Basic’а? Ниже приведена процедура, позволяющаю отправлять нажатия в любой элемент управления (window control), способный принимать ввод с клавиатуры. Вы можете использовать эту технику чтобы включать клавиши NumLock, CapsLock и ScrollLock под Windows NT. Та же техника работает и под Windows 95 для CapsLock и ScrollLock но не работает для клавиши NumLock.
    Обратите внимание, что приведены четыре поцедуры: SimulateKeyDown() — эмулировать нажатие клавиши (без отпускания) SimulateKeyUp() — эмулировать отпускание клавиши SimulateKeystroke() — эмулировать удар по клавише (нажатие и отпускание) и SendKeys(), позволяющие Вам гибко контролировать посылаемые сообщения клавиатуры.
    SimulateKeyDown(), SimulateKeyUp() и SimulateKeystroke() получают коды виртуальных клавиш (virtural key) (вроде VK_F1). Процедура SimulateKeystroke() получает дополнительный параметр, полезный при эмуляции нажатия PrintScreen. Когда этот параметр равен нулю весь экран будет скопирован в буфер обмена (clipboard). Если дополнительный параметр равен 1 будет скопированно только активное окно.
    Четыре метода «button click» демонстрируют использование: ButtonClick1 — включает capslock ButtonClick2 — перехватывает весь экран в буфер обмена (clipboard). ButtonClick3 — перехватывает активное окно в буфер обмена (clipboard). ButtonClick4 — устанавливает фокус в Edit и отправляет в него строку.
    Пример:

    Обсуждается в конференциях |x|
    • Как можно создать из рисунков многостраничный PDF-документ.
      средствами Delphi-приложения, конечно. спасибо! Сергей.
    • «Зависшие» соединения.
      Hello всем! При отключении удаленной машины IB Server(IB Guardian) продолжает считать соединение с базой действующим. .
    • внешнее устройство
      Есть некоторое внешнее устройство, цепь которого может находится в двух состояниях: замкнута или разомкнута. Как можно .
    • Ошибка при компиляции
      При компиляции проекта возникает ошибка ‘Access violaion at address 1089. in module Project.exe. Read of address .
    • RS232 — контроль чётности, что делать?
      Проблема примерно такая: 1. Как изменять в передоваемом байте 9 бит т.е. по желанию забивать туда 1 или 0; 2. Как .
    • Округление
      Не могу в Delphi найти функции округления до определенного знака после запятой. Неужели нету? В какой библиотеке ее .
    • Построение индексов
      Какой может быть максимальная длина VARCHAR-поля, чтобы можно было построить по нему индекс? Заранее спасибо.
    У нас большой выбор статей |x|

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

    Новинки книжного рынка |x|

    Delphi 5: учебный курс
    В книге рассмотрены возможности системы программирования Delphi 5, описан язык программирования Object Pascal, рассмотрены визуальные компоненты системы и методы их создания. Особое внимание уделено принципам и практическим приемам создания сетевых приложений для разных архитектур и разработке программ, поддерживающих основные протоколы Интернета.Не требует специальной подготовки, может быть использована как пособие для изучающих основы программирования и сетевые технологии, а также как справочник по компонентам Delphi и пособие для самообразования.
    Автор: С. Бобровский

    Другие сайты о DELPHI |x|

    AFTeam’s Home Page
    Почти ничем не примичательный сайт. Только мои работы, да некоторая информация.

    Опрос населения :)

    Стоит ли сделать англоязычную версию этого сайта?
    »»» Да
    »»» Нет
    Журнал «RSDN Magazine» |x|

    Дорогие друзья! Мы рады представить вам новый совместный проект сайтов www.rsdn.ru, delphi.mastak.ru и www.optim.ru — профессиональный журнал для программистов RSDN Magazine.
    Несомненно, ваше мнение о необходимости такого журнала, содержании рубрик и темах отдельных статей поможет сделать журнал более полезным и интересным. Высказать свое мнение, проголосовать или же подписаться вы можете на сайте. Без вашего участия, нам будет трудно сделать правильный журнал! Для души

    Хокку дня
    На снег за окном
    С ужасом смотрит
    Молоденький кактус

    Афоризмы
    Молчаливая женщина — подарок Божий.

    Фраза дня
    Привлекательные женщины отвлекают.

    И на закуску коротенький анекдот
    — Как называется, когда блондинка кpасится под бpюнетку?
    — Искусственный интеллект.

    Есть ли в delphi эквивалент функции sendkeys visual basic’а?

    Иногда возникает необходимость сымитровать пользовательский ввод с клавиатуры. Тут на помощь придет фукция SendKeys. Вот её описание:

    SendKeys строка, [режим ожидания]

    Этот макрос прокрутит таблицу на страницу вниз.

    Режим ожидания определяет то, как будет произведен возврат. В случае TRUE возврат в процедуру будет только после обработки нажатия клавиш. Если в программе выполняется какое-нибудь длительное действие, то задержка может быть значительной. В случае FALSE функция вернет управление сразу ничего не ожидая.

    В фигурные скобках указываются команды и символы:

    и так далее. Это не все возможные коды, полный список можно посмотреть в MSDN.

    Функция, приведенная ниже, переведет курсор на страницу ниже, введет 123 и нажмет ENTER:

    Вот так можно вызвать функциональную клавишу:


    Когда экспериментируете, запускайте макрос из активной рабочей книги.

    Есть ли в delphi эквивалент функции sendkeys visual basic’а?

    No Answer is Posted For this Question
    Be the First to Post Answer

    What are IDAPI and SQL links ?

    How to Get the time and date in Universal Time ?

    Explain the findclose method?

    How to move a string into a TMemoryStream or TFileStream?

    How to Copy contents of a control to the clipboard?

    How to get the date of the last day in the current month?

    How to Create new constructors?

    How to Insert a file at the cursor ?

    Why do I get compile errors accessing the Sender object in events?

    what is rounding?

    How to Disable a radio button in a TRadioGroup?

    How to use the InterBase Express (IBX) SQL monitor?

    • C (3865)
    • C++ (2437)
    • VC++ (416)
    • Delphi (566)
    • Python Related (1981)
    • PHP Related (4990)
    • Scala (319)
    • R Programming (395)
    • Kotlin (184)
    • Apache Groovy (39)
    • Ruby (244)
    • Go Programming Language (139)
    • Objective-C (100)
    • Programming Languages AllOther (735)

    Business Management Interview Questions:: Banking Finance, Business Administration, Funding, Hotel Management, Human Resources, IT Management, Industrial Management, Infrastructure Management, Marketing Sales, Operations Management, Personnel Management, Supply Chain Management.

    Engineering Interview Questions :: Aeronautical, Automobile, Bio, Chemical, Civil, Electrical, Electronics Communications, Industrial, Instrumentation, Marine, Mechanical, Mechatronics, Metallurgy, Power Plant.

    Visa Interview Questions :: USA Visa, UK Visa, Australia Visa, Canada Visa, Germany Visa, New Zealand Visa.

    Delphi и Visual Basic

    Delphi и Visual Basic

    1. Есть ли в Delphi эквивалент массива элементов управления из Visual Basic?

    Hет. Компоненты Delphi не имеют свойства Index, подобное VB. Однако, имеются три основные причины, почему вы хотите использовать их в VB, и для каждой из них есть решение в Delphi.

    Причина 1. Вы хотите использовать один обработчик события для разных компонент на форме.

    Это просто. Все, что вы должны сделать — это выбрать тот же самый обработчик для каждой визуальной компоненты. Это лучше, чем в случае с массивом компонент, потому что вы можете одну и ту же процедуру-обработчик события присвоить различным типам компонент; например, кнопка на форме и пункт меню могут вызывать ту же самую функцию для обработки события OnClick.

    Причина 2. Вы хотите динамически создавать и уничтожать визуальные компоненты во время выполнения программы.

    Это также довольно просто в Delphi. Предположим, что на форме есть кнопка, и, каждый раз когда она нажимается, вы хотите создавать другую кнопку. Следующий пример показывается, как это делать:

    procedure TForm1.Button1Click(Sender: TObject);

    var

    begin

    end;

    Причина 3. Вам действительно требуется доступ к компонентам по номеру.

    Предположим, что вы решили написать игру вроде Реверси в Delphi. Вам нужно разместить 100 объектов TShape на форме, в виде квадрата 10?10. Конечно, размещать каждый элемент вручную на экране — задача трудоемкая и неинтересная, при этом, в декларации формы появляется 100 строк кода, которые, в общем-то, не нужны. Вместо этого можно завести массив вроде

    Board: array [1..10, 1..10] of TShape; Далее в программе нужно создать каждый из этих объекты, вызвав TShape.Create(FormXX); указать вручную начальные установки для них. Кроме того, в свойстве Parent каждого объекта из массива нужно указать ту панель (TPanel) или форму, на которой они располагаются. Это нужно для правильной перерисовки объектов.

    Если же вы не используете такие большие массивы, т.е., например хотите одинаково реагировать на нажатие 3-5 кнопок с незначительным различием для каждой из них, то можно использовать свойство Tag.

    2. Как использовать DLL, написанные в Delphi, например в Visual Basic?

    Допустим, вы написали на Delphi DLL и в нем объявили функцию

    function DataFileType(lpStr: PChar): Integer; export;

    begin

    end;

    в Visual Basic Вы должны подключить ее как:

    Declare Function DataFileType Lib «File.dll» (ByVal lpStr As String) As Integer

    а в программе на VB использовать следующим образом:

    sVendorName = Mid$(lpVar, 1, nSize)

    3. Конвертация TBasicString (VBX) в string.

    Я использую VBX и испытываю проблемы с конвертацией TBasicString в string. Как это сделать?

    Существует две функции —

    • BStrPCopy — принимает Basic string и конвертирует в string

    SetBStr — принимает string и возвращает Basic string Действительно, ссылок на эти функции нет в документации, но имена этих функций можно «обнаружить» в VBXCTRL.DCU.

    Похожие главы из других книг

    3. Переменные Visual Basic

    3. Переменные Visual Basic В Visual Basic переменные накапливают информацию (значения). При их применении Visual Basic занимают область в памяти компьютера, которая предназначена для сохранения этой информации. Имена переменных, составленные из символов, могут иметь длину в 255 символов.

    Visual Basic

    Visual Basic Регистрация dll- и ocx-файловДанная заметка будет полезна разработчикам. Если вам часто приходится работать с ocx-файлами (а также с dll-файлами), которые требуют регистрации в реестре с помощью REGSVR.EXE, то будет гораздо удобнее внести соответствующую запись в реестр, чем

    Подход Visual Basic 6.0

    Подход Visual Basic 6.0 Благодаря искреннему желанию насладиться более простой жизнью, многие программисты ушли от «мира каркасов» приложений на базе C(++) к более дружественным языкам, таким, как, например, Visual Basic 6.0 (VB6). Язык VB6 стал популярным благодаря тому, что он дает

    Создание подключаемого компонента в Visual Basic .NET

    Visual Basic 6.0

    Visual Basic 6.0 В Visual Basic 6.0 в отличие от пятой версии окна Code и Object появляются в нормальном, не в раскрытом виде. И приходится при каждом запуске VB6 раскрывать эти окна. Можно заставить автоматически раскрывать эти окна при каждом запуске. Создайте в соответствующем разделе

    9.3. Редактор Visual Basic

    9.3. Редактор Visual Basic После записи рассмотренного выше макроса к шаблону Normal добавился следующий текст макроса: Sub Arial_10_bold() “ “ Arial_10_bold Macro “ Arial 10 Полужирный “ With Selection.Font .Name = «Arial» .Size = 10 .Bold = True .Italic = False .Underline = wdUnderlineNone .UnderlineColor = wdColorAutomatic .StrikeThrough = False .DoubleStrikeThrough = False .Outline =

    2.4.2. Генерация кода в Visual Basic

    2.4.2. Генерация кода в Visual Basic ERwin поддерживает генерацию кода для MS Visual Basic версий 4.0 и 5.0. В качестве источника информации при генерации форм служит модель ERwin. Использование ERwin позволяет одновременно описывать как клиентскую часть (объекты, отображающие данные на экране),

    Что визуального в Visual Basic для приложений?

    Что визуального в Visual Basic для приложений? К счастью, VBA во многом избавляет от необходимости нудного печатания программного кода. В одних случаях вы записываете команды, которые нужны в приложении, и используете их в качестве отправной точки при создании новой программы.В

    VBA против Visual Basic

    VBA против Visual Basic Помимо того, что VBA не позволяет вам создавать отдельные приложения, одно из основных отличий состоит в том, что программы, написанные на VBA, работают медленнее, чем программы, написанные на Visual

    Почему VBA обычно медленнее, чем Visual Basic

    Почему VBA обычно медленнее, чем Visual Basic Кроме того, что вы не можете создавать в VBA отдельные, автономно работающие приложения, между VBA и Visual Basic есть еще одно серьезное отличие- VBA-программы обычно выполняются медленнее.Причина этого обнаруживается просто: VBA-программу

    Различия между VBA и Visual Basic

    Различия между VBA и Visual Basic VBA имеет очень много общего с Visual Basic, своим старшим братом, предназначенным для создания независимых приложений. А раз языки похожи, вы можете перенести большую часть своих навыков в программировании на VBA в Visual Basic. Однако вам следует помнить о

    Вызов редактора Visual Basic

    Вызов редактора Visual Basic Редактор Visual Basic служит командным центром для работы в VBA. В нем вы должны находиться при разработке VBA-форм, создании VBA-кода, тестировании и отладке VBA программ. Экспертом по использованию редактора Visual Basic вы станете после прочтения главы 5, а пока

    Краткое знакомство с редактором Visual Basic

    Краткое знакомство с редактором Visual Basic Первые обращения к редактору Visual Basic могут вас озадачить. Наверное, присутствие меню и панелей инструментов вверху экрана покажется вам привычным, но вот что означает это обилие окон? Предсказать их взаимное расположение

    Приложение С. Примеры программ на Visual Basic

    Среда разработки eMbedded Visual Basic 3.0

    Среда разработки eMbedded Visual Basic 3.0 Для краткости в этой главе для обозначения среды eMbedded Visual Basic 3.0 будет использовано сокращение eVB.Запустить eVB можно либо при помощи команды меню Пуск (Пуск ? Программы ? Microsoft eMbedded Visual Tools ? eMbedded Visual Basic 3.0), либо найти в папке установки

    VB2D — конвертор с Visual Basic на Delphi

    Язык программирования Delphi компании Borland обладает достаточной мощностью, чтобы захотелось поработать с ним самостоятельно. Но если необходимо использовать в среде Delphi программы, написанные на Visual Basic, можно обратиться к предлагаемому

    фирмой Eagle Research конвертору VB2D, преобразующему программы Visual Basic в программы Delphi.

    Перевод программ с одного языка на другой не обходится без потерь, и, хотя VB2D поможет обойти кое-какие трудности, с мало-мальски нетривиальной программой придется повозиться. Существенным недостатком конвертора VB2D можно назвать лишь то, что VB2D работает только с Visual Basic 3.0, создает программы только для Delphi 1.0 и не транслирует программы Visual Basic, работающие с OLE.

    Использовать VB2D легко. После установки его надо просто запустить, выбрать нужный проект Visual Basic и указать, куда поместить результат преобразования. По окончании процесса трансляции выдаются перекрестные ссылки для переменных и процедур, описание внесенных в программу изменений, связанных с иными правилами порядка следования операторов, с уточнением типов и с переименованием переменных, вызванным необходимостью избежать пересечения со списком зарезервированных слов Delphi.

    Во многом успех VB2D обусловлен тем, что с ним поставляются директивы, имитирующие управляющие элементы Visual Basic. Есть также невизуальные классы, моделирующие в Delphi возможности Visual Basic. Например, размер массивов, описанных на Object Pascal (базовом языке для Delphi), не может быть переопределен динамически, как это разрешено в Visual Basic. Чтобы компенсировать это неудобство, VB2D преобразует ссылки на массивы в новый класс Delphi, называемый TVBArray. Массивы TVBArrays обладают методом переопределения, к которому и может обращаться преобразованная программа. Подобным же образом ссылки на строки в программе на VB преобразуются в тип TVBString, включенный в VB2D. Для этого типа отсутствует ограничение, предусматривающее, что максимальная длина должна равняться 256 символам, имеющимся в Delphi 1.0.

    Чувствуется, что в Eagle Research основательно занимались доводкой VB2D. Это явствует, например, из качества оперативных справок или текстов сжатой, но тщательно выполненной документации. Другой пример — элегантность, с которой в Delphi реализованы десятки функций Visual Basic. Скажем, такие важные функции, как ChDir и SendKeys, переводятся в VBChDir и VBSendKeys. Разработчикам программ на Visual Basic не требуется особенно вникать в подробности трансляции. Даже финансовые функции получили свои эквиваленты в Delphi.

    Мощные средства Visual Basic для работы с базами данных главным образом основываются на механизме Jet Database Engine, поэтому преобразование программ, в которых он используется, представляет значительные трудности. Для управляющих элементов VB2D строит имитирующие конструкции, однако преобразование целого ряда операций ему не под силу. Так, поскольку построенной в Delphi программе недоступен Jet Database Engine, нельзя воспользоваться функциями, модифицирующими используемые таблицы. Нельзя также работать с элементами набора, например со списком полей таблицы. Более того, из-за того, что в Delphi нет эквивалентов для QueryDefs или TableDefs, VB2D их не транслирует.

    Существуют две версии VB2D. Возможности стандартной представлены выше. Если же надо преобразовать программы побольше, следует обратиться к профессиональной версии. Она создает более полные отчеты с перекрестными ссылками, призванными помочь в проверке корректности трансляции. Особенно удачен двусторонний текст, в котором параллельно приводятся исходные строки Visual Basic и результирующие — Delphi. В профессиональной версии имеются также тексты программ, используемых в качестве управляющих директив Visual Basic.

    Перейти от Visual Basic к Delphi непросто, это требует серьезной работы, и VB2D облегчит ее. Разработчики не считают свой продукт волшебной палочкой, напротив, они рекомендуют тщательно проверять построенный текст. Более того, в руководстве по VB2D указаны слабые места, где существует вероятность наткнуться на подводные камни. Подобная честность производит чрезвычайно благоприятное впечатление.

    Хотя перевод программы с одного языка на другой никогда не бывает легким, VB2D серьезно облегчит эту работу.

    КОРОТКО О ПРОДУКТЕ

    VB2D, Version 1.0

    VB2D поможет хорошо справиться с трудностями преобразования программы из Visual Basic в Delphi и здорово пригодится на старте, однако в любом случае придется также поработать самостоятельно.

    Плюсы: легкость использования: большая часть программы на Visual Basic преобразуется в Delphi очень легко.

    Минусы: работает только с VB 3.0; конвертирует только в Delphi 1.0; не конвертирует OLE и часть конструкций, связанных с работой с базами данных.

    Лекции — Шаги обучения VBA — файл 1.doc

    Доступные файлы (1):

    1.doc 1322kb. 17.11.2011 08:33 скачать

    содержание

      Смотрите также:
    • по VBA (Visual Basic For Application)[ документ ]
    • Бим Л.И., Лебедева С.Н. Deutsch. Schritte 1 / Шаги 1. Немецкий язык. Рабочая тетрадь. 5 класс. Пособие в двух частях[ документ ]
    • Язык программирования VBA[ лабораторная работа ]
    • по методике производственного обучения[ лекция ]
    • ОСТ 1 00016-71 Шаги заклепок в заклепочных швах[ документ ]
    • по вычислительной математике[ лекция ]
    • Современные средства оценивания результатов обучения[ лекция ]
    • Курс лекции по предмету Организация и методика производственного обучения[ лекция ]
    • Выбор оптимальной стратегии обучения в вузе. Вариант 2[ лабораторная работа ]
    • События Объекта Application[ документ ]
    • Берндт Г., Каинка Б. Измерение, управление и регулирование с помощью макросов VBA в Word и Excel (+ CD)[ документ ]
    • Андреев А.А. Дидактические основы дистанционного обучения[ документ ]

    Шаг 25 — О функции SendKeys

    Эта функция позволяет имитировать ввод с клавиатуры в Окно вот её описание:

    SebdKeys строка, [режим ожидания]

    Этот макрос прокрутит таблицу на страницу вниз.

    Режим ожидания это как будет произведен возврат. Если ^ TRUE возврат в процедуру будет только после обработки кодов. Обработка может быть длительной, если у Вас есть обрабочики событий. FALSE вернет сразу ничего не ожидая.

    Вы обратили внимание на фигурные скобки. В них указываются команды и символы:

    и так далее :-) догадаетесь?

    Это не все, но направление понятно.

    Функция ниже переведет указатель на страницу ниже, введет ^ 123 и даже ENTER нажмет :-)

    Вот так можно вызвать функциональную клавишу:

    Когда экспериментируете запускайте макрос из активной рабочей книги.
    ^

    Шаг 26 — Заполнение списка на форме из таблицы

    Итак, задача простая. У нас есть в таблице список девушек и мы ходим создать макрос, который будет зачитывать этот список и выводить в диалоговом окне. Вот под эту таблицу создавался макрос.

    Создайте точно такую таблицу, если не трудно :-)

    Теперь переходим в редактор ^ Visual Basic и создаем форму. На эту форму надо поместить два элемента управления: кнопку и список. Вот она какая.

    Шелкайте два раза по кнопке и вы попадете в редактирование события нажатия. Введите код:

    Private Sub CommandButton1_Click()

    Что означает «уничтож меня» :-). То есть форму. Это me похожа на this в C++ и идентифицирует объект, в котором производятся события. Даже спрашивать не надо, где я нахожусь. Unload и всё.

    Заполнять список мы будем при активизации формы. Поэтому нам необходимо обработать событие инициализации. Щелкните по форме два раза и выберите из меню событий (справа) Activate. И код.

    Private Sub UserForm_Activate()

    Dim девушки As Range

    Set девушки = Range(«K2:K6»)

    Dim vars As Variant

    ‘ Пойдем по девчатам :-)

    For Each vars In девушки

    Код прокомментирован и наверно понятен. Использование русских слов для переменных это не ошибка. Наконец это делать можно. Здесь в VBA можно использовать русские буквы для имен переменных.

    И макрос для запуска формы:

    В макросе написано — «форма покажись». Ну вот. Запускайте. Вот как это получится:

    Шаг 27 — Обмен данными между формой и таблицей

    Задача. Я хочу сделать ряд справок и страницу с константами. Одной из констант будет фамилия директора, которая используется в справках. При изменении этой константы фамилия в справке должна автоматически меняться. И я хочу менять фамилию из формы.

    Создаем лист Константы и на нем ячейке даем имя.

    И любое количество листов со справками. Ссылаясь на ячейку с фамилией.

    Как вы понимаете, сколько я листов не создам, воспользовавшись ссылкой на ячейку =director, стоит мне изменить данные в ячейки с фамилией директора она везде поменяется. Это само нормально. Вот только менять я хочу из формы, например, чтобы с константами спрятать лист подальше от пользователя. Ну давайте создавать форму. Идем в редактор VBA:

    При запуске формы мы должны прочитать данные с листа:

    Private Sub UserForm_Activate()

    При нажатии на кнопку «Новый» заменить данные на листе константы (автоматически поменяются на справках):

    Private Sub CommandButton2_Click()

    По нажатию на «Хватит» закрыть форму:

    Private Sub CommandButton1_Click()

    Как видите использование констант в тех случаях, где это разумно на отдельном листе позволяет просто создать форму. Потом форму можно скрыть и вызвать из меню для замены значений.
    ^

    Шаг 28 — Работа с Датами

    Для работы с датой в VBA предусмотрен специальный тип Date. Этот тип занимает 8 байт. Оно вам надо ? Это так для информации :-). Пробуем.

    Dim MyDate As Date

    У меня выдает 1899 год. Это говорит, что при создании этой переменной она не инициализируется текущей датой. Это плохо. Поместить Дату и время можно из строки воспользовавшись функциями DateValue и TimeValue.

    Dim MyDate As Date

    Так же и со временем:

    Dim MyDate As Date

    Только одновременно хранить и время и дату так не удастся, вот этот код приведет к очень интересному результату.

    Dim MyDate As Date

    Если вы хотите хранить вместе и дату и время, то поступите так:

    Dim MyDate As Date

    MyDate = DateValue(«6/1/72») + TimeValue(«10:10:12»)

    Чтобы извлекать части даты и часов используйте такие функции:

    Month(переменная типа Date)

    Day(переменная типа Date)

    Year(переменная типа Date)

    Hour(переменная типа Date)

    Minute(переменная типа Date)

    Second(переменная типа Date)

    WeekDay(переменная типа Date)

    WeekDay — это день недели, если Вам это нужно, то вы можете написать что-то типа этого.

    Dim MyDate As Date

    If (WeekDay(MyDate) = vbSunday) Then

    vbSunday это константа, есть еще vbMonday, ну дальше понятно.

    Запуск кода VBA без Sendkeys

    Я хочу читать PDF в Excel с помощью VBA. Я смог сделать это с помощью sendkeys, но это не надежное решение, так как sendkeys в целом уязвимы. Есть ли какой-либо другой метод или какой-либо прямой метод (в VBA или Python)?

    Код, который использует sendkeys:

    Я исследовал метод копирования и вставки с использованием метода «copy to clipboard». Однако никакого кода или чего-либо еще не было. Если кто-то может помочь в этом, это будет оценено.

    Кроме того, я нашел метод, который не использует sendkeys. Он фактически определяет функцию, которая использует виртуальную клавиатуру. Но, по-видимому, этот метод также не работает, поскольку код просто не работает / не дает выход.

    Мы можем напрямую определить одну и ту же функцию и напрямую вызвать эти функции вместо senkeys. Но нет выхода.

    Если кто-то может помочь с любым из вышеупомянутых методов, это будет большой помощью.

    Delphi эквивалент VB в «DirectCast»?

    November 2020

    340 раз

    в VB.Net у вас есть «DirectCast» отправить mousesclicks или другие события с другой DirectX Application.

    Есть ли эквивалент этому в Delphi? Или любой другой полезный способ пойти?

    этот пример посылает мыши на свернутом приложении (DirectX)

    2 ответы

    Delphi эквивалент DirectCast будет приведение типа.

    Например отливки ссылочный к Название переменной класса Form :

    Вам не нужно слепок назвать SendMessage:

    Для чего это стоит, ваш код VB.net неправильно объявляет второй параметр SendMessage как IntPtr. Это должно быть беззнаковое 32-битное целое.

    Если вам нужно нужно реализовать бросок в Delphi, от одного типа к другому у вас есть два варианта. Бесконтрольно бросок,

    которая бросает Y к типу SomeType без контроля времени выполнения. Или проверил бросок,

    который сгенерирует исключение составляет Y не SomeClass.

    Илон Маск рекомендует:  Что такое код asp readlogrecord
    Понравилась статья? Поделиться с друзьями:
    Кодинг, CSS и SQL