Forum | | | | - Seite 1 - |
| Rainer Hoefs | Hallo,
bin verzweifelt am Suchen von Befehlen um einen bestimmten Eintrag in einer Gridbox als den Obersten in der Box anzeigen zu lassen.
Ebenso möchte ich wissen welcher Eintrag nach dem Scrollen nun als oberster in der gridbox gezeigt wird.
Nichts was ich gefunden habe funktioniert bei mir.
Es geht dabei um folgendes:
In der GridBox werden Farben aufgelistet. Jede Zeile hat diese Felder: Name, Nr, Rotwert, Grünwert, Blauwert. Es werden 16 Zeilen gezeigt.
Links von der Gridbox ist vor jeder Zeile ein Feld, in dem die Farbe als Farbton gezeigt wird. Die RGB-Werte der 16 ersten Zeilen werden gelesen und die Farbfelder gezeichnet. Das funktioniert nach dem Initialisieren tadellos. Nun wird aber gescrollt, und die 16 Felder müssen neu gefärbt werden.
Dazu benötige ich eine Funktion um die aktuell zu oberst gezeigten Zeile zu markieren und deren Index zu ermitteln. Dann werden die nun angezeigten 16 Zeilen gelesen und die Felder eingefärbt.
Wenn ich mit den Pfeiltatsten Hoch und Runter oder mit BildHoch und BildRunter den Balken verschiebe, wie bekomme ich die Zeile die dann aktuell markiert ist?
Gibt es irgendwo die Möglichkeit über ein GridBoxChanged?
Vielleicht kann mir jemand helfen.
Danke im voraus!
Rainer |
| | | | |
| | | | - Seite 2 - |
| | « Dieser Beitrag wurde als Lösung gekennzeichnet. » | | - Seite 2 - |
| Rainer Hoefs | Hallo,
hier das Ergebnis, welches mit Eurer Hilfe erreicht wurde.
Danke nochmals
Rainer
'***********************************************************************************
$H Messages.ph
$H Windows.ph
$H commctrl.ph
'***********************************************************************************
Def GetSysColor(1) !"USER32","GetSysColor"
Def CreateBitmap(5) !"GDI32","CreateBitmap"
Def SelectObject(2) !"GDI32","SelectObject"
Def Show(1) ShowWindow(@&(1), 1)
Def Hide(1) ShowWindow(@&(1), 0)
Declare R%[], G%[], B%[], Txt$[], ColNum$[], I%, Modify%
Declare Red&, Green&, Blue&, ColNum%, ColDesription$, SumColors%, GridboxString$
Declare Lv#, icolist&
Var Ende% = 0
struct Lv = Mask&,Item&,SubItem&,State&,StateMask&,Text&,TextMax&,Image&
dim Lv#,Lv
'***********************************************************************************
Proc LvSetIcon
Lv#.Item&=&(2)
Lv#.SubItem&=&(3)
Lv#.Mask&=~LVIF_IMAGE
Lv#.Image&=%(4)
sendmessage(&(1),~LVM_SETITEM,0,Lv#)
EndProc
'***********************************************************************************
Proc DrawRGBEdit
StartPaint %hwnd
UsePen 0,2, Rgb(102,102,102)
UseBrush 1, Rgb(255, 0,0)
Rectangle 262,510,362,545
UsePen 0,2, Rgb(102,102,102)
UseBrush 1, Rgb(0, 255,0)
Rectangle 382,510,482,545
UsePen 0,2, Rgb(102,102,102)
UseBrush 1, Rgb(0, 0, 255)
Rectangle 504,510,604,545
EndPaint
EndProc
'***********************************************************************************
Proc DrawEmptySelection
StartPaint %hwnd
UsePen 0,3, Rgb(127,127,127)
UseBrush 1, Rgb(255, 255, 255)
Rectangle 526,32,610,378
UsePen 5,0, Rgb(127, 127, 127)
UseBrush 1, Rgb(127, 127, 127)
Rectangle 528,149,609,378
UsePen 5,0, Rgb(0, 0, 0)
UseBrush 1, Rgb(0, 0, 0)
Rectangle 528,264,609,378
EndPaint
EndProc
'***********************************************************************************
Proc GetDetailsfromString
ColNum% = Val(Mid$(GridBoxStr$, 2, 6))
ColDesription$ = Mid$(GridBoxStr$, Len(GridBoxStr$)-51, 40)
Red& = Int(Val(Mid$(GridBoxStr$, Len(GridBoxStr$)-10, 3)))
Green& = Int(Val(Mid$(GridBoxStr$, Len(GridBoxStr$)-6,3)))
Blue& = Int(Val(Right$(GridBoxStr$, 3)))
EndProc
'***********************************************************************************
Proc ShowSelectedColor
GetDetailsfromString
StartPaint %hwnd
UsePen 5,3, Rgb(0,0,0)
UseBrush 1, Rgb(Red&, Green&, Blue&)
Rectangle 540,44,598,368
EndPaint
SetSelectedColor
EndProc
'***********************************************************************************
Proc CreateNewColorList
Beep
Assign #1,"C:\ColorList.Dat"
ReWrite #1
I% = 0
WhileNot I% = 256
R%[I%] = Rnd(256)
G%[I%] = Rnd(256)
B%[I%] = Rnd(256)
ColNum$[I%] = Format$("000000",I%)
Txt$[I%] = ColNum$[I%]+"|"+ColNum$[I%]+"|"+MkStr$("Bemerkung-",4)+"|"+Format$("000",R%[I%])+"|"+Format$("000",G%[I%])+"|"+Format$("000",B%[I%])
Print #1, Txt$[I%]
Inc I%
EndWhile
Close #1
Clear R%[], G%[], B%[]
EndProc
'***********************************************************************************
Proc ReadTheColorList
Var RT$ = ""
Clear ColNum$[], Txt$[], R%[], G%[], B%[]
Assign #1,"C:\ColorList.Dat"
Reset #1
I% = 0
WhileNot Eof(#1)
Input #1, RT$
ColNum$[I%] = Val(Mid$(RT$, 2, 6))
Txt$[I%] = Mid$(RT$, Len(RT$)-51, 40)
R%[I%] = Int(Val(Mid$(RT$, Len(RT$)-10, 3)))
G%[I%] = Int(Val(Mid$(RT$, Len(RT$)-6,3)))
B%[I%] = Int(Val(Right$(RT$, 3)))
addstring(ColorGridbox&, RT$)
Inc I%
SumColors% = I%
RT$ = ""
EndWhile
Close #1
EndProc
'***********************************************************************************
Proc MakeColorBitmaps
Parameters R%, G%, B%
Declare x&, y&
x& = CreateBitmap(94,20,1,1,0)
MCls 94,20
StartPaint -1
Cls
UsePen 0,1,RGB(1,0,0)
UseBrush 1, Rgb(R%, G%, B%)
Rectangle 0,0 - 94,20
y& = SelectObject(%hdc,x&)
ImageList("Add", icolist&, y&, 0)
EndPaint
EndProc
'***********************************************************************************
Proc MakeColorFields
icolist& = Create("ImageList", 94,20,33,0)
sendmessage(ColorGridbox&,~LVM_SETIMAGELIST,~LVSIL_SMALL,IcoList&)
I% = 0
WhileNot I% = SumColors%
MakeColorBitmaps R%[I%], G%[I%], B%[I%]
LvSetIcon(ColorGridbox&,I%,0,I%)
Inc I%
EndWhile
EndProc
'***********************************************************************************
Proc ShowColorEditor
Parameters Status%
If Status% = 1
EnableWindow ColorEditor&, 0
EnableWindow Ende&, 0
SetWindowPos %hwnd = %winleft, %wintop - Width(%hwnd,1), Height(%hwnd,1) + 160
Else
EnableWindow ColorEditor&, 1
EnableWindow Ende&, 1
Case (Modify% = 1) : Modify% = 0
EnableWindow ModifyEd&, 1
SetWindowPos %hwnd = %winleft, %wintop - Width(%hwnd,1), Height(%hwnd,1) - 160
EndIf
EndProc
'***********************************************************************************
Proc SetSelectedColor
GetDetailsfromString
SetText ColNumEd&, Str$(ColNum%)
SetText ColNameEd&, ColDesription$
SetText RedEd&, Str$(Red&)
SetText GreenEd&, Str$(Green&)
SetText BlueEd&, Str$(Blue&)
EndProc
'***********************************************************************************
Proc ClearTheFields
SetText ColNumEd&, ""
SetText ColNameEd&, ""
SetText RedEd&, ""
SetText GreenEd&, ""
SetText BlueEd&, ""
EndProc
'***********************************************************************************
Proc ShowMeColor
Parameters Col%
Declare Found%
SetFocus(ColorGridbox&)
Found% = SelectString(ColorGridbox&,Col%,"")
GridBoxStr$ = GetString$(ColorGridbox&,GetCurSel(ColorGridbox&))
ShowSelectedColor
EndProc
'***********************************************************************************
Proc SaveTheColor
Declare Question$
Var ColNum$ = MkStr$("0",(6 - Len(GetText$(ColNumEd&)))) + GetText$(ColNumEd&)
Var ColDesription$ = GetText$(ColNameEd&) + Space$(40 - (Len(GetText$(ColNameEd&))))
Var Red$ = MkStr$("0",(3 - Len(GetText$(RedEd&)))) + GetText$(RedEd&)
Var Green$ = MkStr$("0",(3 - Len(GetText$(GreenEd&)))) + GetText$(GreenEd&)
Var Blue$ = MkStr$("0",(3 - Len(GetText$(BlueEd&)))) + GetText$(BlueEd&)
Var SaveString$ = ColNum$+"|"+ColNum$+"|"+ColDesription$+"|"+Red$+"|"+Green$+"|"+Blue$
Var Position% = GetCurSel(ColorGridbox&)
If Modify% = 1
If Messagebox("Wollen Sie die Farbe mit der Nummer: "+GetText$(ColNumEd&)+" wirklich ändern?","ACHTUNG!",292) = 6
DeleteString(ColorGridbox&,Position%)
InsertString(ColorGridbox&,Position%,SaveString$)
UpdateGridBox
ModifyColor 0
SelectString(ColorGridbox&,Position%,"")
GridBoxStr$ = GetString$(ColorGridbox&,GetCurSel(ColorGridbox&))
ShowSelectedColor
EndIf
Else
If SelectString(ColorGridbox&,-1,GetText$(ColNumEd&))
If MessageBox("Die Farbe mit der Nummer: "+GetText$(ColNumEd&)+" existiert bereits\rWollen Sie diese Farbe wirklich Speichern?","Doppelte Farbnummer",292) = 6
AddString(ColorGridbox&,SaveString$)
UpdateGridBox
ModifyColor 0
SelectString(ColorGridbox&,GetCount(ColorGridbox&)-1,"")
GridBoxStr$ = GetString$(ColorGridbox&,GetCurSel(ColorGridbox&))
ShowSelectedColor
EndIf
EndIf
EndIf
EndProc
'***********************************************************************************
Proc SearchOneColor
Var SearchColor$ = Input$("Bitte zu suchende Farbnummer mit max. 6 Zahlen eingeben:","Farbe suchen","123456")
If SelectString(ColorGridbox&,-1,SearchColor$)
GridBoxStr$ = GetString$(ColorGridbox&,GetCurSel(ColorGridbox&))
ShowSelectedColor
Else
MessageBox("Keine Farbe mit der Nummer: "+SearchColor$+" gefunden!","Fehler bei der Suche",48)
EndIf
EndProc
'***********************************************************************************
Proc DeleteTheColor
Var OK% = Messagebox("Wollen Sie die Farbe mit der Nummer: "+GetText$(ColNumEd&)+" wirklich löschen?","ACHTUNG!",292)
If OK% = 6
DeleteString(ColorGridbox&,GetCurSel(ColorGridbox&))
UpdateGridBox
SelectString(ColorGridbox&,0,"")
GridBoxStr$ = GetString$(ColorGridbox&,GetCurSel(ColorGridbox&))
ShowSelectedColor
EndIf
EndProc
'***********************************************************************************
Proc UpdateModifiedColor
StartPaint %hwnd
UsePen 5,3, Rgb(0,0,0)
UseBrush 1, Rgb(Val(GetText$(RedEd&)), Val(GetText$(GreenEd&)), Val(GetText$(BlueEd&)))
Rectangle 540,44,598,368
EndPaint
EndProc
'***********************************************************************************
Proc ModifyColor
Parameters Mode%
If Mode% = 1
EnableWindow ModifyEd&, 0
Modify% = 1
GridBoxStr$ = GetString$(ColorGridbox&,GetCurSel(ColorGridbox&))
Else
EnableWindow ModifyEd&, 1
Modify% = 0
EndIf
EndProc
'***********************************************************************************
Proc UpdateGridBox
Hide(ColorGridbox&)
ReWriteColorDataFile
ClearList ColorGridbox&
ReadTheColorList
MakeColorFields
Show(ColorGridbox&)
EndProc
'***********************************************************************************
Proc ReWriteColorDataFile
Var ColorEntries% = GetCount(ColorGridbox&)
Assign #2,"C:\ColorList.Dat"
ReWrite #2
I% = 0
WhileNot I% = ColorEntries%
Print #2, GetString$(ColorGridbox&, I%)
Inc I%
EndWhile
Close #2
EndProc
'***********************************************************************************
'** Hauptschleife
'***********************************************************************************
cls GetSysColor(15)
WindowStyle 10 | 512 | 2048
WindowTitle "Arbeitsfenster"
Window ((%maxX-644)/2), 100 - 644,500
Set("Truecolor",1)
var Spalten$ = "Farbe;0;98;WollfarbNr.;1;80;Bemerkung;0;298;R;1;40;G;1;40;B;1;40"
var ColorGridbox& = create("Gridbox",%hwnd,Spalten$,0,10,10,500,380)
Var GridBoxStr$ = ""
Var GrBx& = Create("GroupBox",%hwnd,"Auswahl",518,10,100,382)
Var Ende& = Create("Button",%hwnd,"&Ende", 10,400,100,30)
Var ColorEditor& = Create("Button",%hwnd,"&Farbeditor", 515,400,100,30)
'**** Beginn Farbeditor ************************************************************
Var GrBxEd& = create("Groupbox", %hwnd, "Farbeditor", 1, 455, 626,12)
Create("Text",%hwnd,"Farbnummer:",20,477,90,24) : Var ColNumEd& = Create("Edit", %hwnd, "12346", 110,475,50,24)
Create("Text",%hwnd,"Farbname:",180,477,80,24) : Var ColNameEd& = Create("Edit", %hwnd, "12346", 260,475,345,24)
DrawRGBEdit
Create("Text",%hwnd,"Farbwerte für Rot - Grün - Blau:",50,517,200,24)
Var RedEd& = Create("SpinEdit",%hwnd, "0;0;255",280,515,60,24)
Var GreenEd& = Create("SpinEdit",%hwnd, "0;0;255",402,515,60,24)
Var BlueEd& = Create("SpinEdit",%hwnd, "0;0;255",524,515,60,24)
Var EndeEd& = Create("Button",%hwnd,"Beenden", 10,555,70,30)
Var ClearEd& = Create("Button",%hwnd,"Felder leeren", 96,555,100,30)
Var SearchEd& = Create("Button",%hwnd,"Farbe suchen", 212,555,100,30)
Var DeleteEd& = Create("Button",%hwnd,"Farbe löschen", 313,555,100,30)
Var ModifyEd& = Create("Button",%hwnd,"Farbe ändern", 414,555,100,30)
Var SaveEd& = Create("Button",%hwnd,"Farbe sichern", 515,555,100,30)
'**** Ende Farbeditor **************************************************************
ShowWindow(ColorGridbox&,0)
DrawEmptySelection
CaseNot FileExists("C:\ColorList.Dat") : CreateNewColorList
ReadTheColorList
MakeColorFields
ShowMeColor 0
ShowWindow(ColorGridbox&,1)
WhileNot Ende%
waitinput
If Clicked(ColorGridbox&) OR (iskey(13) AND Getfocus(ColorGridbox&))
If GetCurSel(ColorGridbox&) >= 0
GridBoxStr$ = GetString$(ColorGridbox&,GetCurSel(ColorGridbox&))
ShowSelectedColor
EndIf
ElseIf Clicked(ColorEditor&)
ShowColorEditor 1
ElseIf Clicked(ModifyEd&)
ModifyColor 1
ElseIf Clicked(RedEd&)
UpdateModifiedColor
ElseIf Clicked(GreenEd&)
UpdateModifiedColor
ElseIf Clicked(BlueEd&)
UpdateModifiedColor
ElseIf Clicked(SearchEd&)
SearchOneColor
ElseIf Clicked(ClearEd&)
ClearTheFields
ElseIf Clicked(SaveEd&)
SaveTheColor
ElseIf Clicked(DeleteEd&)
DeleteTheColor
ElseIf Clicked(EndeEd&)
ShowColorEditor 0
ElseIf Clicked(Ende&)
DeleteObject icolist&
End
EndIf
EndWhile
'***********************************************************************************
|
| | | | | |
| | Rainer Hoefs | | | | | |
| | Thomas Freier | Wenn es so reicht ok. Soll das Icon (die Farbe) bei selectierter Zeile erhalten bleiben wird es aufwendiger. Es müßte noch die Möglichkeit geben, dass die Zeilenfarbe nicht blau wird und die Zeile nur noch einen gestrichelten Rahmen bekommt. Oder auf das LV-Item eine Bitmap aus dem entsprechendem Icon setzen. |
| | | | |
| | Rainer Hoefs | Thomas Freier (22.04.15)
Wenn es so reicht ok. Soll das Icon (die Farbe) bei selectierter Zeile erhalten bleiben wird es aufwendiger. Es müßte noch die Möglichkeit geben, dass die Zeilenfarbe nicht blau wird und die Zeile nur noch einen gestrichelten Rahmen bekommt. Oder auf das LV-Item eine Bitmap aus dem entsprechendem Icon setzen.
Hallo Thomas,
ja, das mit dem Rahmen wäre gut. Habe schon gesucht bei den Messages in Comm*.ph aber nichts passendes erkannt.
Noch eine weitere Frage: In der liste wird unten immer eine Leerzeile gezeigt, die beim Anklicken zu einem Fehler führt, Wie kann man die wegbekommen, denn die "Farbe" gibt es ja nicht?
Rainer |
| | | | |
| | Thomas Freier | Rainer Hoefs (04/23/15)
Thomas Freier (22.04.15)Wenn es so reicht ok. Soll das Icon (die Farbe) bei selectierter Zeile erhalten bleiben wird es aufwendiger. Es müßte noch die Möglichkeit geben, dass die Zeilenfarbe nicht blau wird und die Zeile nur noch einen gestrichelten Rahmen bekommt. Oder auf das LV-Item eine Bitmap aus dem entsprechendem Icon setzen.
Hallo Thomas, ja, das mit dem Rahmen wäre gut. Habe schon gesucht bei den Messages in Comm*.ph aber nichts passendes erkannt. Noch eine weitere Frage: In der liste wird unten immer eine Leerzeile gezeigt, die beim Anklicken zu einem Fehler führt, Wie kann man die wegbekommen, denn die "Farbe" gibt es ja nicht? Rainer
Zum 1. muß ich suchen. Müßte einen SetStyle H, [M,] N geben. Zum 2. es wird Clicked(Lv&) abgefragt. Also die Gridbox. Für Aktionen besser GetCurSel(Lv&). Es wird ggf. -1 zurückgegeben und dann Fehler.
|
| | | | |
| | Rainer Hoefs | | | | | |
| | Thomas Freier | Auf die Schnelle finde ich das nicht. Ein Beispiel, wo das Icon nicht gefärbt wird ist unter [...] zu finden. Ist zwar aus der Zeit vor der Gridbox, aber immer noch eine Quelle. |
| | | | |
| | Rainer Hoefs | Hallo,
hier das Ergebnis, welches mit Eurer Hilfe erreicht wurde.
Danke nochmals
Rainer
'***********************************************************************************
$H Messages.ph
$H Windows.ph
$H commctrl.ph
'***********************************************************************************
Def GetSysColor(1) !"USER32","GetSysColor"
Def CreateBitmap(5) !"GDI32","CreateBitmap"
Def SelectObject(2) !"GDI32","SelectObject"
Def Show(1) ShowWindow(@&(1), 1)
Def Hide(1) ShowWindow(@&(1), 0)
Declare R%[], G%[], B%[], Txt$[], ColNum$[], I%, Modify%
Declare Red&, Green&, Blue&, ColNum%, ColDesription$, SumColors%, GridboxString$
Declare Lv#, icolist&
Var Ende% = 0
struct Lv = Mask&,Item&,SubItem&,State&,StateMask&,Text&,TextMax&,Image&
dim Lv#,Lv
'***********************************************************************************
Proc LvSetIcon
Lv#.Item&=&(2)
Lv#.SubItem&=&(3)
Lv#.Mask&=~LVIF_IMAGE
Lv#.Image&=%(4)
sendmessage(&(1),~LVM_SETITEM,0,Lv#)
EndProc
'***********************************************************************************
Proc DrawRGBEdit
StartPaint %hwnd
UsePen 0,2, Rgb(102,102,102)
UseBrush 1, Rgb(255, 0,0)
Rectangle 262,510,362,545
UsePen 0,2, Rgb(102,102,102)
UseBrush 1, Rgb(0, 255,0)
Rectangle 382,510,482,545
UsePen 0,2, Rgb(102,102,102)
UseBrush 1, Rgb(0, 0, 255)
Rectangle 504,510,604,545
EndPaint
EndProc
'***********************************************************************************
Proc DrawEmptySelection
StartPaint %hwnd
UsePen 0,3, Rgb(127,127,127)
UseBrush 1, Rgb(255, 255, 255)
Rectangle 526,32,610,378
UsePen 5,0, Rgb(127, 127, 127)
UseBrush 1, Rgb(127, 127, 127)
Rectangle 528,149,609,378
UsePen 5,0, Rgb(0, 0, 0)
UseBrush 1, Rgb(0, 0, 0)
Rectangle 528,264,609,378
EndPaint
EndProc
'***********************************************************************************
Proc GetDetailsfromString
ColNum% = Val(Mid$(GridBoxStr$, 2, 6))
ColDesription$ = Mid$(GridBoxStr$, Len(GridBoxStr$)-51, 40)
Red& = Int(Val(Mid$(GridBoxStr$, Len(GridBoxStr$)-10, 3)))
Green& = Int(Val(Mid$(GridBoxStr$, Len(GridBoxStr$)-6,3)))
Blue& = Int(Val(Right$(GridBoxStr$, 3)))
EndProc
'***********************************************************************************
Proc ShowSelectedColor
GetDetailsfromString
StartPaint %hwnd
UsePen 5,3, Rgb(0,0,0)
UseBrush 1, Rgb(Red&, Green&, Blue&)
Rectangle 540,44,598,368
EndPaint
SetSelectedColor
EndProc
'***********************************************************************************
Proc CreateNewColorList
Beep
Assign #1,"C:\ColorList.Dat"
ReWrite #1
I% = 0
WhileNot I% = 256
R%[I%] = Rnd(256)
G%[I%] = Rnd(256)
B%[I%] = Rnd(256)
ColNum$[I%] = Format$("000000",I%)
Txt$[I%] = ColNum$[I%]+"|"+ColNum$[I%]+"|"+MkStr$("Bemerkung-",4)+"|"+Format$("000",R%[I%])+"|"+Format$("000",G%[I%])+"|"+Format$("000",B%[I%])
Print #1, Txt$[I%]
Inc I%
EndWhile
Close #1
Clear R%[], G%[], B%[]
EndProc
'***********************************************************************************
Proc ReadTheColorList
Var RT$ = ""
Clear ColNum$[], Txt$[], R%[], G%[], B%[]
Assign #1,"C:\ColorList.Dat"
Reset #1
I% = 0
WhileNot Eof(#1)
Input #1, RT$
ColNum$[I%] = Val(Mid$(RT$, 2, 6))
Txt$[I%] = Mid$(RT$, Len(RT$)-51, 40)
R%[I%] = Int(Val(Mid$(RT$, Len(RT$)-10, 3)))
G%[I%] = Int(Val(Mid$(RT$, Len(RT$)-6,3)))
B%[I%] = Int(Val(Right$(RT$, 3)))
addstring(ColorGridbox&, RT$)
Inc I%
SumColors% = I%
RT$ = ""
EndWhile
Close #1
EndProc
'***********************************************************************************
Proc MakeColorBitmaps
Parameters R%, G%, B%
Declare x&, y&
x& = CreateBitmap(94,20,1,1,0)
MCls 94,20
StartPaint -1
Cls
UsePen 0,1,RGB(1,0,0)
UseBrush 1, Rgb(R%, G%, B%)
Rectangle 0,0 - 94,20
y& = SelectObject(%hdc,x&)
ImageList("Add", icolist&, y&, 0)
EndPaint
EndProc
'***********************************************************************************
Proc MakeColorFields
icolist& = Create("ImageList", 94,20,33,0)
sendmessage(ColorGridbox&,~LVM_SETIMAGELIST,~LVSIL_SMALL,IcoList&)
I% = 0
WhileNot I% = SumColors%
MakeColorBitmaps R%[I%], G%[I%], B%[I%]
LvSetIcon(ColorGridbox&,I%,0,I%)
Inc I%
EndWhile
EndProc
'***********************************************************************************
Proc ShowColorEditor
Parameters Status%
If Status% = 1
EnableWindow ColorEditor&, 0
EnableWindow Ende&, 0
SetWindowPos %hwnd = %winleft, %wintop - Width(%hwnd,1), Height(%hwnd,1) + 160
Else
EnableWindow ColorEditor&, 1
EnableWindow Ende&, 1
Case (Modify% = 1) : Modify% = 0
EnableWindow ModifyEd&, 1
SetWindowPos %hwnd = %winleft, %wintop - Width(%hwnd,1), Height(%hwnd,1) - 160
EndIf
EndProc
'***********************************************************************************
Proc SetSelectedColor
GetDetailsfromString
SetText ColNumEd&, Str$(ColNum%)
SetText ColNameEd&, ColDesription$
SetText RedEd&, Str$(Red&)
SetText GreenEd&, Str$(Green&)
SetText BlueEd&, Str$(Blue&)
EndProc
'***********************************************************************************
Proc ClearTheFields
SetText ColNumEd&, ""
SetText ColNameEd&, ""
SetText RedEd&, ""
SetText GreenEd&, ""
SetText BlueEd&, ""
EndProc
'***********************************************************************************
Proc ShowMeColor
Parameters Col%
Declare Found%
SetFocus(ColorGridbox&)
Found% = SelectString(ColorGridbox&,Col%,"")
GridBoxStr$ = GetString$(ColorGridbox&,GetCurSel(ColorGridbox&))
ShowSelectedColor
EndProc
'***********************************************************************************
Proc SaveTheColor
Declare Question$
Var ColNum$ = MkStr$("0",(6 - Len(GetText$(ColNumEd&)))) + GetText$(ColNumEd&)
Var ColDesription$ = GetText$(ColNameEd&) + Space$(40 - (Len(GetText$(ColNameEd&))))
Var Red$ = MkStr$("0",(3 - Len(GetText$(RedEd&)))) + GetText$(RedEd&)
Var Green$ = MkStr$("0",(3 - Len(GetText$(GreenEd&)))) + GetText$(GreenEd&)
Var Blue$ = MkStr$("0",(3 - Len(GetText$(BlueEd&)))) + GetText$(BlueEd&)
Var SaveString$ = ColNum$+"|"+ColNum$+"|"+ColDesription$+"|"+Red$+"|"+Green$+"|"+Blue$
Var Position% = GetCurSel(ColorGridbox&)
If Modify% = 1
If Messagebox("Wollen Sie die Farbe mit der Nummer: "+GetText$(ColNumEd&)+" wirklich ändern?","ACHTUNG!",292) = 6
DeleteString(ColorGridbox&,Position%)
InsertString(ColorGridbox&,Position%,SaveString$)
UpdateGridBox
ModifyColor 0
SelectString(ColorGridbox&,Position%,"")
GridBoxStr$ = GetString$(ColorGridbox&,GetCurSel(ColorGridbox&))
ShowSelectedColor
EndIf
Else
If SelectString(ColorGridbox&,-1,GetText$(ColNumEd&))
If MessageBox("Die Farbe mit der Nummer: "+GetText$(ColNumEd&)+" existiert bereits\rWollen Sie diese Farbe wirklich Speichern?","Doppelte Farbnummer",292) = 6
AddString(ColorGridbox&,SaveString$)
UpdateGridBox
ModifyColor 0
SelectString(ColorGridbox&,GetCount(ColorGridbox&)-1,"")
GridBoxStr$ = GetString$(ColorGridbox&,GetCurSel(ColorGridbox&))
ShowSelectedColor
EndIf
EndIf
EndIf
EndProc
'***********************************************************************************
Proc SearchOneColor
Var SearchColor$ = Input$("Bitte zu suchende Farbnummer mit max. 6 Zahlen eingeben:","Farbe suchen","123456")
If SelectString(ColorGridbox&,-1,SearchColor$)
GridBoxStr$ = GetString$(ColorGridbox&,GetCurSel(ColorGridbox&))
ShowSelectedColor
Else
MessageBox("Keine Farbe mit der Nummer: "+SearchColor$+" gefunden!","Fehler bei der Suche",48)
EndIf
EndProc
'***********************************************************************************
Proc DeleteTheColor
Var OK% = Messagebox("Wollen Sie die Farbe mit der Nummer: "+GetText$(ColNumEd&)+" wirklich löschen?","ACHTUNG!",292)
If OK% = 6
DeleteString(ColorGridbox&,GetCurSel(ColorGridbox&))
UpdateGridBox
SelectString(ColorGridbox&,0,"")
GridBoxStr$ = GetString$(ColorGridbox&,GetCurSel(ColorGridbox&))
ShowSelectedColor
EndIf
EndProc
'***********************************************************************************
Proc UpdateModifiedColor
StartPaint %hwnd
UsePen 5,3, Rgb(0,0,0)
UseBrush 1, Rgb(Val(GetText$(RedEd&)), Val(GetText$(GreenEd&)), Val(GetText$(BlueEd&)))
Rectangle 540,44,598,368
EndPaint
EndProc
'***********************************************************************************
Proc ModifyColor
Parameters Mode%
If Mode% = 1
EnableWindow ModifyEd&, 0
Modify% = 1
GridBoxStr$ = GetString$(ColorGridbox&,GetCurSel(ColorGridbox&))
Else
EnableWindow ModifyEd&, 1
Modify% = 0
EndIf
EndProc
'***********************************************************************************
Proc UpdateGridBox
Hide(ColorGridbox&)
ReWriteColorDataFile
ClearList ColorGridbox&
ReadTheColorList
MakeColorFields
Show(ColorGridbox&)
EndProc
'***********************************************************************************
Proc ReWriteColorDataFile
Var ColorEntries% = GetCount(ColorGridbox&)
Assign #2,"C:\ColorList.Dat"
ReWrite #2
I% = 0
WhileNot I% = ColorEntries%
Print #2, GetString$(ColorGridbox&, I%)
Inc I%
EndWhile
Close #2
EndProc
'***********************************************************************************
'** Hauptschleife
'***********************************************************************************
cls GetSysColor(15)
WindowStyle 10 | 512 | 2048
WindowTitle "Arbeitsfenster"
Window ((%maxX-644)/2), 100 - 644,500
Set("Truecolor",1)
var Spalten$ = "Farbe;0;98;WollfarbNr.;1;80;Bemerkung;0;298;R;1;40;G;1;40;B;1;40"
var ColorGridbox& = create("Gridbox",%hwnd,Spalten$,0,10,10,500,380)
Var GridBoxStr$ = ""
Var GrBx& = Create("GroupBox",%hwnd,"Auswahl",518,10,100,382)
Var Ende& = Create("Button",%hwnd,"&Ende", 10,400,100,30)
Var ColorEditor& = Create("Button",%hwnd,"&Farbeditor", 515,400,100,30)
'**** Beginn Farbeditor ************************************************************
Var GrBxEd& = create("Groupbox", %hwnd, "Farbeditor", 1, 455, 626,12)
Create("Text",%hwnd,"Farbnummer:",20,477,90,24) : Var ColNumEd& = Create("Edit", %hwnd, "12346", 110,475,50,24)
Create("Text",%hwnd,"Farbname:",180,477,80,24) : Var ColNameEd& = Create("Edit", %hwnd, "12346", 260,475,345,24)
DrawRGBEdit
Create("Text",%hwnd,"Farbwerte für Rot - Grün - Blau:",50,517,200,24)
Var RedEd& = Create("SpinEdit",%hwnd, "0;0;255",280,515,60,24)
Var GreenEd& = Create("SpinEdit",%hwnd, "0;0;255",402,515,60,24)
Var BlueEd& = Create("SpinEdit",%hwnd, "0;0;255",524,515,60,24)
Var EndeEd& = Create("Button",%hwnd,"Beenden", 10,555,70,30)
Var ClearEd& = Create("Button",%hwnd,"Felder leeren", 96,555,100,30)
Var SearchEd& = Create("Button",%hwnd,"Farbe suchen", 212,555,100,30)
Var DeleteEd& = Create("Button",%hwnd,"Farbe löschen", 313,555,100,30)
Var ModifyEd& = Create("Button",%hwnd,"Farbe ändern", 414,555,100,30)
Var SaveEd& = Create("Button",%hwnd,"Farbe sichern", 515,555,100,30)
'**** Ende Farbeditor **************************************************************
ShowWindow(ColorGridbox&,0)
DrawEmptySelection
CaseNot FileExists("C:\ColorList.Dat") : CreateNewColorList
ReadTheColorList
MakeColorFields
ShowMeColor 0
ShowWindow(ColorGridbox&,1)
WhileNot Ende%
waitinput
If Clicked(ColorGridbox&) OR (iskey(13) AND Getfocus(ColorGridbox&))
If GetCurSel(ColorGridbox&) >= 0
GridBoxStr$ = GetString$(ColorGridbox&,GetCurSel(ColorGridbox&))
ShowSelectedColor
EndIf
ElseIf Clicked(ColorEditor&)
ShowColorEditor 1
ElseIf Clicked(ModifyEd&)
ModifyColor 1
ElseIf Clicked(RedEd&)
UpdateModifiedColor
ElseIf Clicked(GreenEd&)
UpdateModifiedColor
ElseIf Clicked(BlueEd&)
UpdateModifiedColor
ElseIf Clicked(SearchEd&)
SearchOneColor
ElseIf Clicked(ClearEd&)
ClearTheFields
ElseIf Clicked(SaveEd&)
SaveTheColor
ElseIf Clicked(DeleteEd&)
DeleteTheColor
ElseIf Clicked(EndeEd&)
ShowColorEditor 0
ElseIf Clicked(Ende&)
DeleteObject icolist&
End
EndIf
EndWhile
'***********************************************************************************
|
| | | | |
| | E.T. | Sehr schön, nur eines gefällt nicht so recht: Wenn eine Zeile markiert ist, wird in dieser die Farbe des linken Feldes verändert, so das die Farben links in der Box und rechts unterschiedlich aussehen. Wa im ersten Moment etwas
|
| | | XProfan X2Grüße aus Sachsen... Mario WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte... | 24.04.2015 ▲ |
| |
| | Rainer Hoefs | Hallo,
ja, das ist im Moment leider so.
Thomas Freier meinte es gäbe eine Möglichkeit bei den Style-Settings nur einen Rahmen um die Zeile zu setzen. Das wäre dann ideal.
Ich habe auch schon bei den Messages gesucht, und nichts gefunden, was man ggf. benutzen könnte. So muß ich mich im Moment eben so behelfen.
Sollte noch irgendjemanden etwas dazu einfallen, wäre ich für den Tip, wie immer, sehr dankbar.
Rainer |
| | | | |
| | Jörg Sellmeyer | Ganz brachial könntest du einfach nach deinem Mausklick in die Gridlist den Focus aufs Hauptfenster setzen:
|
| | | Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 25.04.2015 ▲ |
| |
| | Rainer Hoefs | Hallo Jörg,
ist ja 'ne echte "quick & dirty"-Lösung, die aber bestens funktioniert.
Denn nach der Auswahl einer Farbe in der Liste wird ja sowieso irgendetwas damit angefangen, z.B. im Farbeditor gearbeitet, oder wenn alles im richtigen Dialog in meinem Teppich-Kolorier- und Druckprogramm integriert ist, ein Teppich koloriert, wo dann ja sofort der Focus auf anderen Bedienelementen sitzt.
Insofern eine gute und praktikable Lösung.
Danke.
Rainer
p.s. Dennoch.... wenn jemandem noch die saubere Windows-Api-Lösung einfällt.... |
| | | | |
| | Thomas Freier | Es wird dann die markierte Zeile hellgrau und die Farbe ändert sich auch noch. Alternativ mit Checkbox, dann Haken setzen und alles deselektieren. Oder Bitmap auf das Icon der markierten Zeile. Kleines Beispiel (Problem bleibt das Ermitteln der Item-Koordinaten ohne Litview.dll)
window 10,100-450,400
WindowTitle "Wahl nach Doppelklick links"'
$H windows.ph
$H messages.ph
$H commctrl.ph
'
declare Lv#
struct Lv=Mask&,Item&,SubItem&,State&,StateMask&,Text&,TextMax&,Image&
dim Lv#,Lv
'
proc LvSetIcon'---------------------------------------------LvSetIcon
Lv#.Item&=&(2)
Lv#.SubItem&=&(3)
Lv#.Mask&=~LVIF_IMAGE
Lv#.Image&=%(4)
sendmessage(&(1),~LVM_SETITEM,0,Lv#)
endproc'-------------------------------------------------------------
'
var IcoList&=create("ImageList",26,26)
ImageList("AddIcon",IcoList&,~LoadIcon(0,32512))
ImageList("AddIcon",IcoList&,~LoadIcon(0,32513))
ImageList("AddIcon",IcoList&,~LoadIcon(0,32514))
ImageList("AddIcon",IcoList&,~LoadIcon(0,32515))
'
var a$=";0;56;Spalte 2;0;120;Spalte 3;0;120"
var Lv&=create("gridbox",%hwnd,a$,0,10,30,400,200)
sendmessage(Lv&,~LVM_SETIMAGELIST,~LVSIL_SMALL,IcoList&)
'
a$="|Test x b|Test x c|Test x d|Test x e"
whileloop 0,5
addstring(Lv&,translate$(a$,"x",str$(&loop)))
LvSetIcon(Lv&,&loop,0,1)
endwhile
SubClass %hwnd, 1
UserMessages 2000
Declare x&,y&,x%,y%
Declare bi&, ba&, item&
while 1
waitinput
If (%umessage = 2000) AND (&ulparam > -1)
x&= &ulparam
y&= &uwparam
x%=0
y%=SendMessage(LV&,$101D, x&,0)
Whileloop 0,x&-1,1
x%=x%+SendMessage(LV&,$101D, &loop,0)
EndWhile
'########################################################################
MCls 32,26
StartPaint -1
Cls
UsePen 0,6,RGB(255,0,0)
Rectangle 0,0 - 32,26
EndPaint
bi&=Create("hPic", 0,"&MEMBMP")
DestroyWindow(ba&)
ba&=Create("Bitmap", LV&, bi&,2, 25+(y&*27))
'########################################################################
EndIf
EndWhile
DeleteObject bi&
Usermessages 0
SubClass %hwnd, 0
END
SubClassProc
If SubClassMessage(%hWnd, ~WM_NOTIFY)
If Long(&sLParam,8)=-3
item&=Long(&sLParam,12)
If item&<>-1
SendMessage(%hwnd, 2000, item&, Long(&sLParam,16))
EndIf
EndIf
EndIf
EndProc
Bei mir ist die Beschriftung tlw. zu groß. Screen-1.jpg |
| | | | |
|
AntwortenThemenoptionen | 5.971 Betrachtungen |
ThemeninformationenDieses Thema hat 6 Teilnehmer: |