Paules-PC-Forum.de Anzeige:

Microsoft Windows Intune: PC-Verwaltung und -Sicherheit in der Cloud: Updateverwaltung, Anti-Virus und vieles mehr!


Zurück   Paules-PC-Forum.de > Programmierung > XProfan

XProfan Alles rund um die Programmiersprache XProfan.

EM-Tippspiel

Paule bei Facebook


Paule bei Twitter


Letzte Forenthemen
Gehe zum ersten neuen Beitrag Algorithmen Teil IV...
Aufrufe: 3361, Antworten: 129
Gehe zum ersten neuen Beitrag Hamachi deinstallieren
Aufrufe: 58, Antworten: 5
Gehe zum ersten neuen Beitrag Bundesliga-Tippspiel Saision...
Aufrufe: 7670, Antworten: 187
Gehe zum ersten neuen Beitrag PPF - Spiel "Wörter weiter...
Aufrufe: 26970, Antworten: 4223
Gehe zum ersten neuen Beitrag PPF - Shoppingwahn
Aufrufe: 50963, Antworten: 1397
Gehe zum ersten neuen Beitrag Pc lahmt plötzlich
Aufrufe: 186, Antworten: 6
Gehe zum ersten neuen Beitrag PC fährt nicht mehr hoch.
Aufrufe: 0, Antworten: 0
Gehe zum ersten neuen Beitrag Von Live CD Windowspfad...
Aufrufe: 329, Antworten: 19
Gehe zum ersten neuen Beitrag Captur 2.2 (Snow Leo)
Aufrufe: 28, Antworten: 0
Gehe zum ersten neuen Beitrag Captur 2.3 (Lion)
Aufrufe: 34, Antworten: 0
Zeige:





Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 16.04.2011, 09:53   #1 (Direktlink)
Weiß worum´s geht
 
Registriert seit: 03.01.2010
Ort: Saarland
Beiträge: 103
Standard Editbox einfärben


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)) Farbe
~SetBkMode(wParam&,~TRANSPARENT)
~SetTextColor(wParam&,RGB(205,5,0))
' wParam Handle to the device context for the static control 'window.
' lParam Handle to the static control.

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))
' wParam Handle to the device context for the static control
' window.
' lParam Handle to the static control.

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 editcallback&=~SetWindowLong(%hwnd,~GWL_WNDPROC,ProcAddr("editcall",4))

var edit&=Create("EDIT",%hwnd,"",16,96,60,20)
var multiedit&=Create("Multiedit",%hwnd,"",16,136,120,120)

Var raus&=0
WhileNot raus&
WaitInput
EndWhile
End



Ich will beiden Controls unabhängig voneinander Farben
(Text,Hintergrund,Markierung) zuweisen.

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)
Ralph Theobald ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 16.04.2011, 13:35   #2 (Direktlink)
Stammuser
 
Benutzerbild von Andreas Miethe
 
Registriert seit: 08.02.2009
Ort: Bielefeld
Alter: 53
Beiträge: 428
Standard

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
Andreas Miethe ist offline   Mit Zitat antworten
Alt 16.04.2011, 23:14   #3 (Direktlink)
Dauergast
 
Benutzerbild von p. specht
 
Registriert seit: 06.02.2009
Ort: Wien, Österreich
Beiträge: 1.083
Standard

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
p. specht ist gerade online   Mit Zitat antworten
Alt 16.04.2011, 23:21   #4 (Direktlink)
Super-Moderator
 
Benutzerbild von Frabbing
 
Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
Standard

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.
Frabbing ist gerade online   Mit Zitat antworten
Alt 16.04.2011, 23:26   #5 (Direktlink)
Dauergast
 
Benutzerbild von p. specht
 
Registriert seit: 06.02.2009
Ort: Wien, Österreich
Beiträge: 1.083
Standard

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
p. specht ist gerade online   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 17.04.2011, 00:34   #6 (Direktlink)
Stammuser
 
Registriert seit: 04.04.2009
Ort: Lübeck
Beiträge: 264
Standard

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)
THFR ist offline   Mit Zitat antworten
Alt 17.04.2011, 00:55   #7 (Direktlink)
Dauergast
 
Benutzerbild von p. specht
 
Registriert seit: 06.02.2009
Ort: Wien, Österreich
Beiträge: 1.083
Standard

Gerade geladen - Danke!
__________________
Win7-64HomPremSP1,XProfan11.2a,XPIA,JWasm,XPSE,IntelCoreQuad2.5GHz/4GB/je1TB HD intern:esataBay:USB2:USB3
p. specht ist gerade online   Mit Zitat antworten
Alt 17.04.2011, 09:46   #8 (Direktlink)
Weiß worum´s geht
 
Registriert seit: 03.01.2010
Ort: Saarland
Beiträge: 103
Standard

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
Ralph Theobald ist offline   Mit Zitat antworten
Alt 17.04.2011, 11:13   #9 (Direktlink)
Forenmaskottchen
 
Benutzerbild von Bangkok
 
Registriert seit: 09.02.2009
Ort: Bangkok
Beiträge: 686
Standard

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
Mache ich da einen Fehler oder ist das ein Fehler in XProfan X2
Getestet mit Win 7 32bit
__________________
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai.
http://dieterzornow.gmxhome.de
Bangkok ist offline   Mit Zitat antworten
Alt 17.04.2011, 11:36   #10 (Direktlink)
Super-Moderator
 
Benutzerbild von Frabbing
 
Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
Standard

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.
Frabbing ist gerade online   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 17.04.2011, 18:24   #11 (Direktlink)
Stammuser
 
Registriert seit: 04.04.2009
Ort: Lübeck
Beiträge: 264
Standard

Naja, wenn's mit den Bordmitteln nicht so recht geht, können wir ja immer noch zur SKControl.DLL
oder Listview.dll
oder ....
greifen.
THFR ist offline   Mit Zitat antworten
Alt 17.04.2011, 19:45   #12 (Direktlink)
Weiß worum´s geht
 
Registriert seit: 03.01.2010
Ort: Saarland
Beiträge: 103
Standard

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.
Ralph Theobald ist offline   Mit Zitat antworten
Alt 17.04.2011, 20:13   #13 (Direktlink)
Dauergast
 
Benutzerbild von p. specht
 
Registriert seit: 06.02.2009
Ort: Wien, Österreich
Beiträge: 1.083
Standard

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
p. specht ist gerade online   Mit Zitat antworten
Alt 17.04.2011, 20:42   #14 (Direktlink)
Stammuser
 
Benutzerbild von Andreas Miethe
 
Registriert seit: 08.02.2009
Ort: Bielefeld
Alter: 53
Beiträge: 428
Standard

Zitat:
Zitat von p. specht Beitrag anzeigen
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
So sollte das gehen !

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
Andreas Miethe ist offline   Mit Zitat antworten
Alt 17.04.2011, 20:50   #15 (Direktlink)
Unregistriert
Gast
 
Beiträge: n/a
Standard

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
  Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Antwort

  Paules-PC-Forum.de > Programmierung > XProfan

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


Ä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



Alle Zeitangaben in WEZ +2. Es ist jetzt 12:44 Uhr.


Powered by vBulletin® Version 3.8.7 (Deutsch)
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Powered by vBCMS® 2.7.0 ©2002 - 2012 vbdesigns.de
(c) Paules-PC-Forum.de

::: Impressum :::

Search Engine Optimization by vBSEO 3.3.2