Autor Beitrag
Calyptus
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 386

Win Xp Prof
D3, D6 Pers, D7 Ent
BeitragVerfasst: Di 08.03.05 22:41 
Hallo...

Erstmal: ich weiß das es kein guter Titel ist, aber mir ist nix besseres eingefallen.

Wenn in der Zwischenablage Text gespeichert ist, dann soll der in einem RichEdit ausgegeben werden. Aber nur einmal, bis er sich ändert. Aber es kommt bei jedem Timer Durchlauf. Kann mir jemand sagen was ich falsch mache?

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm1.Timer1Timer(Sender: TObject);
var oldText: String;
begin
 if Clipboard.HasFormat(CF_Text)  then
  begin
    if not (Clipboard.AsText = oldText) then
     RichEdit1.Lines.Add(Clipboard.AsText);
    oldText := Clipboard.AsText;
  end;
end;

_________________
Luft- und Raumfahrtechnik an der Uni Stuttgart
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 08.03.05 23:03 
Du musst dich in die Clipboard-Kette einklinken:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
program ClipViewer;

{$R resource.res}

uses
  windows, messages;

const
  WM_RESETSELECTION = WM_USER + 1;

var
  hNextViewer: DWORD;

function DlgFunc(hWnd: hWnd; uMsg: dword; wParam: wparam; lParam: lParam):
  bool; stdcall;
var
  hClipbrdObj: THandle;
  pClipbrdObj: Pointer;
  rect: TRect;
begin
  result := true;
  case uMsg of
    WM_INITDIALOG:
    begin
      { Icon dem Fenster zuweisen }
      SendMessage(hWnd, WM_SETICON, ICON_BIG, Integer(LoadIcon(HInstance,
        MAKEINTRESOURCE(1))));
      { Programm in die Clipboardviewer-Kette einklinken }
      hNextViewer := SetClipBoardViewer(hWnd);
    end;
    WM_CHANGECBCHAIN:
    begin
      if wParam = hNextViewer then
        hNextViewer := lParam
      else if hNextViewer <> 0 then
        SendMessage(hNextViewer, uMSG, wParam, lParam);
    end;
    WM_SIZE:
    begin
      { Edit an Fenstergröße anpassen }
      if GetClientRect(hWnd, Rect) then
      SetWindowPos(GetDlgItem(hWnd, 101), 0, Rect.Left, Rect.Top,
        Rect.Right - Rect.Left, Rect.Bottom - Rect.Top, SWP_NOZORDER);
    end;
    WM_DRAWCLIPBOARD:
    begin
      { Clipboard öffnen }
      OpenClipboard(hWnd);
      { Handle auf das Clipboardobjekt holen }
      hClipbrdObj := GetClipboardData(CF_TEXT);
      if hClipbrdObj <> 0 then
      begin
        { Zeiger auf den Speicherblock holen }
        pClipbrdObj := GlobalLock(hClipbrdObj);
        { Clipboardinhalt anzeigen }
        SendMessage(GetDlgItem(hWnd, 101), WM_SETTEXT, 0, Integer(pClipbrdObj));
        PostMessage(hWnd, WM_RESETSELECTION, 00);
      end;
      { und aufräumen }
      GlobalUnlock(DWORD(pClipbrdObj));
      GlobalFree(hClipbrdObj);
      CloseClipBoard;
    end;
    WM_RESETSELECTION: SendMessage(GetDlgItem(hWnd, 101),EM_SETSEL, 00);
    WM_CLOSE:
    begin
      { Programm wieder aus der Clipboardviewer-Kette raus nehmen }
      ChangeClipBoardChain(hWnd, hNextViewer);
      EndDialog(hWnd, 0)
    end;
  else result := false;
  end;
end;

begin
  DialogBoxParam(hInstance, MAKEINTRESOURCE(100), 0, @dlgfunc, 0);
end.

Mal ein kleines Demo Programm von mir.
matze.de
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 576

Win95, Win98 SE, WinXp Prof SP2
D7P, D8P, FPC2.0
BeitragVerfasst: Di 08.03.05 23:04 
du musst vorher RichEdit.Clear machen um den Edit zu Clearen.

mfg matze

_________________
si tacuisses, philosophus mansisses.