Clipboard-Tool zum selbsterweitern

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Clipboard-Tool zum selbsterweitern

Beitrag von Xaby »

Hab heute nicht nur die ewig lange PDF verfasst, die dann erstmal aus Gründen des Anstands im Müll gelandet ist, habe mich auch ein bisschen programmtechnisch geübt.

Vielleicht findet ja diese Anwendung Platz im CodeArchive, als TUT.
Klar, dann muss es noch etwas schicker gemacht werden :?

Code: Alles auswählen

; Autor : Folker Linstedt
; Thema : ClipBoard-Tool
; Date  : 08|06| 2007
; PB-V  : 4.02


Procedure.l IsInList(ListGadget.l,Text$)
  Dings.l=0
  
  For i=1 To CountGadgetItems(ListGadget)
   
    Text$=StringField(Text$,1,Chr(10)) ; nur erste Zeile!!!

    If GetGadgetItemText(ListGadget,i-1,0) = Text$
      Dings=i
      
    EndIf
  Next
  
  SetGadgetState(ListGadget,Dings-1)
  
  ProcedureReturn Dings
EndProcedure  
  

Enumeration
  #MainWin
  
  #AddOben
  #AddUnten
  
  #Liste
  
  #Menu
  #Edit
  
  #ToolBar
EndEnumeration


Procedure SaveList(Name.s)
  If CreateFile(0, Name)
    For m=0 To CountGadgetItems(#Liste)-1
      WriteStringN(0,GetGadgetItemText(#Liste,m,0),#PB_Unicode)
      
    Next
    CloseFile(0)
  EndIf
EndProcedure

Procedure LoadList(Name.s)
  m.l=-1
  If ReadFile(0, Name)
    ClearGadgetItemList(#Liste)
    While Not Eof(0)
      m+1
      AddGadgetItem(#Liste,m,ReadString(0,#PB_Unicode))
    Wend
    CloseFile(0)
  EndIf
EndProcedure


Procedure AddToList(Position)
  If Not IsInList(#Liste,GetClipboardText())
    AddGadgetItem(#Liste,Position,GetClipboardText())
    If CountGadgetItems(#Liste) % 2 = 1
       Color=RGB(230,230,255)
      Else
       Color=RGB(255,230,230)
    EndIf
    SetGadgetItemColor(#Liste, Position, #PB_Gadget_BackColor,Color)
    ;SetGadgetItemColor(#Liste, Position, #PB_Gadget_BackColor,RGB(128,0,255))
  EndIf  
EndProcedure

Procedure AddtoListP()
  If GetMenuItemState(#Menu,5)=1
    AddToList(0)
  Else
    AddToList(CountGadgetItems(#Liste))
  EndIf  
EndProcedure


OpenPreferences("CopyBoard.ini")
Global WinPosX_MainWin.l=ReadPreferenceLong("WINDOW_XPOS_MAIN",50);
Global WinPosY_MainWin.l=ReadPreferenceLong("WINDOW_YPOS_MAIN",50);
Global WinONTOP_MainWin.l=ReadPreferenceLong("WINDOW_ONTOP_MAIN",1);
Global AutoPaste_MainWin.l=ReadPreferenceLong("AutoPaste_MAIN",1);
Global WriteAP_MainWin.l=ReadPreferenceLong("WriteAP_MAIN",1);
Global Position_MainWin.l=ReadPreferenceLong("Position_MAIN",1);
Global ClipBoardName.s =ReadPreferenceString("ClipBoardName","ClipBoard.txt")
ClosePreferences()


Procedure SavePreferences()
  
  CreatePreferences("CopyBoard.ini")
  WritePreferenceLong("WINDOW_XPOS_MAIN",WindowX(#MainWin))
  WritePreferenceLong("WINDOW_YPOS_MAIN",WindowY(#MainWin))
  WritePreferenceLong("WINDOW_ONTOP_MAIN",WinONTOP_MainWin)
  WritePreferenceLong("AutoPaste_MAIN",AutoPaste_MainWin)
  WritePreferenceLong("WriteAP_MAIN",WriteAP_MainWin)
  WritePreferenceLong("Position_MAIN",Position_MainWin)
  WritePreferenceString("CLIPBOARDNAME",ClipBoardName)
  
  ClosePreferences()
EndProcedure  



NewList Clips.s()


If OpenWindow(#MainWin,WinPosX_MainWin,WinPosY_MainWin, 150,400,":: FL :: CopyBoard") And CreateGadgetList(WindowID(#MainWin))

  ;/ Menu
  CreateMenu(#Menu,WindowID(#MainWin))
  MenuTitle("List")
  MenuItem(1,"Edit") ; also Save as here is possible
  MenuItem(0,"Load again") ; after Save with Editor
  MenuItem(3,"save")
  MenuBar()
  MenuItem(2,"Stay on top")
  SetMenuItemState(#Menu,2,WinONTOP_MainWin)  ; ist sinnvoller es anzuschalten
  MenuTitle("Paste to List")
  MenuItem(5,"paste on top")
  SetMenuItemState(#Menu,5,Position_MainWin)
  MenuBar()
  MenuItem(6,"auto paste")
  SetMenuItemState(#Menu,6,AutoPaste_MainWin)
  
  
  ;/ Toolbar
  CreateToolBar(#ToolBar,WindowID(#MainWin))
  ToolBarStandardButton(0, #PB_ToolBarIcon_Save ) ; Speichert die Liste (falls Windows vor dem Schließen abstürzt)
    ToolBarToolTip(#ToolBar, 0, "save List")
    ToolBarStandardButton(1, #PB_ToolBarIcon_Open) ; Öffnet Editor
    ToolBarToolTip(#ToolBar, 1, "open in Editor")
  ToolBarSeparator()
  ;ToolBarToolTip(#ToolBar, 2, "auto paste on/off")
  ;SetToolBarButtonState(#ToolBar, 2, AutoPaste_MainWin)
  ToolBarStandardButton(10,#PB_ToolBarIcon_Copy)
  ToolBarToolTip(#ToolBar, 10, "copy or write selected text")
  ToolBarStandardButton(11,#PB_ToolBarIcon_Paste)
  ToolBarToolTip(#ToolBar, 11, "paste to list")
  ToolBarSeparator()
  ToolBarStandardButton(12, #PB_ToolBarIcon_Delete)
  ToolBarToolTip(#ToolBar, 12, "delete selected text from list")
  
  ;/ Gadgets
  ButtonGadget(#AddOben,0,0+ToolBarHeight(#ToolBar),150,20,"add ClipboardText")
  ButtonGadget(#AddUnten,0,400-20-MenuHeight(),150,20,"add ClipboardText")
  ListIconGadget(#Liste,0,40+ToolBarHeight(#ToolBar),150,300-ToolBarHeight(#ToolBar),"Clipboard",120,#PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection |#PB_ListIcon_GridLines)
  
  
  StickyWindow(#MainWin,GetMenuItemState(#Menu,2))
  
  LoadList(ClipBoardName)
  
Repeat

  event= WaitWindowEvent(100) ; überprüft alle 100 Millisekunden
  
  If GetMenuItemState(#Menu,6)=1
    AddtoListP()
  EndIf
  

If event=#PB_Event_Gadget
  GadgetNr=EventGadget()
  
  If GadgetNr=#AddOben
     AddToList(0)
  EndIf
  If GadgetNr=#AddUnten
    AddToList(CountGadgetItems(#Liste))
  EndIf 
EndIf

If event=#PB_Event_Menu
  MenuNr = EventMenu()
  
  If MenuNr=2
    SetMenuItemState(#Menu,2, 1-GetMenuItemState(#Menu,2))
    WinONTOP_MainWin=GetMenuItemState(#Menu,2)
    StickyWindow(#MainWin,WinONTOP_MainWin)  
  EndIf
  
  If MenuNr=1
    SaveList(ClipBoardName)
    RunProgram(ClipBoardName)
    ; OpenEditor
  EndIf
  
  If MenuNr=0 ; Load again
    LoadList(ClipBoardName)
    
  EndIf
  
  
  
  If MenuNr=6
    SetMenuItemState(#Menu,6, 1-GetMenuItemState(#Menu,6))
    AutoPaste_MainWin=GetMenuItemState(#Menu,6)
  EndIf
  
  If MenuNr=5
    SetMenuItemState(#Menu,5, 1-GetMenuItemState(#Menu,5))
    Position_MainWin=GetMenuItemState(#Menu,5)
  EndIf
  
  If MenuNr=10
    If GetGadgetState(#Liste)<>-1
      SetClipboardText(GetGadgetItemText(#Liste,GetGadgetState(#Liste),0))
    EndIf  
  EndIf
  
  
  If MenuNr=11
    AddtoListP()
  EndIf
  
  If MenuNr=12
    RemoveGadgetItem(#Liste, GetGadgetState(#Liste))
  EndIf  
   
EndIf

Until event=#PB_Event_CloseWindow


SavePreferences()
SaveList(ClipBoardName)

CloseWindow(#MainWin)

EndIf
ToDo hat geschrieben: - DoppelKlick auf Liste schreibt Zeile in Zwischenablage,
- Drag'n'Drop
- verschiedene Listen zum schnellen Anwählen
- ein automatischer Einfüge Modus
- BUG beseitigen bei der Festlegung der Farben in den Zeilen
Bis hierhin ist das Programm noch nicht sehr umfangreich.
Hier hat nun jeder, wer will eine Grundlage, um sich ein bisschen mit den Gadgets und der Zwischenablage zu beschäftigen.

Selbst hab ich natürlich auch noch ne Menge Ideen, was ich dazu fügen würde und möchte. Aber das werdet ihr ja noch sehen.

Bis dahin eine sehr frühe Version. Deshalb auch noch nicht bei FeedBack.

Hoffe, es hilft wem.

Gruß, Folker
Kinder an die Macht http://scratch.mit.edu/