Полный кодСам файл проекта (DPR) то же нужен. Есть подозрение, что не определена главная форма. (Так и есть).
MyProgram.dpr
должен быть так:program MyProgram;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
Vix_GetProperties
работает аналогично WriteLn
с списком.Predefined constants, types, procedures, and functions (such as True, Integer, or Writeln) do not have actual declarations.Instead they are built into the compiler and are treated as if they were declared at the beginning of the System unit.
TWebBrowser
— это встроенный IE. Попробуйте настроить Browser Emulation
по FEATURE_BROWSER_EMULATION. VBA Macros
. function TCustomCanvas.TextWidth(const Text: string): Integer;
begin
Result := TextExtent(Text).cX;
end;
function TCanvas.TextExtent(const Text: string): TSize;
begin
RequiredState([csHandleValid, csFontValid]);
Result.cX := 0;
Result.cY := 0;
Winapi.Windows.GetTextExtentPoint32(FHandle, Text, Length(Text), Result);
end;
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
ListBox1: TListBox;
procedure Button1Click(Sender: TObject);
private { Private declarations }
public { Public declarations }
end;
var Form1: TForm1;
implementation
{$R *.dfm}
uses Unit2;
procedure TForm1.Button1Click(Sender: TObject);
var fl: String;
tr: TSome;
begin
fl := ExtractFilePath( Application.ExeName ) + GUIDToString( TGUID.NewGuid ) + '.thr';
tr := TSome.Create( fl );
ListBox1.Items.Add( fl );
end;
end.
unit Unit2;
interface
uses System.Classes, System.SysUtils;
type
TSome = class(TThread)
private { Private declarations }
FFile: String;
FMess: String;
procedure UpdateForm;
protected
procedure Execute; override;
public { Public declarations }
constructor Create( sFile: String );
end;
implementation
uses Unit1;
constructor TSome.Create( sFile: String );
begin
FFile := sFile;
inherited Create( False );
end;
procedure TSome.Execute;
var outfile: TextFile;
tr: String;
begin
while not Self.Terminated do begin
tr := IntToStr( Self.Handle ) + ' - '+ DateTimeToStr( Now ());
AssignFile( outfile, FFile );
Rewrite( outfile );
Writeln( outfile, tr );
CloseFile( outfile );
Self.FMess := tr;
Synchronize( UpdateForm );
Sleep( 1000 );
end;
end;
procedure TSome.UpdateForm;
begin
Form1.ListBox1.Items.Add( Self.FMess );
end;
end.
FOR
вычисляется один раз перед циклом. Если в основном потоке меняется form1.sListBox1
, то может не оказаться нужного Items[i]
. Или проверяйте его наличие. Или используйте цикл WHILE
, в котором сравнение счётчика с условием будет проверяться каждый раз.FOR
.TMyThread
должен быть свой TStrings
, в который нужно передать form1.sListBox1.Items
. Vcl.Forms.TForm.OnKeyDown
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if (Key=VK_ESCAPE) and Printer.Printing then
begin
Printer.Abort;
MessageDlg('Printing aborted', mtInformation, [mbOK],0);
end;
end;
Vcl.Forms.TForm.OnKeyPress
.procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
MessageDlg(Key + ' has been pressed', mtInformation, [mbOK], 0)
end;
не реагирует на нажатия
Application.ProcessMessages
, например перед перерисовкой. i
переписываете T.Memo.Text
.procedure TfDM.EST1Click(Sender: TObject);
var
i: Integer;
T: TfrxMemoView;
begin
T:= TfrxMemoView(frxAIR1.FindObject('Memo156'));
T.Memo.Text := fMain.Memo3.Text;
T:= TfrxMemoView(frxAIR1.FindObject('Memo157'));
T.Memo.Text := fMain.Memo3.Text;
T:= TfrxMemoView(frxAIR1.FindObject('Memo158'));
T.Memo.Text := fMain.Memo3.Text;
// и так далее...
frxAIR1.ShowReport;
end;
procedure TfDM.EST1Click(Sender: TObject);
var
i: Integer;
T: TfrxMemoView;
begin
for i:=0 to fMain.Memo3.Lines.Count - 1 do
begin
T:= TfrxMemoView(frxAIR1.FindObject('Memo156'));
T.Memo.Lines.Add( fMain.Memo3.Lines[i]);
T:= TfrxMemoView(frxAIR1.FindObject('Memo157'));
T.Memo.Lines.Add( fMain.Memo3.Lines[i]);
T:= TfrxMemoView(frxAIR1.FindObject('Memo158'));
T.Memo.Lines.Add( fMain.Memo3.Lines[i]);
// и так далее...
end;
frxAIR1.ShowReport;
end;
const
siSection = 'Memo';
siCount = 'Count';
siLine = 'Line';
…
var f: TIniFile; i: Integer;
begin
if SaveDialog1.Execute then begin
f := TIniFile.Create( SaveDialog1.FileName );
f.WriteInteger( siSection, siCount, Memo1.Lines.Count );
for i:= 1 to Memo1.Lines.Count
do f.WriteString( siSection, siLine + IntToStr(i), Memo1.Lines[i-1] );
f.Free;
end;
end;
…
var f: TIniFile; i: Integer;
begin
if OpenDialog1.Execute then begin
f := TIniFile.Create( OpenDialog1.FileName );
Memo2.Lines.Clear;
for i:= 1 to f.ReadInteger( siSection, siCount, 1 )
do Memo2.Lines.Add( f.ReadString( siSection, siLine + IntToStr(i), '' ));
f.Free;
end;
end;