- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在主菜单上使用标准的剪切,复制,粘贴操作。它们具有快捷键Ctrl-X,Ctrl-C和Ctrl-V。
当我打开模态表单时FindFilesForm.ShowModal,然后所有快捷方式都可以从表单中使用。
但是当我打开非模式形式时,例如FindFilesForm.Show,然后快捷方式不起作用。
我认为,如果FindFilesForm是事件表单,则这些操作应该起作用。它的形式应该与它无关,还是我的想法不对?
但是,如何获得用于非模式形式的快捷方式?
卡里的回应后,我进一步研究了它。某些控件(例如TMemo或TEdit。
但这是对其他人的。具体来说,发生这种情况的地方包括:
1 Câu trả lời
好的,首先要考虑的是:这与模态或非模态形式无关,这是Delphi操作组件工作方式的限制(如果您要这样称呼)。
让我通过一个简单的示例来证明这一点:创建一个具有新表单的新应用程序,将TMemo
VàTComboBox
放在其上,然后运行该应用程序。这两个控件都将具有系统提供的带有编辑命令的上下文菜单,并且将对它们做出正确的 react 。它们将对菜单快捷键执行相同的操作,但组合框不支持Ctrl +A。
现在添加一个TActionList
组件,其中包含用于剪切,复制和粘贴的三个标准 Action 。事情仍然会奏效,行为没有任何变化。
现在添加一个主菜单,并从模板中添加“编辑菜单”。删除所有命令,但剪切,复制和粘贴命令除外。为菜单项设置相应的操作组件,然后运行应用程序。观察组合框如何仍然具有上下文菜单,并且那里的命令仍然有效,但是快捷方式不再起作用。
问题在于标准编辑操作仅设计用于TCustomEdit
控件。看一下StdActns.pas中的TEditAction.HandlesTarget()
方法。由于组合框中的编辑控件,树形控件中的就地编辑器或 native 对话框中的编辑控件都不会被此控件捕获,因此将无法对其进行处理。当其中一个控件具有焦点时,菜单命令将始终被禁用。至于快捷方式仅在某些时间有效-这取决于VCL是否在某些时候将快捷方式映射到操作命令。如果没有,那么他们最终将到达 native 窗口过程并启动edit命令。在这种情况下,快捷方式仍然可以使用。我假设对于模态对话框, Action 处理被暂停,因此模态对话框和非模态对话框的行为是不同的。
要解决此问题,您可以为这些标准操作的OnExecute
提供处理程序。例如,粘贴命令:
procedure TMainForm.EditPaste1Execute(Sender: TObject);
khác nhau
FocusWnd: HWND;
begin
FocusWnd := GetFocus;
if IsWindow(FocusWnd) then
SendMessage(FocusWnd, WM_PASTE, 0, 0);
end;
WM_CUT
)和Copy命令(
WM_COPY
)的类似处理程序。在小型演示应用程序中执行此操作可使组合框再次正常工作。您应该尝试使用您的应用程序,但是我认为这会有所帮助。为所有 native 编辑控件正确启用和禁用主菜单命令是一项艰巨的任务。也许您可以发送
EM_GETSEL
消息来检查焦点编辑控件是否具有选择。
TWinControl.IsMenuKey()
中-它试图在父窗体的 Action 列表之一中查找 Action 组件处理快捷方式的集中控件的控件。如果失败,它将发送
CM_APPKEYDOWN
消息,最终导致对应用程序主窗体的 Action 列表执行相同的检查。事情是这样的:仅在启用应用程序主窗体的窗口句柄的情况下才能执行此操作(请参见
TApplication.IsShortCut()
代码)。现在,在表单上调用
ShowModal()
将禁用所有其他表单,因此,除非模式对话框自身包含具有相同快捷方式的 Action ,否则 native 快捷方式处理将起作用。
Enabled
tài sản.
procedure TForm1.ActionList1Update(Action: TBasicAction; var Handled: Boolean);
khác nhau
IsEditCtrl, HasSelection, IsReadOnly: boolean;
FocusCtrl: TWinControl;
FocusWnd: HWND;
WndClassName: string;
SelStart, SelEnd: integer;
MsgRes: LRESULT;
begin
if (Action = EditCut1) or (Action = EditCopy1) or (Action = EditPaste1) then
begin
IsEditCtrl := False;
HasSelection := False;
IsReadOnly := False;
FocusCtrl := Screen.ActiveControl;
if (FocusCtrl <> nil) and (FocusCtrl is TCustomEdit) then begin
IsEditCtrl := True;
HasSelection := TCustomEdit(FocusCtrl).SelLength > 0;
IsReadOnly := TCustomEdit(FocusCtrl).ReadOnly;
end else begin
FocusWnd := GetFocus;
if IsWindow(FocusWnd) then begin
SetLength(WndClassName, 64);
GetClassName(FocusWnd, PChar(WndClassName), 64);
WndClassName := PChar(WndClassName);
if AnsiCompareText(WndClassName, 'EDIT') = 0 then begin
IsEditCtrl := True;
SelStart := 0;
SelEnd := 0;
MsgRes := SendMessage(FocusWnd, EM_GETSEL, WPARAM(@SelStart),
LPARAM(@SelEnd));
HasSelection := (MsgRes <> 0) and (SelEnd > SelStart);
end;
end;
end;
EditCut1.Enabled := IsEditCtrl and HasSelection and not IsReadOnly;
EditCopy1.Enabled := IsEditCtrl and HasSelection;
// don't hit the clipboard three times
if Action = EditPaste1 then begin
EditPaste1.Enabled := IsEditCtrl and not IsReadOnly
and Clipboard.HasFormat(CF_TEXT);
end;
Handled := TRUE;
end;
end;
IsReadOnly := GetWindowLong(FocusWnd, GWL_STYLE) and ES_READONLY <> 0;
关于delphi - 如何防止快捷方式在Delphi中碰撞/交互?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1852976/
Tôi cần đặt văn bản vào một Div, vào một Div khác, vào một Div khác nữa. Vậy thì trông nó như thế này: #document Thay đổi mã PIN
Một điều kỳ lạ đã xảy ra. Tôi có một mã HTML cơ bản. html, đầu, thân. (Vì tôi nhận được một số phiếu bầu không tốt, đây là mã đầy đủ) Đây là CSS của tôi: html { background
Tôi đang cố gắng tải một tập hợp hình ảnh từ Assets vào ImageView có trong UICollectionview nhưng bất cứ khi nào tôi chạy ứng dụng, nó đều hiển thị lỗi. Và cũng không có hình ảnh nào được hiển thị. Tôi đang sử dụng
Tôi cần thay đổi một số biến môi trường dựa trên đầu ra của tập lệnh perl có tham số. Trong tcsh, tôi có thể sử dụng lệnh bí danh để đánh giá đầu ra của một tập lệnh perl. tcsh: bí danh setsdk 'eval `/localhome/
Tôi đã tạo một ứng dụng Blazor (phía máy chủ) mới bằng Windows Authentication và chạy nó bằng IIS Express. Nó sẽ hiển thị thông báo "Xin chào Domain\User!" ở góc trên bên phải sau Ra
Đây là phương thức void login(Event event); của tôi. Tôi muốn biết cách thực hiện điều này trong Kotlin. Câu trả lời hay nhất Trong Kotlin, toán tử đại diện là *. Nó hướng dẫn trình biên dịch rằng nó không được biết đến, nhưng một khi nó được biết đến, không có lớp nào khác
Xem mã sau cho câu chuyện trong sách nếu story.title.length < 140 - var story
Tôi đang cố gắng học cách xử lý chuỗi trong C. Tôi đã viết một chương trình lưu trữ một số bản nhạc và giúp người dùng kiểm tra xem bài hát mà họ đang nghĩ đến có tồn tại trong số các bản nhạc đã lưu trữ hay không. Điều này được thực hiện bằng cách yêu cầu người dùng nhập một chuỗi ký tự. Chương trình sau đó sử dụng strstr()
Tôi đang học sscanf và thấy một chuỗi định dạng như thế này: sscanf("%[^:]:%[^*=]%*[*=]%n",a,b,&c); Tôi hiểu phần %[^:] có nghĩa là quét cho đến khi gặp ':' và gán nó cho a. :
def char_check(x,y): nếu (str(x) trong y hoặc x.find(y) > -1) hoặc (str(y) trong x hoặc y.find(x) > -1):
Tôi có một tình huống muốn đưa các dòng hiện có từ một tệp văn bản vào một khối mới. dòng 1 dòng 2 dòng trong khối dòng 3 dòng 4 phải trở thành dòng 1 dòng 2 dòng
Tôi có một dự án mới và đang cố gắng thiết lập thanh công cụ gỡ lỗi Django. Đầu tiên, tôi thử thiết lập nhanh, chỉ cần thêm 'debug_toolbar' vào danh sách các ứng dụng đã cài đặt. Với điều này, khi tôi đi đến URL gốc của mình, gỡ lỗi
Trong Matlab, nếu tôi có một hàm f, với chữ ký f(a,b,c), tôi có thể tạo một hàm chỉ có một biến b sẽ gọi f với a=a1 và c=c1 cố định: g = @(b) f(a1, b,
Tôi không hiểu tại sao lại có khoảng cách dọc bổ sung giữa các phần tử trong ForEach bên trong VStack để hiển thị bộ chia ngang tùy chỉnh khi sử dụng GeometryReader bên trong ScrollView. Cuộn
Tôi tự hỏi, có hướng dẫn hoặc biện pháp tốt nhất nào về thời điểm sử dụng phiên và cookie không? Những gì nên và không nên lưu trữ trong đó? Cảm ơn! Câu trả lời hay nhất Các tài liệu này cung cấp hiểu biết tốt về các vấn đề bảo mật của cookie phiên và
Tôi có một ma trận Nx3 trong scipy/numpy mà tôi muốn tạo một biểu đồ thanh 3 chiều, trong đó trục X và Y được xác định bởi các giá trị ở cột thứ nhất và thứ hai của ma trận, chiều cao của mỗi thanh là cột thứ ba trong ma trận và số thanh được xác định bởi N.
Giả sử tôi khởi tạo semaphore theo hai cách khác nhau sem_init(&randomsem,0,1) sem_init(&randomsem,0,0) Bây giờ, sem_wait(&randomsem) trong cả hai trường hợp
Tôi đang nghi ngờ cách giá trị được lưu trữ trong "WORD" vì PStr chứa đầu ra thực tế. ? Vì Pstr lưu trữ các chữ cái viết thường thành chữ hoa, làm sao để chuyển nó thành "WORD" trong printf? Có ai vui lòng giúp tôi được không? Bạn có thể giải thích được không? #bao gồm
Tôi có một mảng 3x3: var my_array = [[0,1,2], [3,4,5], [6,7,8]]; và muốn lấy 2 phần tử đầu tiên
Tôi nhận ra bạn có thể dễ dàng kiểm tra tiêu điểm bằng cách sử dụng lệnh sau: var hasFocus = true; $(window).blur(function(){ hasFocus = false; }); $(window
Tôi là một lập trình viên xuất sắc, rất giỏi!