[gelöst] Linie zeichnet nicht :(

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

[gelöst] Linie zeichnet nicht :(

Beitrag von scholly »

moin, moin...

Bestimmt seh ich wieder den Wald vor lauter Bäumen nicht, aber wo ist hier der Fehler, der die Linie _nicht_ zeichnet ?

Code: Alles auswählen

  Debug "erstelle Filter-fenster"
  If  OpenWindow(2,10,10,400,335, #PB_Window_SystemMenu |#PB_Window_ScreenCentered, "Filter")
    Debug "erstelle gadgetlist filter"
    If CreateGadgetList(WindowID(2))
      Debug "createImage"    
      If CreateImage(2, 400, 335)
        Debug "StartDrawing(ImageOutput()) aufrufen"
        If StartDrawing(ImageOutput())
          Debug "linien zeichnen"
          
          Line(1, 33,398, 0, RGB(0,0,255))
          LineXY(1, 53,398, 53,RGB(0,0,255))

          StopDrawing()
        Else
          MessageRequester("Bad news:","no StartDrawing in Window (2) possible",#PB_MessageRequester_Ok)
        EndIf    
      Else
        MessageRequester("Bad news:","CreateImage in Window (2) failed",#PB_MessageRequester_Ok)
      EndIf
    Else
      MessageRequester("Bad news:","GadgetList Filterwindow couldn't be created",#PB_MessageRequester_Ok)    
    EndIf
  Else
    MessageRequester("Bad news:","Window (2) couldn't be created",#PB_MessageRequester_Ok)
  EndIf
  
 Repeat
   EventID = WaitWindowEvent()
 Until EventID = #PB_Event_CloseWindow
schneeblind...
scholly
Zuletzt geändert von scholly am 21.04.2008 22:24, insgesamt 1-mal geändert.
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Da ist kein Fehler , du laesst dir das Bild aber auch nicht anzeigen.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

genau, du musst für das image noch ein imagegadget erstellen...

btw. "Bad News:" is ja witzig.. :allright:
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag von scholly »

hallodri hat geschrieben:Da ist kein Fehler , du laesst dir das Bild aber auch nicht anzeigen.
ok, ich hab jetzt

Code: Alles auswählen

ImageGadget(2, 0, 0, 0, 0, ImageID())
nach StopDrawing() eingefügt, aber wie bekomme ich den Hintergrund ins Standard-Grau ?

Oder anders herum: ich will eigentlich nur ein paar Blaue Linien in eine Art Formular zeichnen, die aber nicht verschwinden dürfen, wenn das Fenster mal überdeckt war.
Geht das einfacher als mein Weg ?

bis denne...
scholly
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

du kannst auchn call back fürs refresh anlegen, wie das genau geht weiss ich nicht.
d.h. du zeichnest die linien jedesmal neu bei nem refresh event,
dafür aber direkt auf den hintergrund.

evtl. gabs auch ne lösung für transparenten hintergrund bei images,
war hier maln thread im forum, hab ich aber nicht weiter verfolgt...


das standard-grau ist sehr schwierig zu bekommen, weil das auch vom desktopdesign abhängig ist.

in VB haben die farben 32bit kennungen, da gibt es dann hochnumrige farben,
die auf die desktop-tabelle verweisen und sich mitändern...

also, die kennungen haben die natürlich generell, allerdings weiss ich nicht,
wie man in PB drauf zugreift, evtl. gibts ne API-lösung.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Code: Alles auswählen

  ; http://search.microsoft.com/search/search.aspx?View=en-us

  Procedure Callback(hwnd, msg, wParam, lParam)
    Result = #PB_ProcessPureBasicEvents
    
    Protected ps.PAINTSTRUCT
    Protected pen.l
    
    Select msg
      Case #WM_PAINT
         
        hdc = BeginPaint_(hwnd,ps)
        
        pen = CreatePen_(#PS_SOLID,1,RGB(0,0,255)) 
        SelectObject_(hdc,pen)
        
        MoveToEx_(hdc,0,33,0)
        LineTo_(hdc,398,33)
        MoveToEx_(hdc,0,53,0)
        LineTo_(hdc,398,53)
        
        DeleteObject_(pen)
        EndPaint_(hwnd,ps)
        
        ProcedureReturn #False
    EndSelect
    
    ProcedureReturn Result
  EndProcedure

    
  OpenWindow(2,10,10,400,335, #PB_Window_SystemMenu |#PB_Window_ScreenCentered, "Filter") 
  SetWindowCallback(@Callback()) 
  
  Repeat
    EventID = WaitWindowEvent()
  Until EventID = #PB_Event_CloseWindow

Code: Alles auswählen

CreateImage(0,100,100)

StartDrawing(ImageOutput())
  Box(0,0,100,100,GetSysColor_(#COLOR_WINDOW - 1))
StopDrawing()

SaveImage(0,"lala.bmp")
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag von scholly »

@hallodri:
Das ist
- für mich als blutigen PB-Anfänger nicht verständlich/nachvollziehbar
- OS-abhängig
uns somit keine Lösung für mich.

Wenn ich mit PB-eigenen Mitteln keine resistenten Linien in ein Fenster zwischen Gadgets zeichnen kann, dann lass ich das eben. Nur hätte ich gerade das (wenn möglich) von kompetenter Seite bestätigt ;).

bis denne...
scholly
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

scholly hat geschrieben:@hallodri:
Das ist
- für mich als blutigen PB-Anfänger nicht verständlich/nachvollziehbar
- OS-abhängig
uns somit keine Lösung für mich.
bitte diese beiden Kriterien in Deinen nächsten Fragen mit angeben, denn
dadurch kann sich dann so mancher Helfer viel Arbeit sparen.

Grüße ... Kiffi
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag von scholly »

moin, moin...
Kiffi hat geschrieben:bitte diese beiden Kriterien in Deinen nächsten Fragen mit angeben, denn dadurch kann sich dann so mancher Helfer viel Arbeit sparen.
Entschuldigunge bitte, aber das hier ist doch das "Anfänger-Forum", oder ?
Und PB ist ja nicht nur Windows.
Wie soll ich als Anfänger (ich hab PB gerade mal 3 Wochen inne Finger) denn ahnen, daß meine Frage sich zu einem solchen "Problem" ausweitet ?
Ich hab halt gedacht, ich mach was wie "drawline Left,Top,Width,Height, RGB" und dann ist gut und die bleibt im Fenster, auch wenns mal durch das DEBUG-Fenster verdeckt ist.
Erst durch die (für mich) komplizierte Lösung hat sich herausgestellt, daß ich Linien/Boxen nicht als einfache Möglichkeiten nutzen kann, Fensterbereiche zusätzlich zu strukturieren.
Auch in anderen Threads kam die OS-(un)abhängigkeit erst später ins Spiel und ich war trotzdem froh, die Bespiele gesehen zu haben, denn mehr als BASIC will ich wirklich nicht mehr machen/lernen und dann ist es gut, über die Dutzenden von Beispielsourcen, die man downloaden kann, hinaus zu erkennen/verstehen, was mit PB geht und wo man OS-Apis bemühen müßte.

bis denne...
scholly
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag von hardfalcon »

Ich hab jetzt den Thread nicht ganz durchgelesen (sry, faulheit :oops: ), aber es gibt doch ein PB-Event, das Anzeigt, dass der Fensterinhalt neu gezeichnet werden muss. Und wenn das Auftritt, làsst du dein Zeugs mit WindowOutput() neu zeichen. Sollte doch kein Problem sein, oder? :wink:
Antworten