![]() |
Anzeige:
|
|
|||||||
| XProfan Alles rund um die Programmiersprache XProfan. |
|
![]() |
|
|
LinkBack | Themen-Optionen | Ansicht |
|
|
#1 (Direktlink) |
|
Weiß worum´s geht
![]() Registriert seit: 03.01.2010
Ort: Saarland
Beiträge: 103
|
Ich will beiden Controls unabhängig voneinander Farben (Text Wieso funktioniert die Abfrage von Lparam& nicht Der Versuch mit zwei Callback-Routinen ist auch gescheitert. Wer kann mir einen Tip geben. (xprofan 11,XP prof mit allen SP) |
|
|
|
|
|
|
#2 (Direktlink) |
|
Stammuser
![]() Registriert seit: 08.02.2009
Ort: Bielefeld
Alter: 53
Beiträge: 428
|
Funktioniert doch
Code:
Set("FastMode",1)
$H windows.ph
$H messages.ph
Declare brush&
Proc editcall
Parameters wnd&,msg&,wparam&,lparam&
IF msg&=~WM_CTLCOLOREDIT
If Lparam&=multiedit&
IF brush&
~DeleteObject(brush&)
EndIf
brush&=~CreateSolidBrush(Rgb(25,5,255))
~SetBkMode(wParam&,~TRANSPARENT)
~SetTextColor(wParam&,RGB(205,5,0))
RETURN brush&
EndIf
If Lparam&=edit&
IF brush&
~DeleteObject(brush&)
EndIf
brush&=~CreateSolidBrush(Rgb(255,5,255))
~SetBkMode(wParam&,~TRANSPARENT)
~SetTextColor(wParam&,RGB(25,5,25))
RETURN brush&
endif
EndIf
If msg&=~WM_CLOSE
~DeleteObject(brush&)
'??? ~RemoveProp(edit&,"editcall")
'??? ~RemoveProp(multiedit&,"editcall")
raus&=1
Endif
RETURN ~CallWindowProc(editcallback&,wnd&,msg&,wparam&,lparam&)
EndProc
cls
Var edit&=Create("EDIT",%hwnd,"",16,96,60,20)
Var multiedit&=Create("Multiedit",%hwnd,"",16,136,120,120)
var editcallback&=~SetWindowLong(%hwnd,~GWL_WNDPROC,ProcAddr("editcall",4))
Var raus&=0
WhileNot raus&
WaitInput
EndWhile
End
__________________
Gruss Andreas ______________________ http://www.ampsoft.eu Profan 3.3 - XProfanX2 Windows 95,98,ME,2000,XP Vista - Windows 7 32 / 64 Bit ASUS X93S - Intel Core I7 - NVIDIA GForce GT540M - 8GB Arbeitsspeicher |
|
|
|
|
|
#3 (Direktlink) |
|
Dauergast
![]() Registriert seit: 06.02.2009
Ort: Wien, Österreich
Beiträge: 1.083
|
Einfach superb, wie der Franzose sagt!
Kleiner Wermuthstropfen: Löschen mit PfeilNachLinks-Taste löscht nicht sofort, überschriebene Zeichen sieht man - aber ohnehin nur, solange der Cursor noch in der selben Zeile steht. Ist aber wirklich kein Beinbruch Gruss
__________________
Win7-64HomPremSP1,XProfan11.2a,XPIA,JWasm,XPSE,IntelCoreQuad2.5GHz/4GB/je1TB HD intern:esataBay:USB2:USB3 |
|
|
|
|
|
#4 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
|
Nein, das Multiedit ist so nicht benutzbar. Schreib mal ein paar Zeilen, bis die Box scrollt und geh dann in die erste Zeile und lösche sie per Entf auf dem linken Buchstaben. Da kommt der ganze Text durcheinander.
Hab auch schon öfter mit Styles und Multiedits rumprobiert. Irgendwie ist immer ein Haken drin. Ehrlich gesagt sollte man die Farben auch nicht ändern, wenn es nicht unbedingt sein muss. Viele User mögen sowas gar nicht.
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. |
|
|
|
|
|
#5 (Direktlink) |
|
Dauergast
![]() Registriert seit: 06.02.2009
Ort: Wien, Österreich
Beiträge: 1.083
|
Ich kann's durchaus brauchen. Kann man Neuzeichnen nicht einfach per Timer auslösen? Und geht dann vielleich umfärben? Vielleicht sogar zeilenweise? (Nurmalsofrag)
__________________
Win7-64HomPremSP1,XProfan11.2a,XPIA,JWasm,XPSE,IntelCoreQuad2.5GHz/4GB/je1TB HD intern:esataBay:USB2:USB3 |
|
|
|
|
|
|
#6 (Direktlink) |
|
Stammuser
![]() Registriert seit: 04.04.2009
Ort: Lübeck
Beiträge: 264
|
Nurmalsogesagt: Edit & Multiedit als RichEdit und dann mit Dieters RTF.pcu, da bleibt fast kein (Farb)Wunsch offen, und dann noch gepaart mit "Pascals" ( RTF-Druck.zip) RichEdit rahmenlos und fester Größe.
Geändert von THFR (17.04.2011 um 01:08 Uhr) |
|
|
|
|
|
#7 (Direktlink) |
|
Dauergast
![]() Registriert seit: 06.02.2009
Ort: Wien, Österreich
Beiträge: 1.083
|
Gerade geladen - Danke!
__________________
Win7-64HomPremSP1,XProfan11.2a,XPIA,JWasm,XPSE,IntelCoreQuad2.5GHz/4GB/je1TB HD intern:esataBay:USB2:USB3 |
|
|
|
|
|
#8 (Direktlink) |
|
Weiß worum´s geht
![]() Registriert seit: 03.01.2010
Ort: Saarland
Beiträge: 103
|
Es ist mir auch schon aufgefallen,daß das Neuzeichnen beim Edit nicht
funktioniert.Wenn man mehrere Zeilen reinschreibt und die Scrollbar bedient, stimmts wieder beim Multiedit. Dann gibt es vllt. auch eine Lösung fürs Neuzeichnen. Es geht mir darum eine Einfärbmethode für möglichst viele Controls zu haben. Danke für die Tips |
|
|
|
|
|
#9 (Direktlink) |
|
Forenmaskottchen
![]() Registriert seit: 09.02.2009
Ort: Bangkok
Beiträge: 686
|
Kann mir mal jemand sagen warum sich das Beispiel mit Subclassproc so seltsam verhält. Erstmal passiert gar nichts. Beim einzeiligen Edit kommt die Farbe wenn ich mit dem Cursor darüber fahre. Beim Multiedit muss ich ich reinklicken, damit die Farbe erscheint.
Code:
$H windows.ph
$H messages.ph
Declare brush&
subclassProc
IF SubClassMessage(%hwnd,~WM_CTLCOLOREDIT)
Set("WinProc",0)
If &sLparam = multiedit&
case brush&:~DeleteObject(brush&)
brush&=~CreateSolidBrush(Rgb(25,5,255))
~SetBkMode(&swParam,~TRANSPARENT)
~SetTextColor(&swParam,RGB(205,5,0))
RETURN brush&
EndIf
If &sLparam = edit&
case brush&:~DeleteObject(brush&)
brush&=~CreateSolidBrush(Rgb(255,5,255))
~SetBkMode(&swParam,~TRANSPARENT)
~SetTextColor(&swParam,RGB(25,5,25))
RETURN brush&
EndIf
Else
Set("WinProc",1)
EndIf
If SubClassMessage(%hwnd,~WM_CLOSE)
~DeleteObject(brush&)
Messagebox("Ende","",0)
SubClass %Hwnd,0
End
Endif
EndProc
cls
Var edit&=Create("EDIT",%hwnd,"",16,96,60,20)
Var multiedit&=Create("Multiedit",%hwnd,"",16,136,120,120)
SubClass %Hwnd,1
Var raus&=0
WhileNot raus&
WaitInput
EndWhile
Getestet mit Win 7 32bit
__________________
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai. http://dieterzornow.gmxhome.de |
|
|
|
|
|
#10 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
|
Das Problem wird sein, dass dein Subclassing erst greift, wenn das Control schon einmal gezeichnet wurde. Das sollte anfangs immer in WM_INITDIALOG (im Messageloop des Controls) passieren, also wenn das Control gerade erstellt wird.
Einmal gezeichnet, meldet Windows auch nur noch eine nötige Restaurierung betroffener Bereiche in WM_PAINT.
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. |
|
|
|
|
|
|
#11 (Direktlink) |
|
Stammuser
![]() Registriert seit: 04.04.2009
Ort: Lübeck
Beiträge: 264
|
Naja, wenn's mit den Bordmitteln nicht so recht geht, können wir ja immer noch zur SKControl.DLL
oder Listview.dll oder .... greifen. |
|
|
|
|
|
#12 (Direktlink) |
|
Weiß worum´s geht
![]() Registriert seit: 03.01.2010
Ort: Saarland
Beiträge: 103
|
Hier eine Lösung aus einem C++ - Forum:
> case WM_CTLCOLOREDIT: > hCtrl=(HWND)lParam; > hdc=(HDC)wParam; > SetBkMode(hdc,TRANSPARENT); SetBkColor(hdc, RGB(0, 0,255)) > SetTextColor(hdc,RGB(255,0,0)); > return (int)hBrush; > > where hBrush is my brush create with > CreateSolidBrush(RGB(0,0,255)); > > this code works perflectly if the edit control is not multiline > (ES_MULTILINE style), otherwise I have refresh problems when the > content is modified (you can't read no more the characters you type). > > If I comment the SetBkMode statement it works but when I type some > characters the background becomes white... If you return a valid brush handle, you should also SetBkColor to the same color as the brush. Calling SetBkMode is not expected, and as so, the control stops working properly. So just replace SetBkMode(hdc, TRANSPARENT) with SetBkColor(hdc, RGB(0, 0, 255)) and you should get what you expected. I don't know how the control would behave like in the case of a bitmap brush. You probably would end up with the brush being used to fill the empty space not overwritten by the BkColor generated by the text output functions called by the Edit control. |
|
|
|
|
|
#13 (Direktlink) |
|
Dauergast
![]() Registriert seit: 06.02.2009
Ort: Wien, Österreich
Beiträge: 1.083
|
Da steht aber, daß bei Multiline Controls genau die selben Probleme auftauchen: > Dieser Code arbeitet ziemlich perfekt solange das Control kein Multline Control ist...
Als Abhilfe wird vorgeschlagen, SetBkMode(hdc, TRANSPARENT) durch SetBkColor(hdc, RGB(0, 0,255)) zu ersetzen. Aber wie lautet da die XProfan-Entsprechung? Gruss
__________________
Win7-64HomPremSP1,XProfan11.2a,XPIA,JWasm,XPSE,IntelCoreQuad2.5GHz/4GB/je1TB HD intern:esataBay:USB2:USB3 |
|
|
|
|
|
#14 (Direktlink) | |
|
Stammuser
![]() Registriert seit: 08.02.2009
Ort: Bielefeld
Alter: 53
Beiträge: 428
|
Zitat:
Code:
Set("FastMode",1)
$H windows.ph
$H messages.ph
Declare brush&
Proc editcall
Parameters wnd&,msg&,wparam&,lparam&
IF msg&=~WM_CTLCOLOREDIT
If Lparam&=multiedit&
IF brush&
~DeleteObject(brush&)
EndIf
brush&=~CreateSolidBrush(Rgb(25,5,255))
~SetBkColor(wParam&,Rgb(25,5,255))
~SetTextColor(wParam&,RGB(205,5,0))
RETURN brush&
EndIf
If Lparam&=edit&
IF brush&
~DeleteObject(brush&)
EndIf
brush&=~CreateSolidBrush(Rgb(255,5,255))
~SetBkColor(wParam&,Rgb(255,5,255))
~SetTextColor(wParam&,RGB(25,5,25))
RETURN brush&
endif
EndIf
If msg&=~WM_CLOSE
~DeleteObject(brush&)
raus&=1
Endif
RETURN ~CallWindowProc(editcallback&,wnd&,msg&,wparam&,lparam&)
EndProc
cls
Var edit&=Create("EDIT",%hwnd,"",16,96,60,20)
Var multiedit&=Create("Multiedit",%hwnd,"",16,136,120,120)
var editcallback&=~SetWindowLong(%hwnd,~GWL_WNDPROC,ProcAddr("editcall",4))
Var raus&=0
WhileNot raus&
WaitInput
EndWhile
End
__________________
Gruss Andreas ______________________ http://www.ampsoft.eu Profan 3.3 - XProfanX2 Windows 95,98,ME,2000,XP Vista - Windows 7 32 / 64 Bit ASUS X93S - Intel Core I7 - NVIDIA GForce GT540M - 8GB Arbeitsspeicher |
|
|
|
|
|
|
#15 (Direktlink) |
|
Gast
Beiträge: n/a
|
Ja genau Andreas, man sollte sich schon etwas Zeit nehmen beim Lesen und
kopieren.Damit wäre dieses Problem vom Tisch brush&=~CreateSolidBrush(Rgb(0,05,255)) ~SetBkColor(wparam&, RGB(0, 05,255)) Der RGB Wert muß jeweils gleich sein. In meinem Beispiel hier funktioniert es so. Gruß Ralph |
|
|
![]() |
|
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
|
|
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Zellen einfärben | Der_Graf | Office-Anwendungen | 1 | 03.03.2011 19:04 |
| Netzwerk Fenster (anders) einfärben | Unregistriert | Windows 7 | 5 | 01.07.2010 17:57 |
| Icons grau einfärben | Frabbing | Spezielles | 0 | 06.02.2010 14:34 |