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

Здесь есть возможность читать онлайн «Виртуальная библиотека Delphi» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Жанр: Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Виртуальная библиотека Delphi: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Виртуальная библиотека Delphi»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

Виртуальная библиотека Delphi — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Виртуальная библиотека Delphi», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

procedure TForm1.Button1Click(Sender: TObject);

var S : string;

begin

S:='1.';

with ListBox1 do ItemIndex := Perform(LB_SELECTSTRING, ItemIndex, LongInt(S));

end;

Более подробную информацию о работе команды LB_SELECTSTRING можно узнать из Help-а Win32.

Пример получения позиции курсора из компоненты TMemo.

procedure TForm1.Memo1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);

begin

Memo1Click(Self);

end;

procedure TForm1.Memo1Click(Sender: TObject);

VAR

LineNum : LongInt;

CharNum : LongInt;

begin

LineNum := Memo1.Perform(EM_LINEFROMCHAR, Memo1.SelStart, 0);

CharNum := Memo1.Perform(EM_LINEINDEX, LineNum, 0);

Label1.Caption := IntToStr(LineNum+1)+' : '+IntToStr((Memo1.SelStart-CharNum)+1);

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

Memo1Click(Self);

end;

Функция Undo в TMemo

В компоненте TMemo предусмотрена функция отмены последней правки (Undo). Ее можно вызвать следующим образом:

Memo1.Perform(EM_UNDO,0,0);

Узнать о том, возможна ли отмена (т.е. есть ли что отменять) можно следующим образом:

UndoEnabled:=(Memo1.Perform(EM_CAUNDO,0,0)<>0);

Как прокрутить текст в Tmemo или в TRichEdit

Я добавляю програмно несколько строк в конец поля Memo, а их не видно. Как прокрутить Memo, чтобы было видно последние строки ?

Примерно так:

SendMessage(Memo1.Handle, EM_LINESCROLL, 0, Memo1.Lines.Count-1);

Как определить работает ли уже данное приложение или это первая его копия?

Для Delphi 1. Каждый экземпляр программы имеет ссылку на свою предыдущую копию — hPrevInst: hWnd. Ее можно проверить перед созданием приложения и при необходимости отреагировать соответствующим образом. Если запущена только одна копия, то эта ссылка равна нулю.

Пример:

procedure TForm1.FormCreate(Sender: TObject);

begin

{Проверяем есть ли указатель на предыдущую копию приложения}

IF hPrevInst <> 0 THEN BEGIN

{Если есть, то выдаем сообщение и выходим}

MessageDlg('Программа уже запущена!', mtError, [mbOk], 0);

Halt;

END;

{Иначе - ничего не делаем (не мешаем созданию формы)}

end;

P.S. Для выхода необходимо использовать Halt, а не Close, как хотелось бы, так как форма еще не создана и закрывать нечего.

Есть и другой способ — по списку загруженных приложений

procedure TForm1.FormCreate(Sender: TObject);

VAR

Wnd : hWnd;

buff : ARRAY[0.. 127] OF Char;

Begin

Wnd := GetWindow(Handle, gw_HWndFirst);

WHILE Wnd <> 0 DO BEGIN

IF (Wnd <> Application.Handle) AND (GetWindow(Wnd, gw_Owner) = 0)

THEN BEGIN

GetWindowText (Wnd, buff, sizeof (buff ));

IF StrPas (buff) = Application.Title THEN

BEGIN

MessageDlg('Приложение уже загружено', mtWarning, [mbOk], 0);

Halt;

END;

END;

Wnd := GetWindow (Wnd, gw_hWndNext);

END;

End;

Еще один интересный способ для Win32. Дело в том, что можно в памяти создавать временные файлы. При перезагрузке они теряются, а так существуют. Кстати, этот метод можно использовать и для обмена информацией между вашими приложениями.

Пример:

program Project1;

uses

Windows, // Обязательно

Forms,

Unit1 in 'Unit1.pas' {Form1};

{$R *.RES}

Const

MemFileSize = 1024;

MemFileName = 'one_inst_demo_memfile';

Var

MemHnd : HWND;

begin

{ Попытаемся создать файл в памяти }

MemHnd := CreateFileMapping(HWND($FFFFFFFF),

nil,

PAGE_READWRITE,

0,

MemFileSize,

MemFileName);

{ Если файл не существовал запускаем приложение }

if GetLastError<>ERROR_ALREADY_EXISTS then

begin

Application.Initialize;

Application.CreateForm(TForm1, Form1);

Application.Run;

end;

CloseHandle(MemHnd);

end.

Часто при работе у пользователя может быть открыто 5–20 окон и сообщение о том, что программа уже запущено приводит к тому, что он вынужден полчаса искать ранее запущенную копию. Выход из положения — найдя копию программы активировать ее, для чего в последнем примере перед HALT необходимо добавить строку :

SetForegroundWindow(Wnd);

Например так:

uses

Windows, // !!!

Forms,

Unit0 in 'Unit0.pas' {Form1};

var

Handle1 : LongInt;

Handle2 : LongInt;

{$R *.RES}

begin

Application.Initialize;

Handle1 := FindWindow('TForm1',nil);

if handle1 = 0 then

begin

Application.CreateForm(TForm1, Form1);

Application.Run;

end

else

begin

Handle2 := GetWindow(Handle1,GW_OWNER);

//Чтоб заметили :)

ShowWindow(Handle2,SW_HIDE); ShowWindow(Handle2,SW_RESTORE);

SetForegroundWindow(Handle1); // Активизируем

end;

end.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «Виртуальная библиотека Delphi»

Представляем Вашему вниманию похожие книги на «Виртуальная библиотека Delphi» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «Виртуальная библиотека Delphi»

Обсуждение, отзывы о книге «Виртуальная библиотека Delphi» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x