blokowanie klawiszy skrotow

0

Hi all!
Co mam zrobic, aby zablokowac skrot klawiszowy "ctrl+c" w obiekcie Memo?
W Delphi ma sie rozumiec :).
Tak aby nic sie niedzialo po jego nacisnieciu.

Prosze o odpowiedz.

Ogolnie jak by nie dzialala ta kombinacja klawiszy w calym programie to nie bylo by roznicy oczywiscie wiec jak nie wiecie jak zrobic to na 1 obiekcie to powiedzcie chociaz jak to w ogóle zrobic chociazby na calym programie

0

chyba w FAQu jest - jeśli chcesz zablokować kopiowanie to możesz monitorować schowek - też chyba w FAQu jest

0

nie widzialem tego w faq ale jak mowisz ze jest to poszukam jeszcze raz -.-" moze cos znajde

0

Jak założyć globalnego Hooka niskiego poziomu na klawiaturę
monitorować schowek możesz np na styl tego

0

ale ja chce zablokowac tylko ctrl+c nic wiecej -.- zna ktos cos co robi wlasnie tylko to?

sorry ctrl+c i oczywiscie ctrl+shift+c ma sie rozumiec xD

0

Może użyj TJvMemo z pakietu JEDI? Pozwala ono na wybieranie dozwolonych opcji schowka i posiada jeszcze kilka użytecznych opcji.

0

ja jednakowos wole na normalnym memo dzialac

0

Po prostu przypisz skrot ctrl+c do memo i podczep do niego pusta procedure :P

0

Eh ....
Przenioslem polecenie przyciskow na inna funkcje ale nie wiele to dalo...
Do memo utworzylem taka procedure:

procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
begin
  if(key = #3) then
  begin
  MaskEdit1.CopyToClipboard
  end;
end;

No i byl sobie MaskEdit z ktorego Memo mialo brac dane..
No i pozornie dzialalo bo jak sie nic nie zaznaczalo to pobieral dane z MaskEdit, ale jak juz sie cos zaznaczylo w Memo to... to normalnie szlo to skopiowac :(

Jak ktos wie jak to naprawic to niech mi powie plsss...

0

Czyli Ci jednak wczoraj nie pomogłem (vide rozmowa na gg)? :-/

Co to za znak #3?

0

#3 to znak ascii oznaczajacy ctrl+c
a rozmowa na gg nie pomogla :( bo jednak musi to byc memo bo tamto i tak nawet jak sie zrobilo na aktywne to richedit to scroll tez byl nieaktywny i nie dalo sie w ogóle poruszac... do tego te litery ...

O a tu zamiescilem ten kod razem z kawalkiem aplikacji przedstawiajacy mniej wiecej jak to wyglada z tym maskedit i memo:

Link:
http://www.megaupload.com/?d=3HFW5B8E

0

Wpadłem na pomysł - trochę na około, ale zawsze cos :P

Jeśli zależy Ci na tym, żeby nie kopiowano tekstu, który jest w memo, zrób tak:

  1. Zmień memo na richedit
  2. On ma procedurkę OnChangeSelection (czy jakoś tak), dzięki temu będziesz blokował zaznaczanie tekstu, czyli jego kopiowanie również ;P
  3. W onChangeSelection wpisz
if richedit.selLength>0 then richedit.sellength=0;

Jak już mówiłem trochę na około, ale jak ktoś będzie chciał zaznaczyć tekst, to nie będzie mógł :)

0

ale mi zalerzy na Memo :(

0

To będzie ciężko. :P A co jest takiego w TMemo, że nawet pochodnych komponentów nie chcesz próbować?:>

0

Za dużo kombinujecie :) Wystarczy przypisać skrót do jakiegokolwiek obiektu, który ma atrybut "ShortCut", ale który nie wykonuje żadnej procedury. Wtedy Ctrl+C będzie wywoływać pustą procedurę. Nawet to przed chwilą testowałem - działa jak trzeba i w Memo nie idzie kopiować

0

Ale jeśli kursor jest w memo, to skrot ctrl+c raczej nie będzie działał.

Tzn Wykona się i kopiowanie i "pusta procedura" :P

Tak mi się przynajmniej wydaje, może napisałem bzdurę ;)

0

BatSk8 to moze wez wyskuj na jakis server kod zrodlowy i exeka tego co zrobiles to zobaczymy czy zeczywiscie dziala :D i przy okazjiu sobie to wladuje w program

0
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, StdCtrls;

type
  Tformatka = class(TForm)
    memek: TMemo;
    menu: TMainMenu;
    p1: TMenuItem;
    popek: TPopupMenu;
    test1: TMenuItem;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  formatka: Tformatka;

implementation

{$R *.dfm}

end.
object formatka: Tformatka
  Left = 217
  Top = 142
  Width = 696
  Height = 480
  Caption = 'formatka'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  Menu = menu
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object memek: TMemo
    Left = 208
    Top = 144
    Width = 185
    Height = 89
    Lines.Strings = (
      'memek')
    PopupMenu = popek
    TabOrder = 0
  end
  object menu: TMainMenu
    Left = 72
    Top = 56
    object p1: TMenuItem
      Caption = 'test'
      ShortCut = 16451
    end
  end
  object popek: TPopupMenu
    Left = 136
    Top = 56
    object test1: TMenuItem
      Caption = 'test'
    end
  end
end
program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {formatka};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(Tformatka, formatka);
  Application.Run;
end.

Miłego kompilowania.

PS: dodałem popup menu, żeby zablokować domyślny popup wytnij\kopiuj\wklej

0

calkiem pomyslowe, ale czym mozna zastapic te menu bo ja w moim programie nie bede stosowam menu beda tam tylko przyciski, memo, 2 from, obrazek, pasek stanu, i popup menu (w memo ma sie rozumiec) i nic wiecej ... a przeciez w menu jest ShortCut = 16451 -.-" wiec czym mogl bym to zastapic te menu?

0
zoNE napisał(a)

calkiem pomyslowe, ale czym mozna zastapic te menu bo ja w moim programie nie bede stosowam menu beda tam tylko przyciski, memo, 2 from, obrazek, pasek stanu, i popup menu (w memo ma sie rozumiec) i nic wiecej ... a przeciez w menu jest ShortCut = 16451 -.-" wiec czym mogl bym to zastapic te menu?

chłopie weź sobie wstaw na formę PaintBoxa i oprogramuj sam wszystko to nie będziesz miał problemów!! Co za ludzie tego nie bo nie tamtgego nie bo brzydkie. Opanujcie się!!!

0

wiec czym mogl bym to zastapic te menu?

Weź wstaw sobie PopupMenu, nazwij popek, dodaj do Memo. Pierwszej pozycji dodaj skrót Ctrl+C i ustaw Visible na False oraz Caption na nic. Wtedy nie będzie widać menu kontekstowego, a Ctrl+C będzie zablokowany :) Nie ma to jak domowe metody ;)
Co do zmiany komponentu - nie będę tego komentować, bo po prostu powinno korzystać się w pierwszym rzędzie z komponentów w standardzie, które są zwarte z windowsem i generowanie przez Windows, nie przez Delphi. Skoro ktoś robi prosty program - nie ma po co instalować nowych komponentów, skoro z Memo można zrobić także wszystko co się chce. Ja przez pare lat miałem Delphi bez dostępu do internetu, nie mogłem ściągać komponentów, dlatego miałem to co w standardzie i w zupełności wystarczało. A jak miałem problem to kombinowałem tak długo, aż wyjdzie to co chciałem zrobić i ten sposób na blokadę Ctrl+C jest jednym z moich wymyślonych :)

0

dzieki ci wielkie :D [diabel]

1 użytkowników online, w tym zalogowanych: 0, gości: 1