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.
Automatisch scrollen mit ButtonImageGadget / ComboBoxGadget
Re: Automatisch scrollen mit ButtonImageGadget / ComboBoxGad
@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:
Bei den Funktionen die "durchgehen" werde ich von Zeit zu Zeit mal ein paar "*" dahinter setzen.
Gruß
Daffy
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
;
Gruß
Daffy
Wir sind LINUX
Widerstand ist zwecklos - Sie werden emuliert
Widerstand ist zwecklos - Sie werden emuliert
Re: Automatisch scrollen mit ButtonImageGadget / ComboBoxGad
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.
Da werden ja ganz andere Events gesendet.
Re: Automatisch scrollen mit ButtonImageGadget / ComboBoxGad
@TomS
Ja, das ist schon klar
Gruß
Daffy
Ja, das ist schon klar
Gruß
Daffy
Wir sind LINUX
Widerstand ist zwecklos - Sie werden emuliert
Widerstand ist zwecklos - Sie werden emuliert
Re: Automatisch scrollen mit ButtonImageGadget / ComboBoxGad
Das Eventsystem unter Linux (is uebrigens gtk und nicht kde/qt) funktioniert voellig anders als das von Windows. Damit wirst du nicht weit kommen.
Re: Automatisch scrollen mit ButtonImageGadget / ComboBoxGad
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.
2.) Die Position jedes Gadgets im Scrollarea ist mit SetGadgetData gespeichert (Dann funktioniert es auch mit den umschließenden Containern)
So sieht dann die Eventschleife aus:
======================
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
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
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
Widerstand ist zwecklos - Sie werden emuliert