![]() |
Zwischenablage Zugriff verweigert
Hallöle...8-)
Zitat:
![]() Mein MadExcept schließt immer die komplette Anwendung...:? Welche Möglichkeiten gibt es das anders abzufangen...:gruebel: PS: In meinen Anwendungen habe ich immer eine Schleife mit Abbruchbedingung um den Except Block...wie kriege ich das mit der Fremdkomponente hin? :gruebel: (ich weigere mich eigentlich bei DevExpress Workarounds einzuarbeiten...mit jeder neuen Version wieder von vorn. :roll:) Oder direkt im Vcl.Clipboard?
Delphi-Quellcode:
Was würdet ihr empfehlen? :wink:
procedure TcxCustomTextEdit.PasteFromClipboard;
var ANewSelStart: Integer; ANewText, S: string; begin if Clipboard.HasFormat(CF_TEXT) then if Focused then begin BeginUserAction; try S := Clipboard.AsText; if CanChangeSelText(S, ANewText, ANewSelStart) then InnerEdit.CallDefWndProc(WM_PASTE, 0, 0); finally EndUserAction; end; end else SelText := Clipboard.AsText; end; ... procedure TClipboard.Open; begin if FOpenRefCount = 0 then begin FClipboardWindow := Application.Handle; if FClipboardWindow = 0 then begin FClipboardWindow := AllocateHWnd(MainWndProc); FAllocated := True; end; if not OpenClipboard(FClipboardWindow) then raise EClipboardException.CreateResFmt({$IFNDEF CLR}@{$ENDIF}SCannotOpenClipboard, // <--- [SysErrorMessage(GetLastError)]); FEmptied := False; end; Inc(FOpenRefCount); end; |
AW: Zwischenablage Zugriff verweigert
Warum schließt MadExcept deine ganze Anwendung? Per Einstellung?
Dann solltest du sehen was das für eine Exception class ist und dafür sorgen dass die von MadExcept anders behandelt wird. |
AW: Zwischenablage Zugriff verweigert
Liste der Anhänge anzeigen (Anzahl: 1)
:P
Die Idee ist schon mal umgesetzt...(Bild) ...das löst aber leider nicht das grundsätzliche Problem. :( |
AW: Zwischenablage Zugriff verweigert
Zitat:
- Einen eigenen Branch mit deinen Anpassungen aufmachen. - Bei neuen Versionen diese in Main nachpflegen. - Main in deinen Branch mergen. |
AW: Zwischenablage Zugriff verweigert
:P
Zitat:
Ich fange mit jeder Version wieder an zu testen. :kotz: Aktuell wird das Grid komplett schwarz wenn ApplicationProcessMessages aufgerufen wird. (nicht fragen :?, Control/Form.Repaint in allen Varianten funktioniert trotz Aufruf teilweise nicht nicht. Die Labels und die Progressbar einer "StatusForm" (TForm) sind manchmal eingefroren) @Uwe: Du hast doch einen heißen Draht zu Emba. Vieleicht können sie die Schleife in TClipboard.Open einbauen. :zwinker: Vorschlag zum Optimieren: :wink:
Delphi-Quellcode:
procedure TClipboard.Open;
var OpenCount: Integer; OpenResult: LongBool; begin OpenCount := 0; OpenResult := False; if FOpenRefCount = 0 then begin FClipboardWindow := Application.Handle; if FClipboardWindow = 0 then begin FClipboardWindow := AllocateHWnd(MainWndProc); FAllocated := True; end; repeat Inc(OpenCount); OpenResult := OpenClipboard(FClipboardWindow); if not OpenResult then begin Sleep(30); end; until OpenResult or (OpenCount > 50); if not OpenResult then begin raise EClipboardException.CreateResFmt({$IFNDEF CLR}@{$ENDIF}SCannotOpenClipboard, [SysErrorMessage(GetLastError)]); end; FEmptied := False; end; Inc(FOpenRefCount); end; |
AW: Zwischenablage Zugriff verweigert
Zitat:
Laut DevExpress ist aktuell jemand dabei, sich der ganzen Fehler in den VCL Komponenten anzunehmen. Vermutlich sitzt der jemand gerade in einem Schützengraben, denn ich sehe keine Verbesserungen. Ich habe auch ein Problem mit meinem Pluginsystem. Ich habe diverse Dll's mit Dialogen die auch Grids enthalten. Klappt soweit wunderbar...bis ich das Form mit dem Grid im Hauptform einbette. Alle Komponenten funktionieren wie immer, nur in Grids bekommt man keinen sichtbaren Focus mehr auf Records. DevExpress stellt bei den Grids irgendwas mit der WindowProc an was es nicht überlebt wenn sich durch das einbetten das WindowHandle, etc ändert. |
AW: Zwischenablage Zugriff verweigert
[Luft ablassen ON]
Zitat:
|
AW: Zwischenablage Zugriff verweigert
Zitat:
Delphi-Quellcode:
Das erfordert aber eine Anpassung aller Open-Aufrufe.
type
TClipboardHelper = class helper for TClipboard function TryOpen(MaxTries: Integer = 50; Delay: Integer = 20): Boolean; end; function TClipboardHelper.TryOpen(MaxTries: Integer = 50; Delay: Integer = 20): Boolean; begin var cnt := 0; while True do begin try Open; Exit(True); except on EClipboardException do begin Inc(cnt); if cnt < MaxTries then Sleep(Delay) else Exit(False); end; end; end; end; |
AW: Zwischenablage Zugriff verweigert
...ich habe das mal im TcxCustomTextEdit.PasteFromClipboard integriert :wink:
Delphi-Quellcode:
procedure TcxCustomTextEdit.PasteFromClipboard;
var ANewSelStart: Integer; ANewText, S: string; function GetClipboardText: string; var RetryCount: Integer; Success: Boolean; begin RetryCount := 0; Success := False; while not Success do begin try Result := Clipboard.AsText; Success := True; except on EClipboardException do begin Inc(RetryCount); if RetryCount < 50 then begin Sleep(20) end else begin raise Exception.Create('Cannot read clipboard after fifty attempts'); // Exit(''); // Alternativ statt raise end; end else raise; end; end; end; begin if Clipboard.HasFormat(CF_TEXT) then begin if Focused then begin BeginUserAction; try S := GetClipboardText; if CanChangeSelText(S, ANewText, ANewSelStart) then InnerEdit.CallDefWndProc(WM_PASTE, 0, 0); finally EndUserAction; end; end else SelText := GetClipboardText; end; end; |
AW: Zwischenablage Zugriff verweigert
Man sollte eigentlich nie eine simple
Delphi-Quellcode:
werfen, da man damit dem Aufrufer die Möglichkeit nimmt, selektiv auf diese zu reagieren. Besser wäre hier wieder eine
Exception
Delphi-Quellcode:
oder ein schlichtes
EClipboardException
Delphi-Quellcode:
raise;
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:51 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz