Automatisch scrollen mit ButtonImageGadget / ComboBoxGadget

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: Automatisch scrollen mit ButtonImageGadget / ComboBoxGad

Beitrag von edel »

Das ist doch alles nix... Da meckerst du in jedem Thread ueber Windows und willst unbedingt auch
unter Linux programmieren. Dann lass das mit dem ganzen Gehupe und programmier gleich so, das du
keine Probleme auf beiden Systemen hast.
Dein Programm bis oben mit Winapi vollzustopfen, bringt dich dabei uberhaupt nicht weiter.
Benutzeravatar
Daffy0815
Beiträge: 390
Registriert: 15.06.2005 00:44
Wohnort: 65719 Hofheim
Kontaktdaten:

Re: Automatisch scrollen mit ButtonImageGadget / ComboBoxGad

Beitrag von Daffy0815 »

@edel

Die Antwort verstehe ich ehrlich gesagt nicht!

Ich habe in meinem Programm doch gerade auf die Verwendung von WinAPI soweit wie nur irgend möglich verzichtet.
Und das Programm soll doch auf BEIDEN Plattformen laufen!

Gerade deshalb ist doch das zentrale Abfangen an der WindowEvent()-Funktion so eine feine Sache.
Zum Schluss braucht man doch die Event-Funktionen die Linux / KDE nicht kennt nur zu implementieren (Ist ja das schöne an Open-Source)
und schon läuft die Sache.

Hier mal die Liste der #WM_XXX Konstanten:

Code: Alles auswählen

;Windows Messages ================================================================================================================
#WM_ACTIVATE                        = 6
#WM_ACTIVATEAPP                     = 28
#WM_AFXFIRST                        = 864
#WM_AFXLAST                         = 895
#WM_APP                             = 32768
#WM_ASKCBFORMATNAME                 = 780
#WM_CANCELJOURNAL                   = 75
#WM_CANCELMODE                      = 31
#WM_CAPTURECHANGED                  = 533
#WM_CAP_ABORT                       = 1093
#WM_CAP_DLG_VIDEOCOMPRESSION        = 1070
#WM_CAP_DLG_VIDEODISPLAY            = 1067
#WM_CAP_DLG_VIDEOFORMAT             = 1065
#WM_CAP_DLG_VIDEOSOURCE             = 1066
#WM_CAP_DRIVER_CONNECT              = 1034
#WM_CAP_DRIVER_DISCONNECT           = 1035
#WM_CAP_DRIVER_GET_CAPS             = 1038
#WM_CAP_DRIVER_GET_NAME             = 1036
#WM_CAP_DRIVER_GET_NAMEA            = 1036
#WM_CAP_DRIVER_GET_NAMEW            = 1136
#WM_CAP_DRIVER_GET_VERSION          = 1037
#WM_CAP_DRIVER_GET_VERSIONA         = 1037
#WM_CAP_DRIVER_GET_VERSIONW         = 1137
#WM_CAP_EDIT_COPY                   = 1054
#WM_CAP_END                         = 1205
#WM_CAP_FILE_ALLOCATE               = 1046
#WM_CAP_FILE_GET_CAPTURE_FILE       = 1045
#WM_CAP_FILE_GET_CAPTURE_FILEA      = 1045
#WM_CAP_FILE_GET_CAPTURE_FILEW      = 1145
#WM_CAP_FILE_SAVEAS                 = 1047
#WM_CAP_FILE_SAVEASA                = 1047
#WM_CAP_FILE_SAVEASW                = 1147
#WM_CAP_FILE_SAVEDIB                = 1049
#WM_CAP_FILE_SAVEDIBA               = 1049
#WM_CAP_FILE_SAVEDIBW               = 1149
#WM_CAP_FILE_SET_CAPTURE_FILE       = 1044
#WM_CAP_FILE_SET_CAPTURE_FILEA      = 1044
#WM_CAP_FILE_SET_CAPTURE_FILEW      = 1144
#WM_CAP_FILE_SET_INFOCHUNK          = 1048
#WM_CAP_GET_AUDIOFORMAT             = 1060
#WM_CAP_GET_CAPSTREAMPTR            = 1025
#WM_CAP_GET_MCI_DEVICE              = 1091
#WM_CAP_GET_MCI_DEVICEA             = 1091
#WM_CAP_GET_MCI_DEVICEW             = 1191
#WM_CAP_GET_SEQUENCE_SETUP          = 1089
#WM_CAP_GET_STATUS                  = 1078
#WM_CAP_GET_USER_DATA               = 1032
#WM_CAP_GET_VIDEOFORMAT             = 1068
#WM_CAP_GRAB_FRAME                  = 1084
#WM_CAP_GRAB_FRAME_NOSTOP           = 1085
#WM_CAP_PAL_AUTOCREATE              = 1107
#WM_CAP_PAL_MANUALCREATE            = 1108
#WM_CAP_PAL_OPEN                    = 1104
#WM_CAP_PAL_OPENA                   = 1104
#WM_CAP_PAL_OPENW                   = 1204
#WM_CAP_PAL_PASTE                   = 1106
#WM_CAP_PAL_SAVE                    = 1105
#WM_CAP_PAL_SAVEA                   = 1105
#WM_CAP_PAL_SAVEW                   = 1205
#WM_CAP_SEQUENCE                    = 1086
#WM_CAP_SEQUENCE_NOFILE             = 1087
#WM_CAP_SET_AUDIOFORMAT             = 1059
#WM_CAP_SET_CALLBACK_CAPCONTROL     = 1109
#WM_CAP_SET_CALLBACK_ERROR          = 1026
#WM_CAP_SET_CALLBACK_ERRORA         = 1026
#WM_CAP_SET_CALLBACK_ERRORW         = 1126
#WM_CAP_SET_CALLBACK_FRAME          = 1029
#WM_CAP_SET_CALLBACK_STATUS         = 1027
#WM_CAP_SET_CALLBACK_STATUSA        = 1027
#WM_CAP_SET_CALLBACK_STATUSW        = 1127
#WM_CAP_SET_CALLBACK_VIDEOSTREAM    = 1030
#WM_CAP_SET_CALLBACK_WAVESTREAM     = 1031
#WM_CAP_SET_CALLBACK_YIELD          = 1028
#WM_CAP_SET_MCI_DEVICE              = 1090
#WM_CAP_SET_MCI_DEVICEA             = 1090
#WM_CAP_SET_MCI_DEVICEW             = 1190
#WM_CAP_SET_OVERLAY                 = 1075
#WM_CAP_SET_PREVIEW                 = 1074
#WM_CAP_SET_PREVIEWRATE             = 1076
#WM_CAP_SET_SCALE                   = 1077
#WM_CAP_SET_SCROLL                  = 1079
#WM_CAP_SET_SEQUENCE_SETUP          = 1088
#WM_CAP_SET_USER_DATA               = 1033
#WM_CAP_SET_VIDEOFORMAT             = 1069
#WM_CAP_SINGLE_FRAME                = 1096
#WM_CAP_SINGLE_FRAME_CLOSE          = 1095
#WM_CAP_SINGLE_FRAME_OPEN           = 1094
#WM_CAP_START                       = 1024
#WM_CAP_STOP                        = 1092
#WM_CAP_UNICODE_END                 = 1205
#WM_CAP_UNICODE_START               = 1124
#WM_CHANGECBCHAIN                   = 781
#WM_CHAR                            = 258
#WM_CHARTOITEM                      = 47
#WM_CHILDACTIVATE                   = 34
#WM_CHOOSEFONT_GETLOGFONT           = 1025
#WM_CHOOSEFONT_SETFLAGS             = 1126
#WM_CHOOSEFONT_SETLOGFONT           = 1125
#WM_CLEAR                           = 771
#WM_CLOSE                           = 16
#WM_COMMAND                         = 273
#WM_COMMNOTIFY                      = 68
#WM_COMPACTING                      = 65
#WM_COMPAREITEM                     = 57
#WM_CONTEXTMENU                     = 123
#WM_CONVERTREQUEST                  = 266
#WM_CONVERTRESULT                   = 267
#WM_COPY                            = 769
#WM_COPYDATA                        = 74
#WM_CPL_LAUNCH                      = 2024
#WM_CPL_LAUNCHED                    = 2025
#WM_CREATE                          = 1
#WM_CTLCOLOR                        = 25
#WM_CTLCOLORBTN                     = 309
#WM_CTLCOLORDLG                     = 310
#WM_CTLCOLOREDIT                    = 307
#WM_CTLCOLORLISTBOX                 = 308
#WM_CTLCOLORMSGBOX                  = 306
#WM_CTLCOLORSCROLLBAR               = 311
#WM_CTLCOLORSTATIC                  = 312
#WM_CUT                             = 768
#WM_DDE_ACK                         = 996
#WM_DDE_ADVISE                      = 994
#WM_DDE_DATA                        = 997
#WM_DDE_EXECUTE                     = 1000
#WM_DDE_FIRST                       = 992
#WM_DDE_INITIATE                    = 992
#WM_DDE_LAST                        = 1000
#WM_DDE_POKE                        = 999
#WM_DDE_REQUEST                     = 998
#WM_DDE_TERMINATE                   = 993
#WM_DDE_UNADVISE                    = 995
#WM_DEADCHAR                        = 259
#WM_DELETEITEM                      = 45
#WM_DESTROY                         = 2
#WM_DESTROYCLIPBOARD                = 775
#WM_DEVICECHANGE                    = 537
#WM_DEVMODECHANGE                   = 27
#WM_DISPLAYCHANGE                   = 126
#WM_DRAWCLIPBOARD                   = 776
#WM_DRAWITEM                        = 43
#WM_DROPFILES                       = 563
#WM_ENABLE                          = 10
#WM_ENDSESSION                      = 22
#WM_ENTERIDLE                       = 289
#WM_ENTERMENULOOP                   = 529
#WM_ENTERSIZEMOVE                   = 561
#WM_ERASEBKGND                      = 20
#WM_EXITMENULOOP                    = 530
#WM_EXITSIZEMOVE                    = 562
#WM_FONTCHANGE                      = 29
#WM_GETDLGCODE                      = 135
#WM_GETFONT                         = 49
#WM_GETHOTKEY                       = 51
#WM_GETICON                         = 127
#WM_GETMINMAXINFO                   = 36
#WM_GETOBJECT                       = 61
#WM_GETTEXT                         = 13
#WM_GETTEXTLENGTH                   = 14
#WM_HANDHELDFIRST                   = 856
#WM_HANDHELDLAST                    = 863
#WM_HELP                            = 83
#WM_HOTKEY                          = 786
#WM_HSCROLL                         = 276
#WM_HSCROLLCLIPBOARD                = 782
#WM_ICONERASEBKGND                  = 39
#WM_IMEKEYDOWN                      = 656
#WM_IMEKEYUP                        = 657
#WM_IME_CHAR                        = 646
#WM_IME_COMPOSITION                 = 271
#WM_IME_COMPOSITIONFULL             = 644
#WM_IME_CONTROL                     = 643
#WM_IME_ENDCOMPOSITION              = 270
#WM_IME_KEYDOWN                     = 656
#WM_IME_KEYLAST                     = 271
#WM_IME_KEYUP                       = 657
#WM_IME_NOTIFY                      = 642
#WM_IME_REPORT                      = 640
#WM_IME_REQUEST                     = 648
#WM_IME_SELECT                      = 645
#WM_IME_SETCONTEXT                  = 641
#WM_IME_STARTCOMPOSITION            = 269
#WM_INITDIALOG                      = 272
#WM_INITMENU                        = 278
#WM_INITMENUPOPUP                   = 279
#WM_INPUTLANGCHANGE                 = 81
#WM_INPUTLANGCHANGEREQUEST          = 80
#WM_INTERIM                         = 268
#WM_KEYDOWN                         = 256
#WM_KEYFIRST                        = 256
#WM_KEYLAST                         = 264
#WM_KEYUP                           = 257
#WM_KILLFOCUS                       = 8
#WM_LBUTTONDBLCLK                   = 515
#WM_LBUTTONDOWN                     = 513
#WM_LBUTTONUP                       = 514
#WM_MBUTTONDBLCLK                   = 521
#WM_MBUTTONDOWN                     = 519
#WM_MBUTTONUP                       = 520
#WM_MDIACTIVATE                     = 546
#WM_MDICASCADE                      = 551
#WM_MDICREATE                       = 544
#WM_MDIDESTROY                      = 545
#WM_MDIGETACTIVE                    = 553
#WM_MDIICONARRANGE                  = 552
#WM_MDIMAXIMIZE                     = 549
#WM_MDINEXT                         = 548
#WM_MDIREFRESHMENU                  = 564
#WM_MDIRESTORE                      = 547
#WM_MDISETMENU                      = 560
#WM_MDITILE                         = 550
#WM_MEASUREITEM                     = 44
#WM_MENUCHAR                        = 288
#WM_MENUCOMMAND                     = 294
#WM_MENUDRAG                        = 291
#WM_MENUGETOBJECT                   = 292
#WM_MENURBUTTONUP                   = 290
#WM_MENUSELECT                      = 287
#WM_MOUSEACTIVATE                   = 33
#WM_MOUSEFIRST                      = 512
#WM_MOUSEHOVER                      = 673
#WM_MOUSELAST                       = 521
#WM_MOUSELEAVE                      = 675
#WM_MOUSEMOVE                       = 512
#WM_MOUSEWHEEL                      = 522
#WM_MOVE                            = 3
#WM_MOVING                          = 534
#WM_NCACTIVATE                      = 134
#WM_NCCALCSIZE                      = 131
#WM_NCCREATE                        = 129
#WM_NCDESTROY                       = 130
#WM_NCHITTEST                       = 132
#WM_NCLBUTTONDBLCLK                 = 163
#WM_NCLBUTTONDOWN                   = 161
#WM_NCLBUTTONUP                     = 162
#WM_NCMBUTTONDBLCLK                 = 169
#WM_NCMBUTTONDOWN                   = 167
#WM_NCMBUTTONUP                     = 168
#WM_NCMOUSEHOVER                    = 672
#WM_NCMOUSELEAVE                    = 674
#WM_NCMOUSEMOVE                     = 160
#WM_NCPAINT                         = 133
#WM_NCRBUTTONDBLCLK                 = 166
#WM_NCRBUTTONDOWN                   = 164
#WM_NCRBUTTONUP                     = 165
#WM_NEXTDLGCTL                      = 40
#WM_NEXTMENU                        = 531
#WM_NOTIFY                          = 78
#WM_NOTIFYFORMAT                    = 85
#WM_NULL                            = 0
#WM_PAINT                           = 15
#WM_PAINTCLIPBOARD                  = 777
#WM_PAINTICON                       = 38
#WM_PALETTECHANGED                  = 785
#WM_PALETTEISCHANGING               = 784
#WM_PARENTNOTIFY                    = 528
#WM_PASTE                           = 770
#WM_PENWINFIRST                     = 896
#WM_PENWINLAST                      = 911
#WM_POWER                           = 72
#WM_POWERBROADCAST                  = 536
#WM_PRINT                           = 791
#WM_PRINTCLIENT                     = 792
#WM_PSD_ENVSTAMPRECT                = 1029
#WM_PSD_FULLPAGERECT                = 1025
#WM_PSD_GREEKTEXTRECT               = 1028
#WM_PSD_MARGINRECT                  = 1027
#WM_PSD_MINMARGINRECT               = 1026
#WM_PSD_PAGESETUPDLG                = 1024
#WM_PSD_YAFULLPAGERECT              = 1030
#WM_QUERYDRAGICON                   = 55
#WM_QUERYENDSESSION                 = 17
#WM_QUERYNEWPALETTE                 = 783
#WM_QUERYOPEN                       = 19
#WM_QUEUESYNC                       = 35
#WM_QUIT                            = 18
#WM_RASDIALEVENT                    = 52429
#WM_RBUTTONDBLCLK                   = 518
#WM_RBUTTONDOWN                     = 516
#WM_RBUTTONUP                       = 517
#WM_RENDERALLFORMATS                = 774
#WM_RENDERFORMAT                    = 773
#WM_SETCURSOR                       = 32
#WM_SETFOCUS                        = 7
#WM_SETFONT                         = 48
#WM_SETHOTKEY                       = 50
#WM_SETICON                         = 128
#WM_SETREDRAW                       = 11
#WM_SETTEXT                         = 12
#WM_SETTINGCHANGE                   = 26
#WM_SHOWWINDOW                      = 24
#WM_SIZE                            = 5
#WM_SIZECLIPBOARD                   = 779
#WM_SIZING                          = 532
#WM_SPOOLERSTATUS                   = 42
#WM_STYLECHANGED                    = 125
#WM_STYLECHANGING                   = 124
#WM_SYNCPAINT                       = 136
#WM_SYSCHAR                         = 262
#WM_SYSCOLORCHANGE                  = 21
#WM_SYSCOMMAND                      = 274
#WM_SYSDEADCHAR                     = 263
#WM_SYSKEYDOWN                      = 260
#WM_SYSKEYUP                        = 261
#WM_TCARD                           = 82
#WM_TIMECHANGE                      = 30
#WM_TIMER                           = 275
#WM_UNDO                            = 772
#WM_UNICHAR                         = 265
#WM_UNINITMENUPOPUP                 = 293
#WM_USER                            = 1024
#WM_USERCHANGED                     = 84
#WM_VKEYTOITEM                      = 46
#WM_VSCROLL                         = 277
#WM_VSCROLLCLIPBOARD                = 778
#WM_WINDOWPOSCHANGED                = 71
#WM_WINDOWPOSCHANGING               = 70
#WM_WININICHANGE                    = 26
#WM_WNT_CONVERTREQUESTEX            = 265
;
Bei den Funktionen die "durchgehen" werde ich von Zeit zu Zeit mal ein paar "*" dahinter setzen.


Gruß

Daffy
Wir sind LINUX
Widerstand ist zwecklos - Sie werden emuliert
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

Re: Automatisch scrollen mit ButtonImageGadget / ComboBoxGad

Beitrag von TomS »

Du weißt aber schon, dass dein Programm auch dann nicht unter Linux funktioniert, wenn du alle Windows Events durch die entsprechenden Zahlen ersetzt.
Da werden ja ganz andere Events gesendet.
Benutzeravatar
Daffy0815
Beiträge: 390
Registriert: 15.06.2005 00:44
Wohnort: 65719 Hofheim
Kontaktdaten:

Re: Automatisch scrollen mit ButtonImageGadget / ComboBoxGad

Beitrag von Daffy0815 »

@TomS

Ja, das ist schon klar :)

Gruß

Daffy
Wir sind LINUX
Widerstand ist zwecklos - Sie werden emuliert
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: Automatisch scrollen mit ButtonImageGadget / ComboBoxGad

Beitrag von edel »

Das Eventsystem unter Linux (is uebrigens gtk und nicht kde/qt) funktioniert voellig anders als das von Windows. Damit wirst du nicht weit kommen.
Benutzeravatar
Daffy0815
Beiträge: 390
Registriert: 15.06.2005 00:44
Wohnort: 65719 Hofheim
Kontaktdaten:

Re: Automatisch scrollen mit ButtonImageGadget / ComboBoxGad

Beitrag von Daffy0815 »

Also, das mit dem Scrollen geht viel einfacher und ohne das ganze CallBack-Zeug!

Voraussetzungen:
===========

1.) Die Höhe des ScrollAreas ist mit SetGadGetData gespeichert.

Code: Alles auswählen

    ScrollAreaGadget(#NumEinstellenSystemparameterScrollArea, #XPos_SysParScrollArea, #YPos_SysParScrollArea, #Breite_SysParScrollArea, #Hoehe_SysParScrollArea, #SBreite_SysParScrollArea, #SHoehe_SysParScrollArea, #SSchritt_SysParScrollArea) 
    SetGadgetData(#NumEinstellenSystemparameterScrollArea, #Hoehe_SysParScrollArea) ; zum Fokusieren der Fenstermitte  
2.) Die Position jedes Gadgets im Scrollarea ist mit SetGadgetData gespeichert (Dann funktioniert es auch mit den umschließenden Containern)

Code: Alles auswählen

            SetComboboxSelektor(#NumEinstellenSystemparameterGeraeteartSelektor, SysParGeraeteartSelektorString$(), #XPos_SysParEingabefelder, YPosSysParTexte.i, SysParGeraeteartMin.d, SysParGeraeteArtMax.d, SysParGeraeteartVorgabe.d, SysParGeraeteart.d, Eingabefeldvordergrundfarbe.i, Eingabefeldhintergrundfarbe.i, FontID_SysParSelektoren.i)
            SetGadgetData(#NumEinstellenSystemparameterGeraeteartSelektor, #YPos_EinstellenSystemparameterContainer01 + YPosSysParTexte.i)



So sieht dann die Eventschleife aus:
======================

Code: Alles auswählen

Repeat
    ;
    Event.i = WindowEvent()
    ;
    Select WindowAktiv.i    ;Global, enthält Nummer des Fensters und wird beim Öffnen des Fensters gesetzt 
        ;
        ;Einstellen Systemparameter
        ;
        Case #NumEinstellenSystemparameterWindow
            Select Event.i
                Case #PB_Event_Menu
                Case #PB_Event_Gadget
                    Gadget.i = EventGadget()     
                    Select Gadget.i    
                        Case #NumEinstellenSystemparameterButtonZurueck
                        Case #NumEinstellenSystemparameterEingabeHardwareversion                    
                        ;
                        ;Hier über 300 Gadgetnummern (Stringadgets, ComboBoxGadgets und ButtonImageGadgets)
                        ;
                    EndSelect
                Case #PB_Event_SysTray
                Case #PB_Event_Timer
                Case #PB_Event_CloseWindow
                Case #PB_Event_Repaint
                Case #PB_Event_SizeWindow 
                Case #PB_Event_MoveWindow
                Case #PB_Event_MinimizeWindow
                Case #PB_Event_MaximizeWindow
                Case #PB_Event_RestoreWindow
                Case #PB_Event_ActivateWindow
                Case #PB_Event_WindowDrop
                Case #PB_Event_GadgetDrop
                Default
                    ActiveGadget.i = GetActiveGadget()
                    If LastScrollGadget.i <> ActiveGadget.i
                        LastScrollGadget.i = ActiveGadget.i
                        If ActiveGadget.i <> -1
                            SetGadgetAttribute(#NumEinstellenSystemparameterScrollArea, #PB_ScrollArea_Y, GetGadgetData(ActiveGadget.i) - GetGadgetData(#NumEinstellenSystemparameterScrollArea) / 2)
                        EndIf
                    EndIf
            EndSelect
        Default
            ;
    EndSelect
    ;
    Delay(1)
    ;
Until Quit = #True
End 

GetActiveGadget liefert immer das Gadget das den Fokus hat und damit auch bei den ButtonImageGadgets die ja wenn sie den Fokus bekommen keinen Event erzeugen.


Gruß

Daffy
Wir sind LINUX
Widerstand ist zwecklos - Sie werden emuliert
Antworten