Deutsch
Forum

SpinEdit Start- und Endwert während der Laufzeit verändern MESSAGES

 

Rainer
Hoefs
Halo zusammen,

ich suche nach Messages mit denen man bei einem SpinEdit, je nach Situation, die Min-, Start- und/oder Endwerte verändern kann.

Für jede Hilfe dankbar,

Gruß

Rainer
 
28.06.2015  
 




H.Brill
vielleicht hilft dir das weiter : [...] 
 
Benutze XPROFAN X3 + FREEPROFAN
Wir sind die XProfaner.
Sie werden von uns assimiliert.
Widerstand ist zwecklos!
Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.

Was die Borg können, können wir schon lange.
28.06.2015  
 




Rainer
Hoefs
Hallo,

vielen Dank, aber funktioniert bei mir nicht, ich habe das SpinEdit mit create("SpinEdit",... erstellt.

MfG
Rainer
 
28.06.2015  
 




RGH
Ab Version X3 stelle ich das Spinedit auf die neue Form um, da die bisherige Variante von Microsoft als "veraltet" bezeichnet wird. Dann werden diese Messages funktionieren.

Das bisherige SpinEdit ist mit der API "createUpDownControl" erzeugt worden. Wenn Du danach suchst, solltest Du auch die dafür passenden Messages finden. Auf die Shcnelle in meinem "schlauen Buch"* für Steuerelemente gefunden:

Die Messages fangen mit UDM_ an.
UDM_SETPOS stellt den Startwert ein. WPARAM hat 0 und in LPARAM steht der Wert.
UDM_SETRANGE stellt den Bereich ein. WPARAM hat 0 und LoWord von LPARAM steht der maximale Wert, in HiWord(LPARAM) der Minimalwert (jeweils 16 Bit).
UDM_SETBASE setzt die Basis auf WPARAM, welches 10 (dezimal) oder 16 (hexadezimal) sein kann.

Gruß
Roland

* Richard J. Simon, Windows 95/NT API Bible, Band 2: Steuerelemente & Nachrichten, SAMS 1996, 129,00 DM
 
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
28.06.2015  
 



Bei sowas kann auch Konstantinopel immer gut helfen:  [...] 


UD_MAXVAL = { $7 | 7 }FFF
UD_MINVAL = -UD_MAXVAL
UDM_GETACCEL = WM_USER + { $6C | 108 }
UDM_GETBASE = WM_USER + { $6E | 110 }
UDM_GETBUDDY = WM_USER + { $6A | 106 }
UDM_GETPOS = WM_USER + { $68 | 104 }
UDM_GETRANGE = WM_USER + { $66 | 102 }
UDM_GETRANGE32 = WM_USER + { $70 | 112 }
UDM_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT
UDM_SETACCEL = WM_USER + { $6B | 107 }
UDM_SETBASE = WM_USER + { $6D | 109 }
UDM_SETBUDDY = WM_USER + { $69 | 105 }
UDM_SETPOS = WM_USER + { $67 | 103 }
UDM_SETRANGE = WM_USER + { $65 | 101 }
UDM_SETRANGE32 = WM_USER + { $6F | 111 }
UDM_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT
UDN_DELTAPOS = UDN_FIRST - { $1 | 1 }
UDN_FIRST = { $0 | 0 }-{ $2D1 | 721 }
UDN_LAST = { $0 | 0 }-{ $2E4 | 740 }
UDS_ALIGNLEFT = { $8 | 8 }
UDS_ALIGNRIGHT = { $4 | 4 }
UDS_ARROWKEYS = { $20 | 32 }
UDS_AUTOBUDDY = { $10 | 16 }
UDS_HORZ = { $40 | 64 }
UDS_HOTTRACK = { $100 | 256 }
UDS_NOTHOUSANDS = { $80 | 128 }
UDS_SETBUDDYINT = { $2 | 2 }
UDS_WRAP = { $1 | 1 }

485 kB
Hochgeladen:28.06.2015
Ladeanzahl114
Herunterladen
 
28.06.2015  
 




RGH
BTW: Was mir das alte Buch verheimlichte: Es gibt auch UDM_SETRANGE32, wo die Werte in WPARAM und LPARAM stehen.

Wenn Du mit $H commctrl.ph die passende Header-Datei nutzt, sin die Messages bekannt und können wie gewohnt genutzt werden, etwa:

SendMessage(hMeinControl, ~UDM_SETRANGE32, 10, 70)

Gruß
Roland
 
XProfan X2
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
28.06.2015  
 




Rainer
Hoefs
Hallo Roland,

funktioniert auch nicht!

MfG
Rainer
 $H windows.ph
 $H messages.ph
 $H commctrl.ph
Def sEditNum(1) External("USER32","SetWindowLongA",&(1),-16,(External("USER32","GetWindowLongA",&(1),-16) | $2000))
cls

Proc Dialog3

    Declare Db%, Feldname%, FeldLaenge&, DezimalStellen%, FeldTyp%, Speichern%, NeuesFeld%, FeldLoeschen%, Next%, Previous%
    Declare ExitDialog%, ErstelleDB%, DbFeldliste%, ListString$, FeldTyp$, DBName%
    Db% = Create("Dialog",Db%,"Datenbank Felder definieren", 180,70,818,260)
    Var text0% = Create("Text", Db%, "Datenbankname", 24, 16, 184, 16)
    DBname% = Create("Edit", Db%, "Datenbankname", 24, 40, 184, 24)
    Var text1% = Create("Text", Db%, "Feldname", 224, 16, 184, 16)
    Feldname% = Create("Edit", Db%, "Feldname", 224, 40, 184, 24)
    SendMessage(Feldname%,$00C5,10,0)
    Var text3% = Create("Text", Db%, "Feldtyp", 424, 16, 160, 16)
    FeldTyp% = Create("ChoiceBox", Db%, 0, 424, 40, 160, 116)
    AddString(FeldTyp%,"C = Alphanumerisch")
    AddString(FeldTyp%,"N = Numerisch")
    AddString(FeldTyp%,"D = Datum")
    AddString(FeldTyp%,"L = Logisch (J/N)")
    AddString(FeldTyp%,"M = Memofeld")
    SelectString(FeldTyp%,-1,"C =")
    Var  text2% = Create("Text", Db%, "Feldlänge", 600, 16, 96, 16)
    Feldlaenge& =Create("SpinEdit", Db%,"1;1;1", 600, 40, 76, 24)
    SEditNum(FeldLaenge&)
    Var text4% = Create("Text", Db%, "Dezimalstellen", 692, 16, 126, 16)
    Dezimalstellen% = Create("SpinEdit", Db%, "0;0;2", 692, 40, 96, 24)
    SEditNum(DezimalStellen%)
    Speichern% = Create("Button", Db%, "*.STR speichern", 495, 80, 121, 24)
    NeuesFeld% = Create("Button", Db%, "Feld anhängen", 168, 80, 112, 24)
    FeldLoeschen% = Create("Button", Db%, "Feld löschen", 332, 80, 111, 24)
    ExitDialog% = Create("Button", Db%, "Beenden", 24, 80, 92, 24)
    ErstelleDb% = Create("Button", Db%, "*.DBF erstellen", 668, 80, 122, 24)
    DbFeldListe% = Create("ListBox", Db%, 0, 24, 114, 764, 100)
    EnableWindow FeldLaenge&,1
    SetText FeldLaenge&,"0"
    EnableWindow DezimalStellen%,0
    SetText DezimalStellen%,"0"
    Declare I%
    I% = 0
    UserMessages 16
    Declare DialogEnde%
    DialogEnde% = 0

    WhileNot DialogEnde% = 1

        WaitInput
        Case %umessage = 16 : BREAK

        If Clicked(Feldname%)

        ElseIf Clicked(FeldTyp%)

            Feldtyp$ = Left$(GetText$(FeldTyp%),1)

            Select FeldTyp$

                CaseOf "C"

                EnableWindow FeldLaenge&,1
                '**************************************************************************************
                ' Hier soll der Max-Wert auf 254 wegen C-Feld gesetzt werden!
                '**************************************************************************************
                SendMessage(FeldLaenge&, ~UDM_SETRANGE32, 1, 254)
                SetText FeldLaenge&,"1"
                EnableWindow DezimalStellen%,0
                SetText DezimalStellen%,"0"

                CaseOf "N"

                '**************************************************************************************
                ' Hier soll der Max-Wert auf 19 wegen N-Feld gesetzt werden!
                '**************************************************************************************
                SendMessage(FeldLaenge&, ~UDM_SETRANGE32, 1, 19)
                EnableWindow FeldLaenge&,1
                SetText FeldLaenge&,"1"
                EnableWindow DezimalStellen%,1
                SetText DezimalStellen%,"0"

                CaseOf "D"

                SetText DezimalStellen%,"0"
                EnableWindow DezimalStellen%,0
                SetText FeldLaenge&,"8"
                EnableWindow FeldLaenge&,0

                CaseOf "L"

                SetText DezimalStellen%,"0"
                EnableWindow DezimalStellen%,0
                SetText FeldLaenge&,"1"
                EnableWindow FeldLaenge&,0

                CaseOf "M"

                SetText DezimalStellen%,"0"
                EnableWindow DezimalStellen%,0
                SetText FeldLaenge&,"10"
                EnableWindow FeldLaenge&,0

            EndSelect

        ElseIf Clicked(FeldLaenge&)

        ElseIf Clicked(Dezimalstellen%)

        ElseIf Clicked(Speichern%)

        ElseIf Clicked(NeuesFeld%)

            ListString$ = Upper$(GetText$(Feldname%))+";"+Upper$(Left$( GetText$(FeldTyp%);1))+";"+GetText$( FeldLaenge&)+";"+GetText$(DezimalStellen%)

            If SelectString(DbFeldListe%,-1,Upper$(GetText$(Feldname%))) > -1

                MessageBox("Feld besteht bereits!\r\rBitte Felddaten korrigieren!","Fehler bei Felddefinition!",64)
                SetFocus(Feldname%)

            Else

                AddString(DbFeldListe%,ListString$)
                SelectString(DbFeldListe%,-1,ListString$)

            EndIf

        ElseIf Clicked(FeldLoeschen%)

        ElseIf Clicked(Next%)

        ElseIf Clicked(Previous%)

        ElseIf Clicked(ExitDialog%)

            DialogEnde% = 1

        ElseIf Clicked(ErstelleDB%)

        ElseIf Clicked(DbFeldliste%)

        EndIf

    EndWhile

    DestroyWindow(Db%)

EndProc

Dialog3
End
 
28.06.2015  
 




RGH
Möglicherweise kann man bei dem Control diese Werte nicht nachträglich ändern. Dann hilft nur eins: Control mit DestroyWindow() löschen und mit den neuen Werten neu erstellen.

Gruß
Roland
 
XProfan X2
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
28.06.2015  
 




Rainer
Hoefs
Hallo Roland,

das habe ich auch schon erfolglos probiert!

MfG
Rainer
 
28.06.2015  
 




RGH
Sorry, mein Fehler:

Das Handle von SpinEdit ist ja zunächst das Handle des Edit-Feldes und nicht das Handle des UpDown-Controls!
Da die ItemId des UpDown-Controls exakt 1 höher ist, als das des Edit-Feldes davor, kann man so dessen Handle ermitteln und mit den oben erwähnten Messages auch tatsächlich im laufenden Programm ändern:
var hEdit& = Create("SpinEdit", %hWnd, "60; -100; 100", 8, 56, 80, 20)
var hSpin& = GetHandle(%hWnd, ItemId(hEdit&) + 1)
SendMessage(hSpin&,$467,0,95)'  95 = Ausgangszahl
SendMessage(hSpin&,$46f,40,1440)'  40 bis 1440 = Mini-und Maximalwert

Um das komplette Spinedit zu löschen, muss man beide mit DestroyWindow() entfernen.

Gruß
Roland
 
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
28.06.2015  
 




Rainer
Hoefs
Danke Roland, jetzt funktioniert es.

MfG
RAiner
 
28.06.2015  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

6.516 Betrachtungen

Unbenanntvor 0 min.
H.Brill20.05.2023
Rainer Hoefs22.04.2023
Ernst16.04.2021
Michael W.02.01.2021
Mehr...

Themeninformationen

Dieses Thema hat 4 Teilnehmer:

Rainer Hoefs (5x)
RGH (4x)
iF (1x)
H.Brill (1x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie