Wie kann ich nach dem zeichnen nicht aufhören?

Eigentlich ist mir die Frage peinlich, aber es kann sonst niemand helfen ... :)

Moderator: Moderatoren

Antworten
Benutzeravatar
Eugeny Lutsenko
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 108
Registriert: Fr, 15. Mai 2020 16:16
Wohnort: Russland, der südliche Föderale Bezirk, die Stadt Krasnodar
Hat sich bedankt: 12 Mal
Danksagung erhalten: 1 Mal
Kontaktdaten:

Wie kann ich nach dem zeichnen nicht aufhören?

Beitrag von Eugeny Lutsenko »

Ich habe alle Grafiken normal gezeichnet, aber nach dem schreiben der Grafik als Datei gibt es einen Stopp. Um weiterzugehen, müssen Sie Esc drücken. Wenn es viele Termine gibt, wird es schwierig. Gibt es eine Möglichkeit, irgendwie zu tun, dass dieser Anschlag nicht stattfindet?

Code: Alles auswählen

   ****** Цикл по будущим сценариям *******************************

   SELECT DrawScen
   DBGOTOP()
   DO WHILE .NOT. EOF()

      PUBLIC X_MaxW := 1800, Y_MaxW := 900           // Размер графического окна для отображения когнитивных диаграмм в пикселях
      PUBLIC nXSize := 1800
      PUBLIC nYSize :=  900
      
      oScr := DC_WaitOn('Немного подождите! Идет формирование изображения в памяти и его масштабирование',,,,,,,,,,,.F.)
      
      // Create new bitmap with given size
      oPS := XBPPRESSPACE() :new() :Create()
      oBMP := XBPBITMAP() :New() :Create()
*     oBMP:Make( nXSize, nYSize, nPlanes, nBits )
      oBMP:Make( nXSize, nYSize )
      oBMP:presSpace( oPS )
      
      // here your GRA* Code 
      
      **** Закрасить фон прямоугольника ***************
*     GraSetColor( oPS, GRA_CLR_WHITE, GRA_CLR_WHITE )
      GraSetColor( oPS, BD_LIGHTGREY, BD_LIGHTGREY )
      GraBox( oPS, { 0, 0 }, { nXSize, nYSize }, GRA_FILL ) 
      
      *########################################################################################################################################
      DrawScenario(oPS, Kod, Name, Kod_Sc, N_PointsScenario, mPar)                                         // Графическая функция <<<===#######
      *########################################################################################################################################
      
      *My image original, my image scaled
      
      DC_Impl(oScr)                                                   

      SELECT DrawScen

      DO CASE
         CASE mPar = 'Cls'

              ****** Запись полноразмерного графического файла в папку: M_PathAppl+"\FutureScenarios\"
              DIRCHANGE(M_PathAppl)                                   // Перейти в папку текущего приложения
              IF FILEDATE("FutureScenarios",16) = CTOD("//")
                 DIRMAKE("FutureScenarios")
                 aMess := {}
                 AADD(aMess, L('В папке текущего приложения: "'+UPPER(ALLTRIM(M_PathAppl))+'"'))
                 AADD(aMess, L('не было директории "FutureScenarios" для будущих сценариев и она была создана!'))
                 AADD(aMess, L('В эту папку записываются исходные изображения высокого качества (без масштабирования)'))
                 LB_Warning(aMess, L('2.1. Классификационные шкалы и градации' ))
              ENDIF
              DIRCHANGE(M_PathAppl+"\FutureScenarios\")                  // Перейти в папку Futurecenarios
              cFileName = 'FutureScen'+'-'+ALLTRIM(STRTRAN(STR(Kod,mNRazr),' ','0'))+'-Splain.jpg'

         CASE mPar = 'Atr'

              ****** Запись полноразмерного графического файла в папку: M_PathAppl+"\PastScenarios\"
              DIRCHANGE(M_PathAppl)                                   // Перейти в папку текущего приложения
              IF FILEDATE("PastScenarios",16) = CTOD("//")
                 DIRMAKE("PastScenarios")
                 aMess := {}
                 AADD(aMess, L('В папке текущего приложения: "'+UPPER(ALLTRIM(M_PathAppl))+'"'))
                 AADD(aMess, L('не было директории "PastScenarios" для прошлых сценариев и она была создана!'))
                 AADD(aMess, L('В эту папку записываются исходные изображения высокого качества (без масштабирования)'))
                 LB_Warning(aMess, L('2.2. Описательные шкалы и градации' ))
              ENDIF
              DIRCHANGE(M_PathAppl+"\PastScenarios\")                  // Перейти в папку Futurecenarios
              cFileName = 'PastScen'+'-'+ALLTRIM(STRTRAN(STR(Kod,mNRazr),' ','0'))+'-Splain.jpg'

      ENDCASE
      
      ERASE(cFileName)
      oBMP:SaveFile(cFileName,XBPBMP_FORMAT_JPG)
      
      IF nWidth > 1800
         FullView( cFileName, "по верху", 65 )                // Визуализация полноразмерного файла на мониторе высокого разрешения
      ELSE
         ****** Формирование с помощью bmp2bmp() и отображение масштабированного изображения
         aNewSize := {nWidth,nHeight-29}                      // Новый размер изображения (еще немного уменьшается, чтобы не рисовать по панели задач)
         oBMP:loadFile(cFileName)                             // Загрузка полноразмерного изображения
         oRet := BMP2BMP(oBMP,aNewSize)                       // Масштабирование изображения
         cFileNameScale = SUBSTR(cFileName,1,AT(".jpg",cFileName)-1)+"_scaled.jpg"
         ERASE(cFileNameScale)
         oRet:saveFile(cFileNameScale,XBPBMP_FORMAT_JPG)      // Запись масштабированного графического файла в в папку приложения для визуализации
         FullView( cFileNameScale, "по верху", 0 )            // Визуализация масштабированного графического файла на мониторе ограниченного разрешения
      
      ENDIF
      DIRCHANGE(M_PathAppl)                                   // Перейти в папку текущего приложения

      SELECT DrawScen
      DBSKIP(1)
   ENDDO
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Wie kann ich nach dem zeichnen nicht aufhören?

Beitrag von ramses »

Ich würde einmal die beiden Zeilen:

- oScr := DC_WaitOn(.....
- DC_Impl(oScr)

entfernen und dann Testen.
Valar Morghulis

Gruss Carlo
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Wie kann ich nach dem zeichnen nicht aufhören?

Beitrag von Tom »

DC_Waiton() erzeugt einen (unabhängigen) Wartescreen, DC_Implode() löscht ihn wieder, das kann man rausnehmen, aber das ist nicht das Problem. Wenn ich das richtig sehe, wird in der Schleife jeweils zu einem Datensatz eine Bitmap als Datei erzeugt und dann per FullView() angezeigt. Um für alle Datensätze insgesamt eine Bitmap zu erzeugen, müsste man den Code umbauen.
Herzlich,
Tom
Benutzeravatar
Eugeny Lutsenko
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 108
Registriert: Fr, 15. Mai 2020 16:16
Wohnort: Russland, der südliche Föderale Bezirk, die Stadt Krasnodar
Hat sich bedankt: 12 Mal
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: Wie kann ich nach dem zeichnen nicht aufhören?

Beitrag von Eugeny Lutsenko »

Danke für die Hinweise. Ich habe PUBLIC über die Schleife hinausgetragen. Strings oScr: = DC_WaitOn(....), DC_Impl (oScr) machte Kommentare. Immer noch Stoppt nach jeder Zeichnung.
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Wie kann ich nach dem zeichnen nicht aufhören?

Beitrag von ramses »

Hast du in deiner Funktion FullView() eine Tastenabfrage eingebaut welche den Stop verursacht?

Du kannst auch mal den Code mit dem Debugger durchgehen dann siehst du genau wo der Stop ist.
Valar Morghulis

Gruss Carlo
Benutzeravatar
Eugeny Lutsenko
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 108
Registriert: Fr, 15. Mai 2020 16:16
Wohnort: Russland, der südliche Föderale Bezirk, die Stadt Krasnodar
Hat sich bedankt: 12 Mal
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: Wie kann ich nach dem zeichnen nicht aufhören?

Beitrag von Eugeny Lutsenko »

Nein, das habe ich nicht getan. Ohne die Funktion FullView () weiß ich nicht, wie ich damit umgehen soll. Der Stopp erfolgt nach der Demonstration des erstellten Bildes auf dem Bildschirm. Beenden Sie diesen Zustand nur durch Esc.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Wie kann ich nach dem zeichnen nicht aufhören?

Beitrag von AUGE_OHR »

Eugeny Lutsenko hat geschrieben: Mo, 27. Jul 2020 21:25 Nein, das habe ich nicht getan. Ohne die Funktion FullView () weiß ich nicht, wie ich damit umgehen soll. Der Stopp erfolgt nach der Demonstration des erstellten Bildes auf dem Bildschirm. Beenden Sie diesen Zustand nur durch Esc.
in deiner Procedure FullView ist eine Event-Schleife

Code: Alles auswählen

      DO WHILE nEvent != xbeP_Close
         nEvent := APPEVENT( @mp1, @mp2, @oXbp )
         IF nEvent == xbeP_Keyboard .AND. mp1 == xbeK_ESC
            oDlg:destroy()
            EXIT
         ELSE
            oXbp:HandleEvent( nEvent, mp1, mp2 )
         ENDIF
      ENDDO
es dient doch "nur" zur Anzeige eines Bild in "FullScreen-Modus " , oder :?:

einfach ein Static mit maximaler Grösse und das Bitmap mit BMP2BMP anpassen und als o:Caption setzten.
das ganze kann man, im Thread, als Slideshow laufen lassen
gruss by OHR
Jimmy
Benutzeravatar
Eugeny Lutsenko
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 108
Registriert: Fr, 15. Mai 2020 16:16
Wohnort: Russland, der südliche Föderale Bezirk, die Stadt Krasnodar
Hat sich bedankt: 12 Mal
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: Wie kann ich nach dem zeichnen nicht aufhören?

Beitrag von Eugeny Lutsenko »

Hey, Jimmy!

Hier ist der Quellcode der FullView-Prozedur (c:\exp20\Samples\Xdemo\ImgView.prg ). Wie ändere ich es so, dass je nach Wert des Parameters nach der Darstellung des Bildes ein Stopp oder kein Stopp angezeigt wird?
/*
* This procedure displays an image file in a separate window
*/
PROCEDURE FullView( cFile )
LOCAL oDlg, oImage, oPS, aSize, aPos

/*
* Only bitmap and meta files are supported
*/
IF cFile <> NIL .AND. ;
( ".BMP" $ Upper( cFile ) .OR. ;
".EMF" $ Upper( cFile ) .OR. ;
".GIF" $ Upper( cFile ) .OR. ;
".JPG" $ Upper( cFile ) .OR. ;
".PNG" $ Upper( cFile ) .OR. ;
".MET" $ Upper( cFile ) )

/*
* Create hidden dialog window
*/
oDlg := XbpDialog():new( AppDesktop(),,,{100,100} )
oDlg:taskList := .F.
oDlg:visible := .F.
oDlg:title := cFile
oDlg:close := {|mp1,mp2,obj| obj:destroy() }
oDlg:create()


/*
* Create a presentation space and connect it with the device
* context of :drawingArea
*/
oPS := XbpPresSpace():new():create( oDlg:drawingArea:winDevice() )

IF ".BMP" $ Upper( cFile ) .OR. ;
".GIF" $ Upper( cFile ) .OR. ;
".JPG" $ Upper( cFile ) .OR. ;
".PNG" $ Upper( cFile )

/*
* File contains a bitmap. Limit the window size to a range
* between 16x16 pixel and the screen resolution
*/
oImage := XbpBitmap():new():create( oPS )
oImage:loadFile( cFile )

aSize := { oImage:xSize, oImage:ySize }
aSize[1] := Max( 16, Min( aSize[1], AppDeskTop():currentSize()[1] ) )
aSize[2] := Max( 16, Min( aSize[2], AppDeskTop():currentSize()[2] ) )
aSize := oDlg:calcFrameRect( {0,0, aSize[1], aSize[2]} )

oDlg:setSize( {aSize[3], aSize[4]} )

/*
* The window must react to xbeP_Paint to redraw the bitmap
*/
oDlg:drawingarea:paint := {|x,y,obj| x:=obj:currentSize(), ;
oImage:draw( oPS, {0, 0, x[1], x[2]}, ;
{0, 0, oImage:xSize, oImage:ySize},,;
GRA_BLT_BBO_IGNORE), Sleep(0.1) }
ELSE
/*
* Display a meta file. It has no size definition for the image
*/
oImage := XbpMetafile():new():create()
oImage:load( cFile )
aSize := { 600, 400 }
oDlg:setSize( aSize )
oDlg:drawingarea:paint := {|| oImage:draw( oPS, XBPMETA_DRAW_SCALE ), Sleep(0.1) }

ENDIF


/*
* Display the window centered on the desktop
*/
aPos:= CenterPos( oDlg:currentSize(), AppDesktop():currentSize() )
oDlg:setPos( aPos )
oDlg:show()
SetAppFocus( oDlg )
ENDIF
RETURN
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Wie kann ich nach dem zeichnen nicht aufhören?

Beitrag von AUGE_OHR »

hi,
Eugeny Lutsenko hat geschrieben: Di, 28. Jul 2020 12:51 Hier ist der Quellcode der FullView-Prozedur (c:\exp20\Samples\Xdemo\ImgView.prg ).
es ist der Original Code von Alaska aus \Source\samples\apps\ImgView\ImgView.prg den jeder hat
Eugeny Lutsenko hat geschrieben: Wie ändere ich es so, dass je nach Wert des Parameters nach der Darstellung des Bildes ein Stopp oder kein Stopp angezeigt wird?
4 Parameter von AppEvent verwenden und per Parameter ansteuern.

Code: Alles auswählen

PROCEDURE FullView( cFile , nTimeout)
DEFAULT nTimeout TO 0

   nEvent := APPEVENT( @mp1, @mp2, @oXbp, nTimeout )
   DO CASE
      CASE nEvent == xbe_None
            EXIT
      CASE nEvent == xbeP_Keyboard .AND. mp1 == xbeK_ESC
            EXIT   
   OTHERWISE
      oXbp:HandleEvent( nEvent, mp1, mp2 )
   ENDCASE
   oDlg:destroy()
! note : when move Mouse or something else it will start Timeout from begin
gruss by OHR
Jimmy
Benutzeravatar
Eugeny Lutsenko
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 108
Registriert: Fr, 15. Mai 2020 16:16
Wohnort: Russland, der südliche Föderale Bezirk, die Stadt Krasnodar
Hat sich bedankt: 12 Mal
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: Wie kann ich nach dem zeichnen nicht aufhören?

Beitrag von Eugeny Lutsenko »

Ich habe den Code neu erstellt. Vor dem Start der erzeugungsschleife wurde das Bild gefragt, um Sie zu zeigen oder nur zu schreiben? Und wenn nicht angezeigt, dann führe ich einfach nicht die FullView () - Prozedur und alle Fälle aus. Was habe ich mir gedacht? Offensichtlich nicht über das, was es notwendig ist! Vielen Dank, dass Sie den richtigen Weg eingeschlagen haben. Es stellte sich heraus, dass die Wahrheit einfach ist.
Antworten