Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Курсор в Memo, как убрать 
:(
    Опции темы
Rick
Дата 12.5.2006, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 4.11.2005
Где: Новосибирск

Репутация: нет
Всего: 3



Доброго времени суток!
У меня такая проблема...Нужно Memo полностью защитить от копирования.
ReadOnly поставил, контекстное меню убрал, но когда щелкаешь по полю правой кнопкой курсор встает на него и можно уже зажав Shift копировать...smile
Можно его совсем оключить? 
--------------------
Не бывает атеистов в окопах под огнем   
PM MAIL ICQ   Вверх
Alexeis
Дата 12.5.2006, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Rick, Эта тема уже обсуждалсь см. поиск 

http://forum.vingrad.ru/index.php?showtopi...%81%D1%82%D0%B0 

Это сообщение отредактировал(а) alexeis1 - 12.5.2006, 13:59


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Rick
Дата 12.5.2006, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 4.11.2005
Где: Новосибирск

Репутация: нет
Всего: 3



С Clipboard хороший способ. А как узнать активно сейчас окно программы или нет? 
--------------------
Не бывает атеистов в окопах под огнем   
PM MAIL ICQ   Вверх
Alexeis
Дата 12.5.2006, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Вот пример из DelphiWorld

У формы
Код

private
    procedure wmActivate (var Msg:TWMACTIVATE); message wm_Activate;


Код

procedure TForm1.WMActivate (var Msg:TWMActivate);
begin
  {если окно получило фокус ввода по щелчку мыши или как иначе...}
  if (Msg.Active = WA_ACTIVE) or (Msg.Active = WA_CLICKACTIVE)then
  begin
    {...тогда цвет панели делаем равным цвету активной заголовочной полосы окна}
    Pnl1.Color := clActiveCaption
  end
  {иначе...}
  else
    {...цвет панели будет соответствовать НЕактивной заголовочной полосе окна}
    Pnl1.Color := clInactiveCaption;
  inherited;
end;


Работает - сам проверял.
  

Это сообщение отредактировал(а) alexeis1 - 12.5.2006, 15:08


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Poseidon
Дата 12.5.2006, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



А не проще Tlabel использовать? Поставить белый фон, растянуть по высоте, убрать AutoSize и не отлечишь (визуально) от Memo 


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Rick
Дата 12.5.2006, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 4.11.2005
Где: Новосибирск

Репутация: нет
Всего: 3



Хм...неплохая идея, но Memo, к сожалению, уже реализована в программе...Clipboard в принципе подходит, но тогда буфер обмена в других программах тоже не работает. 
Таким образом можно отследить активацию окна
Код

(Msg.Active = WA_ACTIVE) or (Msg.Active = WA_CLICKACTIVE)


А как, наоборот, определить, что окно свернули? 
--------------------
Не бывает атеистов в окопах под огнем   
PM MAIL ICQ   Вверх
Poseidon
Дата 12.5.2006, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Цитата(Rick @  12.5.2006,  18:50 Найти цитируемый пост)
Хм...неплохая идея, но Memo, к сожалению, уже реализована в программе...
 Значит прикручивать защиту не влом, а переделать под Label влом?
Да там по сути все сводится к замене Memo.Text на Label.Caption. Если использовал Memo.Lines, то немного повозится нужно. Но все же повозится нужно менше, чем с защитой от копирования из Мемо, т.к. все варианты предусматреть очень сложно!
 


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
dimazu
Дата 12.5.2006, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 4.3.2006

Репутация: 4
Всего: 5



Если в лом на Label менять, то можно просто обработать wmPaint, а потом поставить enabled в false и 
все дела...
Типа вот так (где-то в примерах видел):

Код

unit my_memo;
interface
uses
  SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  Forms, Dialogs, StdCtrls;

type
  TMyMemo = class(TMemo)
  private
    { Private declarations }
    procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
  protected
    { Protected declarations }
  public
    { Public declarations }
  published
    { Published declarations }
  end;

procedure Register;

implementation

procedure TMyMemo.WMPaint(var Message: TWMPaint);
var
  Buffer: array[0..255] of Char;
  PaintStruc: TPaintStruct;
  DC: HDC;
  i: Integer;
  X, Y, Z: Word;
begin
  DC := Message.DC;
  if DC = 0 then
    DC := BeginPaint(Handle, PaintStruc);
  try
    X := 5;
    Y := 5;
    SetBkColor(DC, Color);
    SetBkMode(DC, Transparent);
    for i := 0 to Pred(Lines.Count) do
    begin
      SetTextColor(DC, clBlack);
      Z := Length(Lines[i]);
      StrPCopy(Buffer, Lines[i]);
      Buffer[Z] := #0;
      TextOut(DC, X, Y, Buffer, Z);
      Inc(Y, abs(Font.Height));
    end;
  finally
    if Message.DC = 0 then
      EndPaint(Handle, PaintStruc);
  end;
end;

procedure Register;
begin
  RegisterComponents('Custom', [TMyMemo]);
end;

end.

 
PM MAIL   Вверх
Rick
Дата 13.5.2006, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 4.11.2005
Где: Новосибирск

Репутация: нет
Всего: 3



Все же как отследить свертывание окна? 
--------------------
Не бывает атеистов в окопах под огнем   
PM MAIL ICQ   Вверх
Poseidon
Дата 13.5.2006, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Цитата(Rick @  13.5.2006,  22:28 Найти цитируемый пост)
Все же как отследить свертывание окна? 
 Один топик - один вопрос!

Самый простой способ: кидаешь на форму TApplicationEvents и обрабатываешь в нем OnMinimize

можно еще так:
Код
type
  TForm1 = class(TForm)
  private
    Procedure WMSysCommand(var Message :TMessage); message WM_SYSCOMMAND;

{...}

procedure TForm1.WMSysCommand(var Message: TMessage);
begin
if Message.wParam = SC_MINIMIZE
then
  if MessageDLG('Хотите минимизировать?', mtConfirmation    , [mbYes,mbNo], 0) = mrYes
  then inherited
  else
else inherited;
end;
 


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Rick
Дата 14.5.2006, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 4.11.2005
Где: Новосибирск

Репутация: нет
Всего: 3



Благодарю всех за помощь!

Проблему решил с помощью clipboard, но отслеживая активность окна. 
--------------------
Не бывает атеистов в окопах под огнем   
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0528 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.