simple Adressverwaltung für PB Demoversion 4.3 x86

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Beitrag von dysti »

auf die Schnelle,so geht es auch:

Code: Alles auswählen

EnableExplicit
Global k,j,x,y,wx,listhoehe,event,welchesgadget,maxbreite,maxbreite2,infolg,infosp,eingabesp,infosp2,eingabesp2
Global windowbreite,windowhoehe,welchesActiveGadget,ok,antwort,item,sorttiefe,datenposi,datenanzahl,sortoption
Global dnr
Global breite$,a$,s$,x$,ori$,saveinfo$,eingabe$,qitem$,sitem$,info$,file$,patt$
Define sort1, sort2, sort3
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

also ich weiß nicht...
das ist doch kein 20-zeiler wettbewerb...
gönn den defines ruhig ein paar mehr zeilen.

außerdem... warum machst du die meisten Global?
das ist doch ziemlich kontraduktiv.

wenn die ohne Explicit nicht Global sind, brauchen sie es mit auch nicht zu sein.

also echt, das is nix, sorry.
dann lieber garnicht als "auf die schnelle" :!:
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Beitrag von dysti »

....mags ja recht haben, es ging ja nur ums das "EnableExplicit "
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Beitrag von hjbremer »

Besteht Interesse an einem Update ?

Dieses ist immer noch lauffähig mit der DemoVersion und unterstüzt nun eigene Felddefinition, Laden von Dateien mit unterschiedlicher Feldanzahl und Drag Drop der Spalten
Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Beitrag von dysti »

....aber sicher doch!
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Beitrag von hjbremer »

Hier nun ein Update !

Damit es mit der Demoversion läuft, habe ich das Programm aufgeteilt. So ist nun Platz für weitere Erweiterungen. Wer die Vollversion hat, kann natürlich alles zusammenfassen.

Alle 4 Dateien kommen in logischerweise ins gleiche Verzeichnis. Die Dateinamen müssen mit den IncludeAnweisungen übereinstimmen.

Wer es testen mag, möge bitte etwas Feedback geben, als Anregung und zur Fehlerbeseitigung, denn Fehler gibt es bestimmt.

Code: Alles auswählen

;MiniAdr_Declare.pb
;Declare Anweisungen + Konstanten etc für MiniAdress

Declare MainInfo()
Declare CreateListIcon()
Declare CreateListIconColumn()
Declare DateiLaden(titel,flag=0)
Declare DateiNeu()
Declare DateiSpeichern(flag=0)
Declare DatenIni()
Declare DatenListe()
Declare DatenListeTitel(satz$)
Declare DatenNeu()
Declare DatenSortierenAuswahl()
Declare DatenSortierenEnde()
Declare DatenSortierenStart()
Declare DatenSuchListe()
Declare DatenSuchListeClose()
Declare DatenSuchen(abitem)
Declare Datenaendern()
Declare Datenloeschen()
Declare DatensuchenFirst(modus)
Declare DatensuchenNext()
Declare EingabeEnde()
Declare EingabeFenster(info$,vorgabe$,item)
Declare EingabeLeer()
Declare EingabeOk()
Declare Eingabecheck(pbnr)
Declare GetOrderArray()
Declare ListeAutosize(pbnr)
Declare TasteReturn()
Declare VergleicheSatz(q$,s$)
Declare.s DateiAuswahl(flag=0,dat$="")
Declare.s Datensatzholen(item)
Declare.s Datensatzholen_Save(item)
Declare.s ReadDatensatz(dnr)

Declare FeldAendern()
Declare FeldAendernCbox()
Declare FeldData()
Declare FeldEnde()
Declare FeldFenster()
Declare FeldGadgets(welchesgadget)
Declare FeldKill()
Declare FeldListbox()
Declare FeldNeu()
Declare FeldNeuCbox()
Declare FeldObenUnten(flag)
Declare FeldStart()
Declare FeldTest(pbnr,name$)

Declare TitelFenster(flag=0)
Declare TitelEnde()
Declare TitelListBox()
Declare TitelAendern()
Declare TitelLoeschen()
Declare TitelAnhaengen()

; Konstanten und Import Befehl nur für die Demoversion nötig
 #LF$ = Chr(10): #TAB$ = Chr(9)
 #WM_KEYDOWN = 256: #VK_RETURN = 13
 #WS_POPUPWINDOW = 2156396544: #EM_SETSEL = 177
 #MB_ICONEXCLAMATION = 48: #MB_ICONASTERISK = 64 
 #LVM_ENSUREVISIBLE = 4115
 #LVM_SETCOLUMNWIDTH = 4126
 #LVM_GETCOLUMNORDERARRAY = 4155
 #LVSCW_AUTOSIZE_USEHEADER = -2
 Import "USER32.lib" 
  SendMessage_(a.i,b.i,c.i,d.i) As "_SendMessageA" 
 EndImport

;Menu + Button Nummern als Konstanten
Enumeration  
#menu_new: #menu_load: #menu_load1: #menu_save: #menu_save1: #menu_ende
#menu_neu: #menu_edit: #menu_kill: #menu_such1: #menu_such2: #menu_suchN
#menu_sort
#menu_titel: #menu_spDel: #menu_spIns
#menu_info: #menu_inf1
#window_main: #main_liste: #main_info
#window_sort
#sort_box1: #sort_box2: #sort_box3: #sort_start: #sort_ende: #sort_gk: #sort_up: #sort_dn
#window_eingabe
#eingabe_leer: #eingabe_save: #eingabe_ende: #eingabe_scb1: #eingabe_scb2
#window_Feld
#feld_box: #feld_oben: #feld_unten: #feld_kill
#feld_cb1: #feld_ein1: #feld_name
#feld_cb2: #feld_ein2: #feld_neu
#feld_data: #feld_start: #feld_ende
#window_suchen
#suchliste: #suchlisteEnd
#window_Titel
#titel_box: #titel_ein: #titel_name: #titel_ende: #titel_kill
#taste_return
EndEnumeration

;weitere Konstanten
#suchart1 = "alle Eingaben enthalten"
#maxfelder = 20
#maxbreite = 200

Structure myProgrammvariablen
  dateiname.s
  desktopbreite.i     ;Breite des Monitors in Pixel
  desktophoehe.i      ;Höhe
  windowbreite.i      ;
  windowhoehe.i       ;
  subwindowx.i        ;
  subwindowy.i        ;
  buttonbr.i          ;Buttonbreite
  buttonhh.i          ;
  datensatz.s         ;letzter geladener, bearbeiteter Datensatz
  eingabeitem.i       ;
  suchmodus.i         ;enthalten im ganzen Datensatz oder im Feld
  suchwort.s
  suchsatz.s
  suchitem.i
  suchgk.i            ;bei Suche Groß/Kleinschrift beachten
  suchlv.i            ;
  suchart.s           ;für verschiedene Sucharten, in dieser Version nur eine
  feldanzahl.i        ;
  feldnamen.s[#maxfelder+1]     ;Platz für Felder reservieren = 0 - 20
  feldbreite.i[#maxfelder+1]    ;wir benutzen Feld null allerdings nicht
  eingabepbnr.i[#maxfelder+1]   ;für Identnummern der StringGadgets = Eingabefelder
  orderarray.i[#maxfelder+1]    ;für Drag and Drop = verschieben der Spalten
  titelflag.i                   ;für diverse Spalten Funktionen
EndStructure

Global prgv.myProgrammvariablen

Macro WinZeile(i)  ;zur Berechnung der Gadgetzeile im Eingabefenster
  10+((i)*30)      ;i muß in Klammern stehen, weil i z.B. j-1 sein kann
EndMacro

Code: Alles auswählen

;MiniAdr_Procedure0.pb
;Prozeduren für MiniAdress

Procedure MainInfo()
  
  x$ = "Bitte Datei öffnen oder Datei Neu wählen"
  
  flags = #PB_Text_Center|#PB_Text_Border|512
  TextGadget(#main_info,100,30,prgv\windowbreite-200,100,x$,flags)

EndProcedure

Procedure DatenIni()
With prgv
  ExamineDesktops()
  \desktopbreite = DesktopWidth(0)
  \desktophoehe = DesktopHeight(0) 
  \windowbreite = 650
  \windowhoehe = 500
  \subwindowx = 50
  \subwindowy = 30
  \buttonbr = 85
  \buttonhh = 22
  For j = 0 To #maxfelder
    \eingabepbnr[j] = j + #PB_Compiler_EnumerationValue 
  Next  
EndWith
EndProcedure
Procedure CreateListIcon()
  UseGadgetList(WindowID(#window_main))
  flags = #PB_ListIcon_HeaderDragDrop|#PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect
  ListIconGadget(#main_liste, 0, 0, prgv\windowbreite, prgv\windowhoehe-44, "Leer", 0, flags)
  If IsGadget(#main_info): FreeGadget(#main_info): EndIf
EndProcedure
Procedure CreateListIconColumn()
  For j = 1 To prgv\feldanzahl
    AddGadgetColumn (#main_liste, j, prgv\feldnamen[j],1) 
  Next
EndProcedure

Procedure DateiNeu()
 ;If IsGadget(#main_liste): ClearGadgetItems(#main_liste): EndIf
 prgv\dateiname = ""
 StatusBarText(0, 0, prgv\dateiname)
 FeldFenster()
EndProcedure  
Procedure DateiLaden(titel,flag=0)
  If titel = 0
     For j = 1 To #maxfelder: prgv\feldnamen[j] = Str(j): Next
  EndIf
  If flag = 0
    prgv\dateiname = DateiAuswahl(0,prgv\dateiname) 
  Else
    prgv\dateiname = GetCurrentDirectory() + "miniadress.txt"
  EndIf

  dnr = ReadFile(#PB_Any,prgv\dateiname)  
  If dnr
     j = 0
     While Eof(dnr) = 0          
        prgv\datensatz = ReadDatensatz(dnr)        
        If j = 0  ;wird nur einmal ausgeführt, um Liste zu erstellen
           j = 1
           prgv\feldanzahl = CountString(prgv\datensatz, #LF$) - 1
           If prgv\feldanzahl > 20
             MessageRequester("Error","mehr als 20 Felder",#MB_ICONASTERISK)
             End
           EndIf 
           CreateListIcon()
           CreateListIconColumn()
           HideGadget(#main_liste,1)      ;für schnelleres Laden der Liste        
        EndIf
        If titel
           titel = 0: DatenListeTitel(prgv\datensatz)
        Else
           AddGadgetItem(#main_liste,-1, prgv\datensatz)
        EndIf
     Wend
     CloseFile(dnr)
  EndIf
  
  StatusBarText(0, 0, prgv\dateiname)
  StatusBarText(0, 1, Str(CountGadgetItems(#main_liste)))
  ListeAutosize(#main_liste) ;enthält HideGadget(#main_liste,0)
EndProcedure
Procedure DateiSpeichern(flag=0)
  If prgv\dateiname = "" Or flag = 1
    prgv\dateiname = DateiAuswahl(1,prgv\dateiname)
  EndIf
  dnr = CreateFile(#PB_Any, prgv\dateiname)
  If dnr
    orderflag = GetOrderArray()
    For item = -1 To CountGadgetItems(#main_liste) - 1  ;ab -1 = Spaltentitel
      If orderflag
         x$ = Datensatzholen_Save(item) ;:Debug x$
      Else
         x$ = Datensatzholen(item) ;:Debug x$
      EndIf
      ReplaceString(x$,#LF$,#TAB$,#PB_String_InPlace)
      WriteStringN(dnr, x$)
    Next   
    CloseFile(dnr)
  EndIf
  StatusBarText(0, 0, prgv\dateiname)
  StatusBarText(0, 1, "gespeichert: " + Str(item)) 
EndProcedure

Procedure DatenSuchenFirst(modus)
If Not prgv\feldanzahl: ProcedureReturn: EndIf
  prgv\suchmodus = modus
  prgv\suchgk = 0
  Select modus
      Case 1
          prgv\suchwort = InputRequester("Suchen","Suchbegriff: ",prgv\suchwort)
          If prgv\suchwort = "": ProcedureReturn: EndIf
          prgv\suchitem = DatenSuchen(0)
          If prgv\suchitem = -1: MessageRequester("Information","nix gefunden!",#MB_ICONASTERISK): EndIf  
      Case 11
          EingabeFenster("Suchen",prgv\suchsatz,-2)          
  EndSelect
EndProcedure
Procedure DatenSuchenNext()
If Not prgv\feldanzahl: ProcedureReturn: EndIf
weitersuchen:
  prgv\suchitem = DatenSuchen(prgv\suchitem+1)
  If prgv\suchitem = -1
     info$ = "nix mehr gefunden!"+#LF$+#LF$+"von Beginn an weitersuchen ?"
     antwort = MessageRequester("Information",info$,#PB_MessageRequester_YesNo|#MB_ICONEXCLAMATION)
     If antwort = #PB_MessageRequester_Yes: Goto weitersuchen: EndIf
  EndIf
EndProcedure
Procedure DatenSuchen(abitem)
  ok = -1
  SetGadgetState(#main_liste,-1)
  
  Select prgv\suchmodus  ;wird in DatensuchenFirst() gesetzt
      Case 1: ;prgv\suchwort wird in DatensuchenFirst() gesetzt
              For item = abitem To CountGadgetItems(#main_liste) - 1
                  x$ = Datensatzholen(item)
                  s$ = prgv\suchwort
                  If prgv\suchgk = 0: x$ = LCase(x$): s$ = LCase(s$): EndIf
                  If FindString(x$, s$, 1)
                     StatusBarText(0, 1, s$ + " in " + "Satz: " + Str(item+1))
                     SendMessage_(GadgetID(#main_liste),#LVM_ENSUREVISIBLE,item,1)
                     SetGadgetState(#main_liste,item): SetActiveGadget(#main_liste)
                     ok = item: Break    
                  EndIf
              Next
      Case 11 ;prgv\suchsatz wird in EingabeOk() gesetzt
              For item = abitem To CountGadgetItems(#main_liste) - 1
                  x$ = Datensatzholen(item): ori$ = x$
                  s$ = prgv\suchsatz
                  If prgv\suchgk = 0: x$ = LCase(x$): s$ = LCase(s$): EndIf
                  If VergleicheSatz(x$, s$) = 1  
                     If prgv\suchlv  ;Ausgabe in Suchliste
                       AddGadgetItem(#suchliste, -1, Str(item+1) + ori$)
                       ok = item
                     Else
                       StatusBarText(0, 1, "Satz: " + Str(item+1))
                       SendMessage_(GadgetID(#main_liste),#LVM_ENSUREVISIBLE,item,1)
                       SetGadgetState(#main_liste,item): SetActiveGadget(#main_liste)
                       ok = item: Break    
                     EndIf
                  EndIf
              Next
              If prgv\suchlv: ListeAutosize(#suchliste): EndIf 
  EndSelect
ProcedureReturn ok     
EndProcedure
Procedure DatenSuchListe()
  ;Hinweis: Feldbreite wurde in Eingabefenster ermittelt/festgelegt
  DisableWindow(#window_main,1)
  OpenWindow(#window_suchen, 0, 0, 450, 350, "Suchergebnis", #PB_Window_ScreenCentered,WindowID(#window_main)) 
  ListIconGadget(#suchliste, 0, 0, 450, 300, "Nr.", 40, #PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect)
  For j = 1 To prgv\feldanzahl
    AddGadgetColumn(#suchliste, j, prgv\feldnamen[j], prgv\feldbreite[j])
  Next
  ButtonGadget(#suchlisteEnd, 10, 320, prgv\buttonbr, prgv\buttonhh, "Schließen")
EndProcedure
Procedure DatenSuchListeClose()
  CloseWindow(#window_suchen)
  DisableWindow(#window_main,0)
EndProcedure
Procedure DatenNeu()
  EingabeFenster("Neu",prgv\datensatz, -1) ; -1 = ans Ende der Liste
EndProcedure
Procedure DatenAendern()
  item = GetGadgetState(#main_liste)
  If item > -1
    prgv\datensatz = Datensatzholen(item)
    EingabeFenster("Ändern",prgv\datensatz,item)
  Else
    MessageRequester("Information","kein Eintrag markiert!") 
  EndIf 
EndProcedure
Procedure DatenLoeschen()
  item = GetGadgetState(#main_liste)
  If item > -1
    prgv\datensatz = Datensatzholen(item)
    RemoveGadgetItem(#main_liste,item): SetGadgetState(#main_liste,item)
  Else
    MessageRequester("Information","kein Eintrag markiert!") 
  EndIf 
EndProcedure
Procedure DatenSortierenAuswahl()
If Not prgv\feldanzahl: ProcedureReturn: EndIf
Shared sort1, sort2, sort3
  DisableWindow(#window_main,1)
  OpenWindow(#window_sort, 0, 0, 320, 305, "", #WS_POPUPWINDOW | 1,WindowID(#window_main)) 
  TextGadget(#PB_Any, 10, 10, 300, prgv\buttonhh, "Wählen Sie die Sortierreihenfolge")
  ListViewGadget(#sort_box1,  10, 40, 100, 200)
  ListViewGadget(#sort_box2, 110, 40, 100, 200)
  ListViewGadget(#sort_box3, 210, 40, 100, 200)
  ButtonGadget  (#sort_start, 10, 250, prgv\buttonbr,   prgv\buttonhh, "Start")
  ButtonGadget  (#sort_ende , 10, 275, prgv\buttonbr,   prgv\buttonhh, "Abbruch")
  CheckBoxGadget(#sort_gk,   110, 250, prgv\buttonbr*2, prgv\buttonhh, "Groß/Kleinschrift beachten") 
  OptionGadget  (#sort_up,   110, 275, prgv\buttonbr,   prgv\buttonhh, "aufsteigend") 
  OptionGadget  (#sort_dn,   210, 275, prgv\buttonbr,   prgv\buttonhh, "absteigend") 
  For j = 1 To prgv\feldanzahl
    AddGadgetItem (#sort_box1, -1, prgv\feldnamen[j])   
    AddGadgetItem (#sort_box2, -1, prgv\feldnamen[j])   
    AddGadgetItem (#sort_box3, -1, prgv\feldnamen[j])   
  Next
  SetGadgetState(#sort_box1, sort1)
  SetGadgetState(#sort_box2, sort2)
  SetGadgetState(#sort_box3, sort3) 
EndProcedure
Procedure DatenSortierenStart()
Shared sort1, sort2, sort3
  sort1 = GetGadgetState(#sort_box1)
  sort2 = GetGadgetState(#sort_box2)
  sort3 = GetGadgetState(#sort_box3)
  sorttiefe = 25
  datenposi = 1 + (sorttiefe*3)
  datenanzahl = CountGadgetItems(#main_liste)-1: Dim daten$(datenanzahl+1)
  For j = 0 To datenanzahl 
    x$ = Datensatzholen(j)
    a$ = LSet(StringField(x$, sort1+2, #LF$), sorttiefe)
    a$ + LSet(StringField(x$, sort2+2, #LF$), sorttiefe)
    a$ + LSet(StringField(x$, sort3+2, #LF$), sorttiefe)
    daten$(j) = a$ + x$   
  Next
  
  If GetGadgetState(#sort_gk) = 0: sortoption = #PB_Sort_NoCase: EndIf
  If GetGadgetState(#sort_dn) = 1: sortoption = #PB_Sort_Descending|sortoption: EndIf
  SortArray(daten$(),sortoption,0,datenanzahl)
  
  HideGadget(#main_liste,1): ClearGadgetItems(#main_liste) 
  For j = 0 To datenanzahl 
    x$ = Mid(daten$(j), datenposi): AddGadgetItem(#main_liste,-1, x$)
  Next
  HideGadget(#main_liste,0)
  DatenSortierenEnde()
EndProcedure
Procedure DatenSortierenEnde()
  CloseWindow(#window_sort): DisableWindow(#window_main,0)
EndProcedure

Procedure DatenListe()
  Select EventType()  ;die 768 gilt für Tasten Pfeil oben/unten
    Case #PB_EventType_LeftClick, 768: StatusBarText(0, 1, "Satz: " + Str(GetGadgetState(#main_liste)+1))
    Case #PB_EventType_LeftDoubleClick: Datenaendern()
  EndSelect   
EndProcedure
Procedure DatenListeTitel(satz$)
;erstellt aus dem 1. gelesenem Datensatz die Titel der Spalten
  For j = 1 To prgv\feldanzahl
    prgv\feldnamen[j] = StringField(satz$,j+1,#LF$)
    SetGadgetItemText(#main_liste, -1, prgv\feldnamen[j], j)
  Next  
EndProcedure
Procedure DatenListeResize()

  prgv\windowbreite = WindowWidth(#window_main)
  prgv\windowhoehe = WindowHeight(#window_main)
  If IsGadget(#main_liste)
     ResizeGadget(#main_liste, #PB_Ignore, #PB_Ignore, prgv\windowbreite, prgv\windowhoehe-44) 
     ;InvalidateRect_(GadgetID(#main_liste), 0, 0) 
     ListeAutosize(#main_liste)          
  EndIf            
EndProcedure

Procedure EingabeFenster(info$,vorgabe$,item)
If Not prgv\feldanzahl: ProcedureReturn: EndIf

With prgv

  \eingabeitem = item ;\eingabeitem = wofür ist die Eingabe, siehe EingabeOk()
  
  DisableWindow(#window_main,1)
  OpenWindow(#window_eingabe, 0, 0, 0, 0, info$, #PB_Window_ScreenCentered,WindowID(#window_main)) 

  AddKeyboardShortcut(#window_eingabe, #PB_Shortcut_Alt|#PB_Shortcut_L, #eingabe_leer)
  AddKeyboardShortcut(#window_eingabe, #PB_Shortcut_Alt|#PB_Shortcut_A, #eingabe_ende)
  AddKeyboardShortcut(#window_eingabe, #PB_Shortcut_Escape, #eingabe_ende)

  AddKeyboardShortcut(#window_eingabe, #PB_Shortcut_Return, #taste_return) 

  For j = 1 To \feldanzahl
    \feldbreite[j] = GetGadgetItemAttribute(#main_liste, 0, #PB_ListIcon_ColumnWidth, j)
    If \feldbreite[j] < 99: \feldbreite[j] = 99: EndIf
    If j < 11  ;max Feldbreite links
       If \feldbreite[j] > maxbreite: maxbreite = \feldbreite[j]: EndIf
    Else       ;max Feldbreite rechts
       If \feldbreite[j] > maxbreite2: maxbreite2 = \feldbreite[j]: EndIf
    EndIf
  Next

  infolg = 60
  infosp = 10: eingabesp = 5 + infosp + infolg
  infosp2 = 10 + eingabesp + maxbreite: eingabesp2 = 5 + infosp2 + infolg
  windowbreite = 460
  If maxbreite2
     If eingabesp2 + maxbreite2 > windowbreite
        windowbreite = eingabesp2 + maxbreite2 + 20
     EndIf   
  EndIf

  For j = 1 To \feldanzahl    
    k = j
    If j > 10: k - 10: EndIf
    If j = 11: infosp = infosp2: eingabesp = eingabesp2: EndIf    
    TextGadget(#PB_Any, infosp, 3+WinZeile(k-1), infolg, \buttonhh, \feldnamen[j], #PB_Text_Right)
    x$ = StringField(vorgabe$, j+1, #LF$) 
    StringGadget(\eingabepbnr[j], eingabesp, WinZeile(k-1), \feldbreite[j], \buttonhh, x$);,#ES_NOHIDESEL)
  Next

  saveinfo$ = "ändern"
  If \eingabeitem = -1
    saveinfo$ = "Hinzufügen"
  ElseIf \eingabeitem = -2
    saveinfo$ = "Suchen"
  EndIf
  
  k = 11  
  ButtonGadget(#eingabe_leer,  10, WinZeile(k), \buttonbr, \buttonhh, "&Leer")
  ButtonGadget(#eingabe_save, 110, WinZeile(k), \buttonbr, \buttonhh, saveinfo$)
  ButtonGadget(#eingabe_ende, 210, WinZeile(k), \buttonbr, \buttonhh, "&Abbruch")
  SetActiveGadget(\eingabepbnr[1])
  SendMessage_(GadgetID(\eingabepbnr[1]),#EM_SETSEL,0,-1)  ;markieren und Cursor ans Ende
  
  If \eingabeitem = -2  ;Sucheingabe
     k + 1
     CheckBoxGadget(#eingabe_scb1,  10, WinZeile(k), \buttonbr*2, \buttonhh, "Groß/Kleinschrift beachten")
     CheckBoxGadget(#eingabe_scb2, 210, WinZeile(k), \buttonbr*2, \buttonhh, "Ausgabe in Liste")
     ;hier ev. Optiongadgets für Sucharten
  EndIf 
  
  windowhoehe = WinZeile(k+2)
  x = \subwindowx + WindowX(#window_main) 
  y = \subwindowy + WindowY(#window_main) 
  ResizeWindow(#window_eingabe, x, y, windowbreite, windowhoehe)

EndWith   
EndProcedure
Procedure EingabeLeer()
  For j = 1 To prgv\feldanzahl: SetGadgetText(prgv\eingabepbnr[j],""): Next
  SetActiveGadget(prgv\eingabepbnr[1])
EndProcedure
Procedure EingabeOk()
With prgv
  ;Eingaben auslesen
  eingabe$ = #LF$: For j = 1 To \feldanzahl: eingabe$ + GetGadgetText(\eingabepbnr[j]) + #LF$: Next
    
  If Len(eingabe$) > \feldanzahl+1  ;es gibt es eine Eingabe in irgendeinem Feld
  
     Select \eingabeitem  ;wird in EingabeFenster gesetzt
         ;Suchen
         Case -2: \suchsatz = eingabe$
                  \suchgk = GetGadgetState(#eingabe_scb1)  ;wenn 1, Groß/Klein beachten 
                  \suchlv = GetGadgetState(#eingabe_scb2)  ;wenn 1, Ausgabe in Liste
                  ;hier ev. Abfrage für Optiongadgets Sucharten
                  \suchart = #suchart1    
                  EingabeEnde()                            
                  If \suchlv: DatenSuchListe(): EndIf
                  \suchitem = DatenSuchen(0)
                  If \suchitem = -1
                     MessageRequester("Information","nix gefunden!",#MB_ICONASTERISK)
                  EndIf  
         ;Neu
         Case -1: \datensatz = eingabe$
                  AddGadgetItem(#main_liste, -1, eingabe$)
                  ListeAutosize(#main_liste)                   
         ;Ändern
         Case 0 To CountGadgetItems(#main_liste)
                  RemoveGadgetItem(#main_liste,\eingabeitem)         ;entfernen
                  AddGadgetItem(#main_liste, \eingabeitem, eingabe$) ;einfügen
                  ListeAutosize(#main_liste) 
                  EingabeEnde()
     EndSelect
  Else  ;alle Felder sind leer
     SetActiveGadget(\eingabepbnr[1])
  EndIf
EndWith  
EndProcedure
Procedure EingabeEnde()
  CloseWindow(#window_eingabe): DisableWindow(#window_main,0)
EndProcedure

Procedure GetOrderArray()
  ok = SendMessage_(GadgetID(#main_liste), #LVM_GETCOLUMNORDERARRAY, prgv\feldanzahl+1, @prgv\OrderArray[0]) 
  For j = 0 To prgv\feldanzahl 
    i = prgv\OrderArray[j]  ;:Debug GetGadgetItemText(#main_liste,-1,i)
    x$ + Str(i) + ","
  Next 
  StatusBarText(0, 1, x$)
ProcedureReturn ok  
EndProcedure

Procedure ListeAutosize(pbnr)
  HideGadget(pbnr,1) 
  For j = 1 To prgv\feldanzahl
    SendMessage_(GadgetID(pbnr), #LVM_SETCOLUMNWIDTH, j, #LVSCW_AUTOSIZE_USEHEADER)
    breite = GetGadgetItemAttribute(pbnr, 0, #PB_ListIcon_ColumnWidth, j)
    If breite > #maxbreite
       SetGadgetItemAttribute(pbnr, 0, #PB_ListIcon_ColumnWidth, #maxbreite, j)
    EndIf
  Next
  HideGadget(pbnr,0)
EndProcedure
Procedure TasteReturn()
  welchesActiveGadget = GetActiveGadget() 
  Select welchesActiveGadget
      Case prgv\eingabepbnr[1] To prgv\eingabepbnr[prgv\feldanzahl]
           For j = 1 To prgv\feldanzahl 
              If prgv\eingabepbnr[j] = welchesActiveGadget
                 SendMessage_(GadgetID(prgv\eingabepbnr[j]),#EM_SETSEL,0,0) ;Markierung aufhebn
                 j + 1: If j > prgv\feldanzahl: j = 1: EndIf  
                 SetActiveGadget(prgv\eingabepbnr[j])
                 SendMessage_(GadgetID(prgv\eingabepbnr[j]),#EM_SETSEL,0,-1) ;markieren + ans Ende
                 Break
              EndIf
           Next          
  EndSelect  
EndProcedure          
Procedure VergleicheSatz(q$,s$)
  ok = -1
  For j = 1 To prgv\feldanzahl  
    qitem$ = StringField(q$, j+1, #LF$)  
    sitem$ = StringField(s$, j+1, #LF$)  
    If sitem$
        Select prgv\suchart  ;wird in EingabeOk() gesetzt
          Case #suchart1     ;alle Eingaben enthalten
               If FindString(qitem$, sitem$,1)
                  ok = 1
               Else
                  ok = -1: Break   
               EndIf    
        EndSelect
    EndIf
  Next
ProcedureReturn ok    
EndProcedure

Procedure.s DateiAuswahl(flag=0,dat$="")
  file$ = GetCurrentDirectory() + GetFilePart(dat$) 
  patt$ = "Text (*.txt)|*.txt;|Alle Dateien (*.*)|*.*"
  If flag = 0
     file$ = OpenFileRequester("Laden: Datei auswählen oder neuen Namen eingeben", file$, patt$, 0)
  Else
     file$ = SaveFileRequester("Speichern: Datei auswählen oder neuen Namen eingeben", file$, patt$, 0)
  EndIf  
  If file$ = "": file$ = GetCurrentDirectory() + "miniadress.txt": EndIf
ProcedureReturn file$
EndProcedure
Procedure.s Datensatzholen(item)
  x$ = "": For j = 0 To prgv\feldanzahl: x$ + GetGadgetItemText(#main_liste, item, j) + #LF$: Next
ProcedureReturn x$
EndProcedure
Procedure.s Datensatzholen_Save(item)
;holt einen Datensatz mit dem OrderArray  
  x$ = ""
  For j = 0 To prgv\feldanzahl
   i = prgv\orderarray[j]: x$ + GetGadgetItemText(#main_liste, item, i) + #LF$
  Next
ProcedureReturn x$
EndProcedure
Procedure.s ReadDatensatz(dnr)
  x$ = ReadString(dnr)  ;:Debug x$
  If Right(x$,1) <> #TAB$: x$ + #TAB$: EndIf
  ReplaceString(x$,#TAB$,#LF$,#PB_String_InPlace)
ProcedureReturn x$  
EndProcedure

Code: Alles auswählen

;MiniAdr_Procedure1.pb
;Proceduren für MiniAdress, Felddefiniton

Procedure FeldGadgets(welchesgadget)
  Select welchesgadget
    Case #feld_box:   FeldListbox()
    Case #feld_oben:  FeldObenUnten(0)
    Case #feld_unten: FeldObenUnten(1)
    Case #feld_kill:  FeldKill()
    Case #feld_cb1:   FeldAendernCbox()
    Case #feld_cb2:   FeldNeuCbox()
    Case #feld_neu:   FeldNeu()
    Case #feld_name:  FeldAendern()
    Case #feld_data:  FeldData()
    Case #feld_start: FeldStart()
    Case #feld_ende:  FeldEnde() 

    Case #menu_titel: TitelFenster()
    Case #menu_spDel: TitelFenster(1)
    Case #menu_spIns: TitelAnhaengen()
   
    Case #titel_box:  TitelListBox()
    Case #titel_name: TitelAendern()
    Case #titel_ende: TitelEnde()
    Case #titel_kill: TitelLoeschen()  
  EndSelect
EndProcedure
Procedure FeldFenster()
  DisableWindow(#window_main,1)
  x = prgv\subwindowx + WindowX(#window_main) 
  y = prgv\subwindowy + WindowY(#window_main) 
  br = 400: hh = 350
  OpenWindow(#window_Feld, x, y, br, hh, "Felder", 0,WindowID(#window_main)) 
  x1 = 200: x2 = x1 + 10 + prgv\buttonbr
  y = 10: ListViewGadget(#feld_box,  10, y, 170, hh-50)
  y = 10: ButtonGadget  (#feld_oben, x1, y, prgv\buttonbr, prgv\buttonhh, "nach oben") 
  y + 30: ButtonGadget  (#feld_unten,x1, y, prgv\buttonbr, prgv\buttonhh, "nach unten")
  y + 30: ButtonGadget  (#feld_kill, x1, y, prgv\buttonbr, prgv\buttonhh, "löschen")   
  y + 30: CheckBoxGadget(#feld_cb1,  x1, y, prgv\buttonbr, prgv\buttonhh, "Name ändern ")
  y + 30: StringGadget  (#feld_ein1, x1, y, prgv\buttonbr, prgv\buttonhh, "")        
          ButtonGadget  (#feld_name, x2, y, prgv\buttonbr, prgv\buttonhh, "ändern")      
  y + 30: CheckBoxGadget(#feld_cb2,  x1, y, prgv\buttonbr, prgv\buttonhh, "Feld neu ")   
  y + 30: StringGadget  (#feld_ein2, x1, y, prgv\buttonbr, prgv\buttonhh, "")        
          ButtonGadget  (#feld_neu,  x2, y, prgv\buttonbr, prgv\buttonhh, "hinzufügen")  
  y = hh - 30
  ButtonGadget  (#feld_data, 10, y, prgv\buttonbr, prgv\buttonhh, "Vorgaben")   
  ButtonGadget  (#feld_start,x1, y, prgv\buttonbr, prgv\buttonhh, "Start")
  ButtonGadget  (#feld_ende, x2, y, prgv\buttonbr, prgv\buttonhh, "Abbruch")
  DisableGadget(#feld_oben,1)
  DisableGadget(#feld_unten,1)
  DisableGadget(#feld_kill,1)
  DisableGadget(#feld_cb1,1): DisableGadget(#feld_ein1,1): DisableGadget(#feld_name,1)
  DisableGadget(#feld_ein2,1): DisableGadget(#feld_neu,1)
EndProcedure
Procedure FeldEnde()
  CloseWindow(#window_Feld): DisableWindow(#window_main,0)
EndProcedure
Procedure FeldListbox()
  DisableGadget(#feld_oben,1)
  DisableGadget(#feld_unten,1)
  DisableGadget(#feld_kill,1)
  DisableGadget(#feld_cb1,1): DisableGadget(#feld_ein1,1): DisableGadget(#feld_name,1)

  fbanz = CountGadgetItems(#feld_box)
  fbitem = GetGadgetState(#feld_box)  ;wer ist markiert ab 0 ? 
  If fbitem = -1: flag = 0            ;keins ist markiert
  ElseIf fbitem = 0: flag = 1         ;das 1.ist markiert
  ElseIf fbitem = fbanz-1: flag = 2   ;das letzte ist markiert
  Else: flag = 3                      ;irgendeins dazwischen
  EndIf
  If flag & 2: DisableGadget(#feld_oben,0): EndIf
  If flag & 1: DisableGadget(#feld_unten,0): EndIf
  If flag & 3: DisableGadget(#feld_kill,0): EndIf
  If flag & 3: FeldAendernCbox(): EndIf
EndProcedure
Procedure FeldObenUnten(flag)
  fbitem = GetGadgetState(#feld_box)  ;wer ist markiert ab 0 ? 
  name$ = GetGadgetItemText(#feld_box, fbitem)  
  RemoveGadgetItem(#feld_box, fbitem)
  If flag = 0: fbitem-1: Else: fbitem+1: EndIf 
  AddGadgetItem(#feld_box, fbitem, name$)
  SetGadgetState(#feld_box, fbitem)
  FeldListbox()
EndProcedure
Procedure FeldKill()
fbitem = GetGadgetState(#feld_box)  ;wer ist markiert ab 0 ? 
If fbitem > -1
   RemoveGadgetItem(#feld_box, fbitem)
   SetGadgetState(#feld_box, fbitem)
   FeldListbox()
EndIf
EndProcedure
Procedure FeldData()
  ClearGadgetItems(#feld_box) 
  Restore Data_FeldNamen  ;Vorgaben lesen
  Read.i anz  
  For j = 1 To anz: Read.s name$: AddGadgetItem(#feld_box, -1, name$): Next 
  SetGadgetState(#feld_box, 0)
  FeldListbox()
EndProcedure
Procedure FeldAendern()
  fbitem = GetGadgetState(#feld_box)  ;wer ist markiert ab 0 ? 
  name$ = Trim(GetGadgetText(#feld_ein1))
  If Feldtest(#feld_box,name$)
     SetGadgetItemText(#feld_box, fbitem, name$)
     SetGadgetState(#feld_box, fbitem)
  EndIf
EndProcedure
Procedure FeldAendernCbox()
fbitem = GetGadgetState(#feld_box)  ;wer ist markiert ab 0 ? 
If fbitem > -1
 DisableGadget(#feld_cb1,0) 
 name$ = GetGadgetItemText(#feld_box,fbitem)
 SetGadgetText(#feld_ein1,name$)
 If GetGadgetState(#feld_cb1) 
    DisableGadget(#feld_ein1,0): DisableGadget(#feld_name,0)
 Else
    DisableGadget(#feld_ein1,1): DisableGadget(#feld_name,1)    
 EndIf
EndIf 
EndProcedure
Procedure FeldNeu()
 name$ = Trim(GetGadgetText(#feld_ein2))
 If Feldtest(#feld_box,name$): AddGadgetItem(#feld_box, -1, name$): EndIf
EndProcedure
Procedure FeldNeuCbox()
 If GetGadgetState(#feld_cb2) 
    DisableGadget(#feld_ein2,0): DisableGadget(#feld_neu,0)
 Else
    DisableGadget(#feld_ein2,1): DisableGadget(#feld_neu,1)    
 EndIf
EndProcedure
Procedure FeldTest(pbnr,name$)
  fbanz = CountGadgetItems(pbnr)
  For j = 0 To fbanz - 1
    feldboxname$ = Trim(GetGadgetItemText(pbnr,j))
    If name$ = feldboxname$
       MessageRequester("Info","Name bereits vorhanden")
       ProcedureReturn 0
    EndIf   
  Next
ProcedureReturn 1
EndProcedure
Procedure FeldStart()
  ;erst auslesen, denn gleich wird das Fenster zerstört und der Inhalt auch
  prgv\feldanzahl = CountGadgetItems(#feld_box) 
  For j = 1 To prgv\feldanzahl 
    prgv\feldnamen[j] = Trim(GetGadgetItemText(#feld_box,j-1))
  Next
    
  CloseWindow(#window_Feld)
  DisableWindow(#window_main,0)
  
  CreateListIcon()
  CreateListIconColumn()
  
  prgv\dateiname = ""
  prgv\datensatz = ""
  StatusBarText(0, 0, prgv\dateiname)
  StatusBarText(0, 1, Str(CountGadgetItems(#main_liste)))
  ListeAutosize(#main_liste) 
EndProcedure

Procedure TitelFenster(flag=0)
If Not prgv\feldanzahl: ProcedureReturn: EndIf
  
  prgv\titelflag = flag  ;wird in TitelListbox() gebraucht
  
  Select flag
    Case 0: titel$ = "Spaltennamen ändern"
    Case 1: titel$ = "Spalte entfernen"
  EndSelect
  
  DisableWindow(#window_main,1)
  x = prgv\subwindowx + WindowX(#window_main) 
  y = prgv\subwindowy + WindowY(#window_main) 
  br = 400: hh = 350
  OpenWindow(#window_Titel, x, y, br, hh, titel$, 0,WindowID(#window_main)) 
  x1 = 200: x2 = x1 + 10 + prgv\buttonbr
  y = 10: ListViewGadget(#titel_box,  10, y, 170, hh-50)
  y + 30: StringGadget  (#titel_ein,  x1, y, prgv\buttonbr, prgv\buttonhh, "")        
          ButtonGadget  (#titel_name, x2, y, prgv\buttonbr, prgv\buttonhh, "ändern")      
  y = hh - 30
  ButtonGadget  (#titel_kill,x1, y, prgv\buttonbr, prgv\buttonhh, "Löschen")
  ButtonGadget  (#titel_ende, x2, y, prgv\buttonbr, prgv\buttonhh, "Abbruch")

  For j = 1 To prgv\feldanzahl
      AddGadgetItem(#titel_box,-1,prgv\feldnamen[j])
  Next
  
  Select flag
    Case 0: HideGadget(#titel_kill,1)
            DisableGadget(#titel_ein,1): DisableGadget(#titel_name,1)

    Case 1: DisableGadget(#titel_kill,1)
            HideGadget(#titel_ein,1): HideGadget(#titel_name,1) 
  EndSelect
  
EndProcedure
Procedure TitelEnde()
  CloseWindow(#window_Titel): DisableWindow(#window_main,0)
EndProcedure
Procedure TitelListBox()
fbitem = GetGadgetState(#titel_box)  ;wer ist markiert ab 0 ? 
If fbitem > -1
   Select prgv\titelflag
     Case 0: ;Spaltenname ändern
             DisableGadget(#titel_ein,0): DisableGadget(#titel_name,0)
             name$ = GetGadgetItemText(#titel_box,fbitem)
             SetGadgetText(#titel_ein,name$)
     
     Case 1: DisableGadget(#titel_kill,0)
   EndSelect
EndIf
EndProcedure
Procedure TitelAendern()
  ;Hinweis: in der Titelbox wird ab null gezählt
  ;der oberste Spaltename ist also item 0
  ;hingegen die Feldnamen bzw. die Spaltennamen der main_liste
  ;beginnen bei 1, denn Spalte null wird nicht benutzt !
  
  fbitem = GetGadgetState(#titel_box)  ;wer ist markiert ab 0 ? 
  name$ = Trim(GetGadgetText(#titel_ein))
  If Feldtest(#titel_box,name$)
     SetGadgetItemText(#titel_box, fbitem, name$)
     SetGadgetState(#titel_box, fbitem)
     SetGadgetItemText(#main_liste, -1, name$, fbitem+1)
     prgv\feldnamen[fbitem+1] = name$
     ListeAutosize(#main_liste)
  EndIf
EndProcedure

Procedure TitelLoeschen()
fbitem = GetGadgetState(#titel_box)  ;wer ist markiert ab 0 ? 
If fbitem > -1
   name$ = GetGadgetItemText(#titel_box,fbitem)
   text$ = "Wollen Sie die Spalte > " + name$ + " < wirklich löschen ?"
   antwort = MessageRequester("Warnung", text$, #PB_MessageRequester_YesNo|#MB_ICONEXCLAMATION)
   If antwort = #PB_MessageRequester_Yes
     fbitem + 1  ; Erklärung siehe TitelAendern()
     HideGadget(#main_liste,1)
     RemoveGadgetColumn(#main_liste, fbitem)
     ListeAutosize(#main_liste)  ;incl. HideGadget(#main_liste,0)
     prgv\feldanzahl - 1
     For j = 1 To prgv\feldanzahl
       prgv\feldnamen[j] = GetGadgetItemText(#main_liste,-1,j)
     Next
     TitelEnde()
     text$ = "die Spalte [ " + name$ + " ] wurde entfernt" + #LF$ + #LF$
     text$ + "Entgültig gelöscht wird die Spalte" + #LF$
     text$ + "aber erst dann, wenn die Daten gespeichert werden !"
     MessageRequester("Hinweis", text$, #MB_ICONASTERISK)
   EndIf
EndIf
EndProcedure
Procedure TitelAnhaengen()
  text$ = "Wie soll die Spalte heißen ?" + Space(22) + "(Esc = Abbruch)" 
  name$ = InputRequester("neue Spalte", text$, "neu")
  name$ = Trim(name$)
  If name$ 
     prgv\feldanzahl + 1
     If prgv\feldanzahl > 20
       MessageRequester("Error","mehr als 20 Felder",#MB_ICONASTERISK)
     Else  
       HideGadget(#main_liste,1)
       AddGadgetColumn(#main_liste, prgv\feldanzahl, name$,1)
       prgv\feldnamen[prgv\feldanzahl] = name$
       ListeAutosize(#main_liste)  
       text$ = "die Spalte [ " + name$ + " ] wurde angehängt" + #LF$ + #LF$
       text$ + "Sie können die Spalte nun mit der Maus verschieben !"+ #LF$ + #LF$
       text$ + "Entgültig Teil der Datei wird die Spalte" + #LF$
       text$ + "aber erst dann, wenn die Daten gespeichert werden !" 
       MessageRequester("Hinweis", text$, #MB_ICONASTERISK)
     EndIf 
  EndIf
EndProcedure

Code: Alles auswählen

;MiniAdr_Main1.pb
;Mini Adress für DemoVersion PB 4.3 x86

IncludeFile "MiniAdr_Declare.pb"
IncludeFile "MiniAdr_Procedure0.pb"
IncludeFile "MiniAdr_Procedure1.pb"

#version = "MiniAdress von HJ Bremer" + #LF$ + "® Mai 2009 - Version 2.04"

; Programmoberfläche definieren----------------------
DatenIni()
flags = #PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_SizeGadget
OpenWindow(#window_main, 0, 0, prgv\windowbreite, prgv\windowhoehe, "MiniAdress (PB 4.3 x86)", flags) 
 
    MainInfo()
        
    CreateStatusBar(0, WindowID(#window_main))
      AddStatusBarField(#PB_Ignore)
      AddStatusBarField(#PB_Ignore)
          
    CreateMenu(0, WindowID(#window_main))
      MenuTitle("&Datei")
        MenuItem( #menu_new,  "&Neu")
        MenuItem( #menu_load, "Ö&ffnen" + #TAB$ + "Strg+O")
        MenuItem( #menu_save, "&Speichern" + #TAB$ + "Strg+S")
        MenuItem( #menu_save1, "Speichern &als...")
        MenuBar()
        MenuItem( #menu_load1, "Öffnen ohne Titel")
        MenuBar()
        MenuItem( #menu_ende, "&Beenden" + #TAB$ + "Alt+F4")
      MenuTitle("&Bearbeiten")
        MenuItem( #menu_neu, "&Neu" + #TAB$ + "Strg+N")
        MenuItem( #menu_edit, "&ändern")
        MenuItem( #menu_kill,"&löschen")
      MenuTitle("&Suchen")
        MenuItem( #menu_such1, "&Suchen" + #TAB$ + "Strg+F / F4")
        MenuItem( #menu_such2, "Suchen im &Feld")
        MenuItem( #menu_suchN, "&Weitersuchen" + #TAB$ + "F3")
      MenuTitle("S&ortieren")
        MenuItem( #menu_sort, "sortieren")
      MenuTitle("&Optionen")
        MenuItem( #menu_titel, "Spaltennamen ändern")
        MenuItem( #menu_spDel, "Spalte entfernen")
        MenuItem( #menu_spIns, "Spalte anhängen")
      MenuTitle("&Info")
        MenuItem( #menu_info, "Info")
        MenuItem( #menu_inf1, "Reihenfolge")
      
    AddKeyboardShortcut(#window_main, #PB_Shortcut_Control|#PB_Shortcut_O , #menu_load)
    AddKeyboardShortcut(#window_main, #PB_Shortcut_Control|#PB_Shortcut_S , #menu_save)
    AddKeyboardShortcut(#window_main, #PB_Shortcut_Alt    |#PB_Shortcut_F4, #menu_ende)
    AddKeyboardShortcut(#window_main, #PB_Shortcut_Control|#PB_Shortcut_N , #menu_neu)
    AddKeyboardShortcut(#window_main, #PB_Shortcut_Control|#PB_Shortcut_F , #menu_such1)
    AddKeyboardShortcut(#window_main,                      #PB_Shortcut_F4, #menu_such1)
    AddKeyboardShortcut(#window_main,                      #PB_Shortcut_F3, #menu_suchN)
    
    ;automatisch laden bei Start; welche Datei wird in DateiLaden() festgelegt
    DateiLaden(1,1) 

; Eingabeschleife--------------------------------------------
Repeat: event = WaitWindowEvent(1) ;:If event:Debug event:EndIf

 Select event
    
     Case #PB_Event_SizeWindow, #PB_Event_MoveWindow
            DatenListeResize()
            
     Case #PB_Event_Gadget, #PB_Event_Menu 
     
          welchesgadget = EventGadget()
          FeldGadgets(welchesgadget)
          Select welchesgadget
              Case #menu_new:   DateiNeu()
              Case #menu_load:  DateiLaden(1)
              Case #menu_load1: DateiLaden(0)    ;ohne Spaltentitel
              Case #menu_save:  DateiSpeichern()
              Case #menu_save1: DateiSpeichern(1)
              Case #menu_neu:   DatenNeu()
              Case #menu_edit:  Datenaendern()
              Case #menu_kill:  Datenloeschen()
              Case #menu_such1: DatensuchenFirst(1)  ;
              Case #menu_such2: DatensuchenFirst(11) ;nach Feldern
              Case #menu_suchN: DatensuchenNext()
              Case #menu_sort:  Datensortierenauswahl()
              Case #menu_info:  MessageRequester("Info", #version)
              Case #menu_inf1:  GetOrderArray()
              Case #menu_ende:  event = #PB_Event_CloseWindow
              
              Case #main_liste:   DatenListe() 
              Case #sort_start:   DatensortierenStart()
              Case #sort_ende:    DatensortierenEnde()
              Case #eingabe_save: EingabeOk()   
              Case #eingabe_ende: EingabeEnde()   
              Case #eingabe_leer: EingabeLeer() 
              Case #taste_return: TasteReturn() 
              Case #suchlisteEnd: DatenSuchlisteClose()
          EndSelect 
 EndSelect
Until event = #PB_Event_CloseWindow 
End

DataSection
Data_FeldNamen:
Data.i 8
Data.s "Vorname","Nachname","Plz/Ort","Strasse","Tel.","Handy","Diverses","?"
EndDataSection
Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag von Andesdaf »

mensch, viel gearbeitet! :allright: .
Werde ich dann mal testen.
Win11 x64 | PB 6.20
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Beitrag von dysti »

super :allright:
funzt 100%
Was man alles mit einer Demoversion von PB machen kann!
Schon erstaunlich.
Gruß
Dysti
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Beitrag von hjbremer »

Kleiner Hinweis: Beim Starten des Progs, kann die Meldung Icon nicht gefunden kommen: Damit ist das Icon in Compiler / Compiler Optionen gemeint. Dort das Häkchen entfernen oder den Pfad zu einem eigenem Icon angeben. Kann aber eigentlich nur passieren, wenn man PB komplett auf einem anderen Rechner kopiert.
Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag von Andesdaf »

>funzt 100%
Bei mir auch.
Win11 x64 | PB 6.20
Antworten