Das OFFIZIELLE PROFAN SUPPORT FORUM
Einsteigerfragen
PROFAN-Programmierung
Helfer & Tools
Anregungen & Vorschläge
PROFAN-NEWS
Die Regeln!
1 - Einsteigerfragen

 Neues Thema  |  Zur Übersicht  |  Suchen  |  Einloggen   Neuerer Beitrag  |  Älteres Thema 
 Toolbar + Zeichnen
Autor: Heinz Brill (---.customers.d1-online.com)
Datum:   17.05.15 11:37

Hallo,
Ich hätte mal eine Frage :
Mit der Toolbar und der integrierten TOOLBAR32
kann man ja schöne Textbuttons erzeugen.

Nun will ich die Restbreite der Toolbar für eine
Bitmap und Infos ausnutzen, indem ich mit
StartPaint .. EndPaint einfach auf die Toolbar
schreibe bzw. male. Das klappt auch solange,
bis kein Dialog (z.B. LoadFile$() usw.) darüber
zum Liegen kommt. Ich hatte jetzt angenommen,
mit Set("AutoPaint", 1) und %wmPaint die Bitmap
und den Text neu zeichnen zu können. Das scheint
aber nicht zu gehen.

Hier mal ein kleines Demoprogramm, was zeigen soll,
was ich meine :

 Declare Handle hToolBar, hBild
 Declare Int ende, String datei
 
 ende = 0
 Set("AutoPaint", 1)
 
 WindowTitle "Bestell - Formular"
 Window 860, 480
 
 hBild = @Create("HPIC", 0, "TOOLBAR32")
 hToolbar = @Create("TOOLBAR", %hWnd, hbild, 0, 32, 2000, 1)
 @Toolbar("AddTextButton", hToolBar, 13, 101, "Speichern", "Speichern")
 @Toolbar("AddTextButton", hToolBar, 12, 102, "Laden", "Laden")
 @Toolbar("AddTextButton", hToolBar, 49, 103, "Ende", "EXIT")  
 
 DrawHelp()
 AddHotKey 101, 113, 0   ' F2 = Speichern
 AddHotKey 102, 114, 0   ' F3 = Laden
 
 WhileNot ende
    WaitInput
    Case %Key = 2 : ende = 1
    Case %wmPaint : DrawHelp()
    If @MenuItem(101)
       datei = SaveFile$(%HWnd, "Datei speichern", "CSV-Dateien|*.CSV", 1)
    ElseIf @MenuItem(102)
       datei = LoadFile$(%HWnd, "Datei laden", "CSV-Dateien|*.CSV")
    ElseIf @MenuItem(103)
        ende = 1
    EndIf    
 EndWhile
 
 Proc DrawHelp
 Declare Handle bild2
 Mcls 100, 50, RGB(255,0,0)
 bild2 = @Create("hSizedPic", 0, "&MEMBMP", 100, 50, 0)
 StartPaint hToolbar
    DrawPic bild2, 300, 5, 0
    DrawText 450, 10, "F2 = Speichern"
    DrawText 450, 30, "F3 = Laden"
 EndPaint
 EndProc
 End
 


Hab jetzt nur mal ein rotes Rechteck aus dem Speicher gemalt.
Hat da jemand eine Idee, wie man das anstellen könnte ?

PS: Die TextButtons aus der TOOLBAR32 bleiben ja auch erhalten,
nur mein Selbstgemaltes nicht.

H.Brill
XProfan X4 + FreeProfan

Nachricht bearbeitet (17.05.15 11:41)

Beitrag beantworten
 
 Re: Toolbar + Zeichnen
Autor: Jürgen Albrecht (---.dip0.t-ipconnect.de)
Datum:   17.05.15 20:16

Nabend.
Probier mal:
Set("Autopaint", 0)


Gruß

Beitrag beantworten
 
 Re: Toolbar + Zeichnen
Autor: Matthias Griesbach (---.customers.d1-online.com)
Datum:   18.05.15 10:23

Mit der SubClassProc klappt das ganz gut, wenn auch mit einer Krücke siehe Code.



$H Messages.ph
 $H Windows.ph
 $H COMMCTRL.PH
 
 Declare Handle hToolBar, hBild
  Declare Int ende, String datei
  
  Proc Resize
   SetWindowPos hToolbar = 0, 0 - 0,0; 0
   If %MouseKey <> 1
     DrawHelp()
   EndIf
 EndProc
  
 SubClassProc
   If SubClassMessage(%hWnd, ~wm_sizing)
     Resize
     Set("WinProc", 1)
   ElseIf subClassMessage(%hWnd,~wm_size)
     Resize
     Set("WinProc", 0)
   EndIF
   'Krücke! 
   'Testen ob ein Farbpunkt aus dem Gemalten auf der Toolbar vorhanden ist.
   'Wenn nicht, dann neu malen.
   Case GetPixel(310,7) <> RGB(255,0,0) : DrawHelp
 EndProc
  ende = 0
  Set("AutoPaint", 1)
  
  WindowTitle "Bestell - Formular"
  Window 860, 480
  
  hBild = @Create("HPIC", 0, "TOOLBAR32")
  hToolbar = @Create("TOOLBAR", %hWnd, hbild, 0, 32, 2000, 1)
  @Toolbar("AddTextButton", hToolBar, 13, 101, "Speichern", "Speichern")
  @Toolbar("AddTextButton", hToolBar, 12, 102, "Laden", "Laden")
  @Toolbar("AddTextButton", hToolBar, 49, 103, "Ende", "EXIT")  
  
  DrawHelp()
  AddHotKey 101, 113, 0   ' F2 = Speichern
  AddHotKey 102, 114, 0   ' F3 = Laden
  
  SubClass %HWnd, 1
  
  WhileNot ende
     WaitInput
     Case %Key = 2 : ende = 1
     Case %wmPaint : DrawHelp()
     If @MenuItem(101)
        datei = SaveFile$(%HWnd, "Datei speichern", "CSV-Dateien|*.CSV", 1)
     ElseIf @MenuItem(102)
        datei = LoadFile$(%HWnd, "Datei laden", "CSV-Dateien|*.CSV")
     ElseIf @MenuItem(103)
         ende = 1
     EndIf    
  EndWhile
  
  SubClass %HWnd, 0
  
  Proc DrawHelp
  Declare Handle bild2
  Mcls 100, 50, RGB(255,0,0)
  bild2 = @Create("hSizedPic", 0, "&MEMBMP", 100, 50, 0)
  StartPaint hToolbar
     DrawPic bild2, 300, 5, 0
     DrawText 450, 10, "F2 = Speichern"
     DrawText 450, 30, "F3 = Laden"
  EndPaint
  EndProc
  End
  


Ich würde aber alles in eine Speicherbitmap malen, und dann MCopy verwenden.

Beste Grüße
Matthias

XProfan X2, Windows 7

Beitrag beantworten
 
 Re: Toolbar + Zeichnen
Autor: Jörg Sellmeyer (---.dip0.t-ipconnect.de)
Datum:   18.05.15 14:11

Du könntest einfach mit Create("Bitmap",...) ein Bildstatic auf die Toolbar setzen und dem mit Create("hSizedPic",...) ein Bitmap zuweisen.

 Var Handle hPic = Create("hSizedPic",-1,"MeinBild.jpg",432,38,0)
 Var Handle hStatic = Create("Bitmap",hToolbar,hPic,300,4)
 

Man muss nur die Größe des Bildes an die Toolbar anpassen.

Kleiner Nachtrag:
Mit Width(hToolbar) - %bmpx kannst du das Bild ganz easy an den rechten Rand rücken.

hStatic = Create("Bitmap",hToolbar,hPic,Width(hToolbar) - %bmpx,0)


_____________________________________
Man sollte seiner Zeit nicht zu weit voraus sein

Nachricht bearbeitet (19.05.15 16:57)

Beitrag beantworten
 
 Re: Toolbar + Zeichnen
Autor: Matthias Griesbach (---.customers.d1-online.com)
Datum:   18.05.15 16:19

@Jörg

Hast Du da auch noch eine Idee, wie man das Rechtsbündig bewerkstelligen kann, wenn sich die Fenstergröße ändert?
So bleibt das Bildstatic ja immer an der selben Stelle auf der Toolbar.

Gruß Matthias

XProfan X2, Windows 7

Beitrag beantworten
 
 Re: Toolbar + Zeichnen
Autor: Heinz Brill (---.dip0.t-ipconnect.de)
Datum:   18.05.15 18:31

Danke erstmal.
Die Bitmap bleibt mal jedenfalls auf der
Toolbar. Also Bitmap klappt. Was ich nun
weiter wollte, ist, was Geschriebenes
anzuzeigen.
Das funktioniert anscheinend nur mit einem kleinen Trick :

 Proc DrawHelp
 Declare Handle staticwin, bild2, hstatic
 staticwin = @Create("Static", hToolbar, 450, 2, 250, 50)
 MCls 250, 50
 StartPaint staticwin
   RectAngle 1, 1 - 248, 48
   DrawText 10, 10, "F2 = Speichern   F3 = Laden"
   DrawText 10, 30, "F5 = Drucken     F10 = Ende"
   CopyBmpToMem 0, 0 - 250, 50 > 0, 0
 EndPaint
 DestroyWindow(staticwin)
 bild2 = @Create("hPic", 0, "&MEMBMP")
 hstatic = Create("Bitmap",hToolbar, bild2, 450, 2)
 EndProc
 
 


Offenbar muß es ein Windows-Control sein, damit man
in dieses auch mit DrawText schreiben kann. Bei der
Bitmap klappte das nicht.

H.Brill
XProfan X4 + FreeProfan

Nachricht bearbeitet (18.05.15 20:23)

Beitrag beantworten
 
 Re: Toolbar + Zeichnen
Autor: Jörg Sellmeyer (---.dip0.t-ipconnect.de)
Datum:   18.05.15 22:20

Du musst dann nicht auf das Static (Create("Bitmap"...), sondern auf das Bild malen.
Mit Startpaint -1 malst du in die Memorybitmap und das kannst du dann auf das Static laden.

_____________________________________
Man sollte seiner Zeit nicht zu weit voraus sein

Beitrag beantworten
 
 Re: Toolbar + Zeichnen
Autor: Jörg Sellmeyer (---.dip0.t-ipconnect.de)
Datum:   18.05.15 22:23

Das muss man dann nach Änderung der Fenstergröße (%Key = 4) neu berechnen und mit MoveWindow entsprechend scalieren/verschieben.

_____________________________________
Man sollte seiner Zeit nicht zu weit voraus sein

Beitrag beantworten
 
 Re: Toolbar + Zeichnen
Autor: Heinz Brill (---.dip0.t-ipconnect.de)
Datum:   19.05.15 19:22

Ja, klappt jetzt soweit.
Irgendwie hatte ich den Text mit
der Hintergrundfarbe übermalt.

H.Brill
XProfan X4 + FreeProfan

Beitrag beantworten
 Foren-Liste  |  Baumstruktur   Neuerer Beitrag  |  Älteres Thema 


 Foren-Liste  |  Zur Registrierung 
 Benutzerlogin
 Benutzername:
 Passwort:
 Login-Daten speichern:
   
 Passwort vergessen?
E-Mail-Adresse oder Username unten eingeben. Dann wird Dir per e-Mail ein neues Passwort zugeschickt.

phorum.org