Advanced: Dienstag: ImageFileRequester (mit Thread-Loading)

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
ShadowTurtle
Beiträge: 114
Registriert: 11.09.2004 07:58
Wohnort: Mannheim
Kontaktdaten:

Advanced: Dienstag: ImageFileRequester (mit Thread-Loading)

Beitrag von ShadowTurtle »

Hallo.

Sonntag, 12. August 2007: Kleine Anleitung für Linux portierung
Wenn der Image Requester auch unter Linux (z.B. Purebuntu, siehe Forumsuche) funktionieren soll, dann müssen einfach nur die Fehlerauslösende Quellcodes auskommentiert werden. Da es sich hierbei aber um WinApi aufrufe handelt, können dabei auch ruhig entsprechende Struktur-Definierungen auskommentiert werden.

Ist das gemacht, dann lässt sich der Image Requester auch unter Purebasic-Linux Kompilieren. Hinweis: Threading macht unter Ubuntu anscheinend keine Probleme (mehr).


Samstag, 28. Juli 2007: Ein kleines Bugfix
In der Prozedur AdvImgReq_IsRun muss beim letzten ProcedureReturn eine 0 statt einer 1 stehen, da sonst nie der richtige Wert zurück geliefert wird. Der Quellcode im Zweiten/Dritten abschnitt ist hier bereits Korrigiert.


Heute ist Dienstag. Wer von euch hätte das gedacht? Eigentlich war eine Pause angedacht (Umzug) und außerdem wollte ich euch noch dieses Stückchen Quellcode bis nach der Pause vorenthalten (siehe Screenshot hinter der kleinen Liste). Allerdings hätte es dann 4 Wochen lang kein Advanced-Code gegeben. Also zurück zum Thema:

Was bietet dieses ding eigentlich? Ganz einfach:
1. Einfache Verwaltung von mehreren Bild-Lade/Speichern-Dialoge gleichzeitig
2. Multi-Threading (kein/e hängen/pause) beim Laden der Bilder
3. Umschalten zwischen Gallerie-Modus und den üblichen Explorer Modies
4. Aufrufen der Windows-Datei-Eigenschaften über das Kontexmenü
5. Ab-/ und Auswahl von mehreren Dateien mit Strg + Klick auf Dateinamen.
6. Unterstützung für mehrere Sprachen (mit Mini-Satz-Datenbank; siehe AdvImgReq_SetGlobalLanguage)
7. Warn- und Hinweis-Meldungen bei Falsche Handlungen des Benutzers
8. Viele Konstanten und Globalen Variablen um das Interface bzw. die Benutzeroberfläche flexibel anpassen zu können
9. usw. ...

Bild
Zum vergrößern einfach darauf klicken...


Ansonsten sollte der Quellcode eigentlich leicht Linux-tauglich zu Portieren sein. Einfach die Strg-Tastenabfrage in der Library durch eine andere ersetzen und fertig. Vielleicht muss noch bei Purebasic < 4.0 das Multi-Threading ausgebaut werden und der Inhalt der " AdvImgReq_Thread_OpenImages(...) "-Funktion in der WindowEvent-Schleife aufgerufen werden. [Anmerkung von mir: Multi-Threading wird in diesen Moment dann nicht mehr unterstützt!]

Hier sind nun die Codes von Oben nach Unten:
1. Beispiel: Einfaches aufrufen des ImageFileRequester 's
2. Beispiel: Aufrufen des ImageFileRequester über eine Struktur mit vordefinierten Variablen. Dies bietet mehr Einstellungsmöglichkeiten und man kann mehrere Requester gleichzeitig öffnen.
3. Library: AdvancedImageRequest.pb

Wegen der Überlänge ist die Library in meinen Zweiten und Vierten Posting (siehe direkt unten) aufgeteilt: :mrgreen:

Code: Alles auswählen

; AdvancedImageRequest_Sample1.pb V1.0
; by ShadowTurtle @ Dienstag, 24. Juli 2007
;XIncludeFile( "AdvancedImageRequest.pb" )

FileRequestFlags.l = #AdvImgReq_Open | #AdvImgReq_MultiSelect

; Outcommed this for an Save-Requester
; FileRequestFlags.l = #AdvImgReq_Save


UseJPEGImageDecoder() 
UsePNGImageDecoder() 
UseTIFFImageDecoder()
UseTGAImageDecoder() 

AdvImageFileRequester_BeginPosition(0, 0)
AdvImageFileRequester_BeginSize(800, 600)
;AdvImgReq_SetGlobalLanguage( #AdvImgReq_Language_English )
AdvImgReq_SetGlobalLanguage( #AdvImgReq_Language_German )
File.s = AdvImageFileRequester("Bild Öffnen", "C:\", "Gemischt (*.txt und *.jpg)|*.txt|*.jpg;JPG (*.jpg)|*.jpg;Bitmap (*.bmp)|*.bmp", 0, FileRequestFlags.l)

If AdvImgReq_GetLastActionMode() = #AdvImgReq_Action_Ok
  SelFiles.s = AdvImgReq_GetLastSelectedFiles()
  SelPath.s = AdvImgReq_GetLastSelectedPath()
  
  Debug "Selected Files as String: " + SelFiles.s
  Debug "Selected Folder as String: " + SelPath.s
  Debug "Selected Files readed from AdvImgReq_ReadSelectedFiles and AdvImgReq_NextSelectedFile:"
  
  SelectedFile.s = AdvImgReq_ReadSelectedFiles( SelFiles.s )
  While Not SelectedFile.s = ""
    Debug SelectedFile.s
    SelectedFile.s = AdvImgReq_NextSelectedFile()
  Wend
ElseIf AdvImgReq_GetLastActionMode() = #AdvImgReq_Action_Abort
  Debug "Aborted"
EndIf

MessageRequester("Hinweis", "Diese Nachricht stammt vom Beispiel: Um die Auswertung der Daten in diesen Beispiel sehen zu können, muss der Debugger aktiviert sein.")

Code: Alles auswählen

; AdvancedImageRequest_Sample2.pb V1.0
; by ShadowTurtle @ Dienstag, 24. Juli 2007
;XIncludeFile( "AdvancedImageRequest.pb" )

UseJPEGImageDecoder() 
UsePNGImageDecoder() 
UseTIFFImageDecoder()
UseTGAImageDecoder() 

AdvImageFileRequester_BeginPosition(0, 0)
AdvImageFileRequester_BeginSize(800, 600)
;AdvImgReq_SetGlobalLanguage( #AdvImgReq_Language_English )
AdvImgReq_SetGlobalLanguage( #AdvImgReq_Language_German )

*AIR_A.AdvImgReq = AllocateMemory(SizeOf(AdvImgReq))
*AIR_A\Title.s = "Öffnen"
*AIR_A\StdFile.s = ""
*AIR_A\Pattern.s = "Gemischt (*.txt und *.jpg)|*.txt|*.jpg;JPG (*.jpg)|*.jpg;Bitmap (*.bmp)|*.bmp"
*AIR_A\PatternPosition.l = 0
*AIR_A\flags.l = #AdvImgReq_Open | #AdvImgReq_MultiSelect

*AIR_B.AdvImgReq = AllocateMemory(SizeOf(AdvImgReq))
*AIR_B\Title.s = "Speichern"
*AIR_B\StdFile.s = ""
*AIR_B\Pattern.s = "Gemischt (*.txt und *.jpg)|*.txt|*.jpg;JPG (*.jpg)|*.jpg;Bitmap (*.bmp)|*.bmp"
*AIR_B\PatternPosition.l = 0
*AIR_B\flags.l = #AdvImgReq_Save

AdvImgReq_Init( *AIR_A )
AdvImgReq_Init( *AIR_B )
  
While( AdvImgReq_OpenedRequesters.l > 0 )
  If AdvImgReq_OpenedRequesters.l > 0
    Event = WaitWindowEvent(10) ; This line waits until an event is received from Windows
    WindowID = EventWindow() ; The Window where the event is generated, can be used in the gadget procedures
    GadgetID = EventGadget() ; Is it a gadget event?
    EventType = EventType() ; The event type
    MenuEvent = EventMenu() ; Menu event
    
    If AdvImgReq_IsRun(*AIR_A) = 1
      AdvImgReq_Update( *AIR_A, Event, WindowID, GadgetID, EventType, MenuEvent )
      AdvImgReq_UpdatePreviewArea( *AIR_A )
    EndIf
    
    If AdvImgReq_IsRun(*AIR_B) = 1
      AdvImgReq_Update( *AIR_B, Event, WindowID, GadgetID, EventType, MenuEvent )
      AdvImgReq_UpdatePreviewArea( *AIR_B )
    EndIf
  EndIf
  ;Debug *AIR\Thread_OpenImages_Mode
Wend
  
AdvImgReq_Close( *AIR_A )
AdvImgReq_Close( *AIR_B )

;File.s = AdvImageFileRequester("Bild Öffnen", "C:\G\", "JPG (*.jpg)|*.jpg;Bitmap (*.bmp)|*.bmp", 0, FileRequestFlags.l)

If AdvImgReq_GetLastActionMode() = #AdvImgReq_Action_Ok
  SelFiles.s = AdvImgReq_GetLastSelectedFiles()
  SelPath.s = AdvImgReq_GetLastSelectedPath()
  
  Debug "Selected Files as String: " + SelFiles.s
  Debug "Selected Folder as String: " + SelPath.s
  Debug "Selected Files readed from AdvImgReq_ReadSelectedFiles and AdvImgReq_NextSelectedFile:"
  
  SelectedFile.s = AdvImgReq_ReadSelectedFiles( SelFiles.s )
  While Not SelectedFile.s = ""
    Debug SelectedFile.s
    SelectedFile.s = AdvImgReq_NextSelectedFile()
  Wend
ElseIf AdvImgReq_GetLastActionMode() = #AdvImgReq_Action_Abort
  Debug "Aborted"
EndIf

MessageRequester("Hinweis", "Diese Nachricht stammt vom Beispiel: Um die Auswertung der Daten in diesen Beispiel sehen zu können, muss der Debugger aktiviert sein.")
Zuletzt geändert von ShadowTurtle am 12.08.2007 10:29, insgesamt 4-mal geändert.
ShadowTurtle
Beiträge: 114
Registriert: 11.09.2004 07:58
Wohnort: Mannheim
Kontaktdaten:

Beitrag von ShadowTurtle »

Code: Alles auswählen

; AdvancedImageRequest.pb V1.0 - Teil 1 des Quellcodes
; by ShadowTurtle @ Dienstag, 24. Juli 2007
; 
; Die Features:
; 1. Einfache Verwaltung von mehreren Bild-Lade/Speichern-Dialoge
;    gleichzeitig
; 2. Multi-Threading (kein/e hängen/pause) beim Laden der Bilder
; 3. Umschalten zwischen Gallerie-Modus und den üblichen Explorer
;    Modies
; 4. Aufrufen der Windows-Datei-Eigenschaften über das Kontexmenü
; 5. Ab-/ und Auswahl von mehreren Dateien mit Strg + Klick auf
;    Dateinamen.
; 6. Unterstützung für mehrere Sprachen (mit Mini-Satz-Datenbank;
;    siehe AdvImgReq_SetGlobalLanguage)
; 7. Warn- und Hinweis-Meldungen bei Falsche Handlungen des
;    Benutzers
; 8. Viele Konstanten und Globalen Variablen um das Interface bzw.
;    die Benutzeroberfläche flexibel anpassen zu können
; 9. usw. ...
;  
; Ansonsten sollte der Quellcode eigentlich leicht Linux-tauglich
; zu Portieren sein. einfach die Strg-Tastenabfrage in der Library
; durch eine andere ersetzen und fertig. Vielleicht muss noch bei
; Purebasic < 4.0 das Multi-Threading ausgebaut werden und der
; Inhalt der " AdvImgReq_Thread_OpenImages(...) "-Funktion in der
; WindowEvent-Schleife aufgerufen werden. [Anmerkung von mir:
; Multi-Threading wird in diesen Moment dann nicht mehr
; Unterstützt!] 

#AdvImgReq_Open = 2
#AdvImgReq_Save = 4
#AdvImgReq_MultiSelect = 8

#AdvImgReq_Mode_Init = 0
#AdvImgReq_Mode_Update = 1
#AdvImgReq_Mode_DoPause = 2
#AdvImgReq_Mode_Pause = 3
#AdvImgReq_Mode_ClearFiles = 4
#AdvImgReq_Mode_Close = 5
#AdvImgReq_Mode_Closed = 6

#AdvImgReq_Action_Ok = 1
#AdvImgReq_Action_Abort = 2

#AdvImgReq_DoMode_Nothing = 0
#AdvImgReq_DoMode_UpdatePreview = 1

#AdvImgReq_BoxDotSpace = 2
#AdvImgReq_BoxDotLength = 2
#AdvImgReq_MaxPattern = 35
#AdvImgReq_PatternExtensionMax = 50
#AdvImgReq_MaxPatternReg = #AdvImgReq_MaxPattern + 1
#AdvImgReq_PathStackMax = 150

#AdvImgReq_MaxWords = 11
#AdvImgReq_Words_Filename = 0
#AdvImgReq_Words_Filetype = 1
#AdvImgReq_Words_Button_Open = 2
#AdvImgReq_Words_Button_Save = 3
#AdvImgReq_Words_Button_Abort = 4
#AdvImgReq_Words_Info_FileExists = 5
#AdvImgReq_Words_Info_FileNotFound = 6
#AdvImgReq_Words_Info_WrongEnteredFiles = 7
#AdvImgReq_Words_Info_NoFileSelected = 8
#AdvImgReq_Words_Title_Warning = 9

#AdvImgReq_Words_Default_Filename = "Filename:"
#AdvImgReq_Words_Default_Filetype = "Format:"
#AdvImgReq_Words_Default_Button_Open = "&Open"
#AdvImgReq_Words_Default_Button_Save = "&Save"
#AdvImgReq_Words_Default_Button_Abort = "&Abort"
#AdvImgReq_Words_Default_Info_FileExists = "File "+Chr(34)+"%%FILE%%" + Chr(34) + " exists already. Rewrite File?"
#AdvImgReq_Words_Default_Info_FileNotFound = "File "+Chr(34)+"%%FILE%%" + Chr(34) + " not found. Ignore this file?"
#AdvImgReq_Words_Default_Info_WrongEnteredFiles = "There is a wrong filename input. Please correct this."
#AdvImgReq_Words_Default_Info_NoFileSelected = "No file or no path is selected"
#AdvImgReq_Words_Default_Title_Warning = "Warning"

#AdvImgReq_Language_English = 0
#AdvImgReq_Language_German = 1

#AdvImgReq_ToolButtons = 5

Dim AIR_PalColor(20)
Dim AdvImgReq_GlobalWords.s(#AdvImgReq_MaxWords)

Global AdvImgReq_BeginPosX, AdvImgReq_BeginPosY
Global AdvImgReq_BeginSizeX, AdvImgReq_BeginSizeY
Global AdvImgReq_PreviewSizeX, AdvImgReq_PreviewSizeY
Global AdvImgReq_CharSpace_X, AdvImgReq_CharSpace_Y
Global AdvImgReq_LastMouseOverX, AdvImgReq_LastMouseOverY
Global AdvImgReq_BeginScrollbarWidth
Global AdvImgReq_PreviewInfoHeight
Global AdvImgReq_Opened

Global AdvImgReq_FlagX
Global AdvImgReq_FlagY

Global AdvImgReq_LastActionMode.l
Global AdvImgReq_LastSelectedFiles.s
Global AdvImgReq_LastSelectedPath.s

Global AdvImgReq_ReadSelString.s
Global AdvImgReq_ReadSelStr_Pos.l
Global AdvImgReq_ReadSelStr_Len.l

Global AdvImgReq_OpenedRequesters.l

Declare AdvImgReq_Thread_OpenImages(Pntr.l)
Declare AdvImgReq_OpenImageForFile( *AIR, *RFile )
Declare.b AdvImgReq_UpdatePreviewImage( *AIR )
Declare AdvImgReq_UpdatePreviewBuffer( *AIR )
Declare AdvImgReq_SwitchView( *AIR, mode.b )
Declare.s AdvImgReq_GetSelectedFiles( *AIR )
Declare.s AdvImgReq_GetSelectedPath( *AIR )
Declare.s AdvImgReq_NextSelectedFile()
Declare.s AdvImgReq_ReadSelectedFiles( InputStr.s )

Structure AdvImgReq_Pattern
  Caption.s
  Extension.s[#AdvImgReq_PatternExtensionMax]
EndStructure

Structure AdvImgReq_File
  PreviewMode.b
  
  Filename.s
  ExistsImage.b
  ClientPosX.l
  ClientPosY.l
  ClientSizeX.l
  ClientSizeY.l
  InRow.l
  OpenedImage.b
  
  ;  Container.l
  ;  FileText.l
  ImageHandle.l
  ImageGadget.l
  
  Selected.b
  
  *NextFile.AdvImgReq_File
EndStructure

Structure AdvImgReq_Window
  Win.l
  Explorer.l
  PreviewGadget.l
  PreviewBuffer.l
  PreviewScrollbar.l
  ExplorerList.l
  
  ButtonOk.l
  ButtonAbort.l
  
  InputText_Filename.l
  Input_Filename.l
  
  ComboText_FileType.l
  Combo_FileType.l
  
  Menu.l
  MenuItem.l[20]
  
  BottomSpace.l
  ExplorerWidth.l
  StringPath.l
  ToolButton.l[10]
EndStructure

Structure AdvImgReq
  Title.s
  StdFile.s
  Pattern.s
  PatternPosition.l
  flags.l
  DoInMainUpdate.l
  mode.b
  YouCanDoFlag.b
  Selected_LastFiles.s
  WorkPath.s
  RowHeights.l[1000]
  Words.s[#AdvImgReq_MaxWords]

  ActionMode.l
  SelectedFiles.s
  SelectedPath.s
  
  ButtonWidth.l
  BottomFieldHeight.l
  InputTextWidth.l
  InputSpaceWidth.l
  
  PathStack.s[#AdvImgReq_PathStackMax]
  PathStackPosition.l
  PathStacks.l
  
  PreviewArea_Width.l
  PreviewArea_Height.l
  PreviewImage.l
  PreviewFont.l
 
  ViewMode.b
  PreviewViewMode.l
  LastExplorerListDisplayMode.l
  
  Last_Event.l
  Last_WindowID.l
  Last_GadgetID.l
  Last_EventType.l
  Last_MenuEvent.l
  
  *PatternList.AdvImgReq_Pattern[#AdvImgReq_MaxPatternReg]
  PatternInList.l
  UsePattern.l
  
  Win.AdvImgReq_Window
  Thread_OpenImages.l
  Thread_OpenImages_Mode.l
  Thread_OpenImages_AbortMode.b
  Thread_OpenImages_PauseMode.b
  Mutex_OpenImages.l
  
  UpdatePreviewArea.l
  UpdatePreviewArea_Mode.l
  UpdatePreviewArea_UpdatePrivate.b
  UpdatePreviewArea_DrawFull.b
  
  *LastSelectedFile.AdvImgReq_File
  *LastFile.AdvImgReq_File
EndStructure

Structure AdvImgReq_Long
  LongValue.l
EndStructure

Procedure AdvImgReq_Utils_GetMaxSize(sx, sy)
  AtX.f = AdvImgReq_FlagX.l
  AtY.f = AdvImgReq_FlagY.l
  Multi.f = 1.0
  While( (AtX > sx Or AtY > sy) And (AtX.f > 4 And AtY.f > 4) )
    AtX.f = AdvImgReq_FlagX.l
    AtY.f = AdvImgReq_FlagY.l
    
    AtX.f = AtX.f * Multi.f
    AtY.f = AtY.f * Multi.f
    
    Multi.f = Multi.f - 0.001
  Wend
  
  If AtX.f > sx
    AtX.f = sx
  EndIf
  
  If AtY.f > sy
    AtY.f = sy
  EndIf
  
  AdvImgReq_FlagX.l = AtX.f
  AdvImgReq_FlagY.l = AtY.f
EndProcedure

Procedure.l AdvImgReq_Utils_FindStringRegex(ScanString.s, DoFind.s, From.l)
  String.s = ScanString.s
  String.s = Mid(ScanString.s, From.l, Len(ScanString.s) - From.l + 1)
  
  Find.s = DoFind.s
  
  Result = #True
  
  LastFound = 0;1
  FirstFound = 0
  
  If DoFind.s = "*"
    ProcedureReturn 1
  EndIf
  
  Count.l = CountString(Find.s, "*")
  If ( Count.l = 0 )
    ProcedureReturn FindString(String.s, Find.s, From.l)
  Else
    Find.s = Find.s + "*"
    
    For I = 1 To Count.l
      ToFind.s = StringField(Find.s, I, "*")
      LastFound = FindString(String.s, ToFind, LastFound.l + 1)
      If ( LastFound.l = 0 )
        Result = #False
      Else
        If ( I = 1 And FirstFound = 0 )
          FirstFound = LastFound
        EndIf
      EndIf
    Next
  EndIf
  
  If ( Result = #True )
    ProcedureReturn FirstFound
  Else
    ProcedureReturn #False
  EndIf
EndProcedure

Procedure.b AdvImgReq_Utils_CheckRegexFile(Filename.s, Extension.s)
  OnlyTheFileName.s = ""
  ExtensionFromFileName.s = ""
  
  For I = 1 To Len(Filename.s)
    FilenameChar.s = Mid(Filename.s, I, 1)
    OnlyTheFileName.s = OnlyTheFileName.s + FilenameChar.s
    ExtensionFromFileName.s = ExtensionFromFileName.s + FilenameChar.s
    If FilenameChar.s = "."
      ExtensionFromFileName.s = ""
    EndIf
  Next
  
  OnlyTheFileName.s = Mid(Filename.s, 1, Len(Filename.s) - Len(ExtensionFromFileName.s) - 1)
  
  Extension_File.s = StringField(Extension.s, 1, ".")
  Extension_Ext.s = StringField(Extension.s, 2, ".")
  
  If AdvImgReq_Utils_FindStringRegex(LCase(OnlyTheFileName), LCase(Extension_File), 1) = #False
    ProcedureReturn 0
  EndIf

  If AdvImgReq_Utils_FindStringRegex(LCase(ExtensionFromFileName), LCase(Extension_Ext), 1) = #False
    ProcedureReturn 0
  EndIf
  
  ProcedureReturn 1
EndProcedure

Procedure.s AdvImgReq_Utils_GetParentPath( Entered.s )
  ManageChar.s = Mid(Entered.s, Len(Entered.s), 1)
  If ManageChar.s = "/" Or ManageChar.s = "\"
    ProcedureReturn( Entered.s )
  Else
    ParentPath.s = ""
    PathUnit.s = ""
    For I = 1 To Len( Entered.s )
      ManageChar.s = Mid(Entered.s, I, 1)
      PathUnit.s = PathUnit.s + ManageChar.s
      If ManageChar.s = "/" Or ManageChar.s = "\"
        ParentPath.s = ParentPath.s + PathUnit.s
        PathUnit.s = ""
      EndIf
    Next
  EndIf
  
  ProcedureReturn( ParentPath.s )
EndProcedure

Procedure.s AdvImgReq_Utils_GetOrgParentPath( Entered.s )
  ManageChar.s = Mid(Entered.s, Len(Entered.s), 1)
  If ManageChar.s = "/" Or ManageChar.s = "\"
    Entered.s = Mid(Entered.s, 1, Len(Entered.s) - 1)
  EndIf
  
  ParentPath.s = ""
  PathUnit.s = ""
  For I = 1 To Len( Entered.s )
    ManageChar.s = Mid(Entered.s, I, 1)
    PathUnit.s = PathUnit.s + ManageChar.s
    If ManageChar.s = "/" Or ManageChar.s = "\"
      ParentPath.s = ParentPath.s + PathUnit.s
      PathUnit.s = ""
    EndIf
  Next
  
  ProcedureReturn( ParentPath.s )
EndProcedure

Procedure.l AdvImgReq_Utils_DrawTextInRect(px.l, py.l, sx.l, txt.s)
  dopx.l = px
  dopy.l = py
  ShowTxt.s = txt.s
  
  TxtTop.l = 0
  
  PlacedBefore.b = 0
  
  RunThis.b = 1
  While( RunThis.b = 1)
    RunThis.b = 0
    If TextWidth(ShowTxt.s) > sx
      RunThis.b = 1
      
      For I = 0 To Len(ShowTxt.s)
        If TextWidth( Mid(ShowTxt.s, 0, I + 2) ) > sx
          Break
        EndIf
      Next
      
      PrintTxt.s = Mid(ShowTxt.s, 0, I)
      DrawText( dopx, dopy, PrintTxt.s )
      
      dopy = dopy + TextHeight(PrintTxt.s)
      dopx = px
      
      ShowTxt.s = Mid(ShowTxt.s, I+1, Len(ShowTxt.s))
      
      PlacedBefore.b = 1
    EndIf
  Wend
  
  If PlacedBefore.b = 0
    DrawText( dopx, dopy, ShowTxt.s )
    dopy = dopy + TextHeight(ShowTxt.s)
  Else
    PrintTxt.s = Mid(ShowTxt.s, 0, I)
    DrawText( dopx, dopy, PrintTxt.s )
    dopy = dopy + TextHeight(PrintTxt.s)
  EndIf
  
  ProcedureReturn(dopy-py)
EndProcedure

Procedure.l AdvImgReq_Utils_GetTextInRectHeight(px.l, py.l, sx.l, txt.s)
  dopx.l = px
  dopy.l = py
  ShowTxt.s = txt.s
  
  TxtTop.l = 0
  
  PlacedBefore.b = 0
  
  RunThis.b = 1
  While( RunThis.b = 1)
    RunThis.b = 0
    If TextWidth(ShowTxt.s) > sx
      RunThis.b = 1
      
      For I = 0 To Len(ShowTxt.s)
        If TextWidth( Mid(ShowTxt.s, 0, I + 2) ) > sx
          Break
        EndIf
      Next
      
      PrintTxt.s = Mid(ShowTxt.s, 0, I)
      
      dopy = dopy + TextHeight(PrintTxt.s)
      dopx = px
      
      ShowTxt.s = Mid(ShowTxt.s, I+1, Len(ShowTxt.s))
      
      PlacedBefore.b = 1
    EndIf
  Wend
  
  If PlacedBefore.b = 0
    dopy = dopy + TextHeight(ShowTxt.s)
  Else
    PrintTxt.s = Mid(ShowTxt.s, 0, I)
    dopy = dopy + TextHeight(PrintTxt.s)
  EndIf
  
  ProcedureReturn(dopy-py)
EndProcedure

Procedure.b AdvImgReq_Utils_MouseOverGadget( *AIR, gadget)
  *TAIR.AdvImgReq = *AIR
  MX.l = WindowMouseX(*TAIR\Win\Win) - GadgetX(gadget)
  MY.l = WindowMouseY(*TAIR\Win\Win) - GadgetY(gadget)
  
  If MX > -1 And MY > -1 And MX < GadgetWidth(gadget) And MY < GadgetHeight(gadget)
    AdvImgReq_LastMouseOverX = MX.l
    AdvImgReq_LastMouseOverY = MY.l
    ProcedureReturn 1
  Else
    AdvImgReq_LastMouseOverX = -1
    AdvImgReq_LastMouseOverY = -1
    ProcedureReturn 0
  EndIf
EndProcedure

Procedure AdvImgReq_Utils_DottedBox(px.l, py.l, sx.l, sy.l, docol.l)
  ;Box(px.l, py.l, sx.l, sy.l, docol.l)
  bd_dots = 0 : bd_spcs = 0 : bd_mode.b = 0
  For does = 0 To 3
    If does = 0 Or does = 2
      smallas = sx
    ElseIf does = 1 Or does = 3
      smallas = sy
    EndIf
    dol = 0
    While dol < smallas
      If bd_mode = 0
        If does = 0
          Plot( px.l + dol, py.l, docol )
        ElseIf does = 1
          Plot( px.l + sx.l, py.l + dol, docol )
        ElseIf does = 2
          Plot( px.l + dol, py.l + sy.l, docol )
        ElseIf does = 3
          Plot( px.l, py.l + dol, docol )
        EndIf
        bd_dots = bd_dots + 1
        If bd_dots = #AdvImgReq_BoxDotLength
          bd_dots = 0
          bd_mode = 1
        EndIf
      ElseIf bd_mode = 1
        bd_spcs = bd_spcs + 1
        If bd_spcs = #AdvImgReq_BoxDotSpace
          bd_spcs = 0
          bd_mode = 0
        EndIf
      EndIf
      dol = dol + 1
    Wend
  Next
EndProcedure

Procedure AdvImgReq_Utils_GetToolImage(index.l)
  Shared AIR_PalColor()
  
  AIT_PalStr.s = "0123456789qwertzuiopasdfghjklyxcvbnmQWERTZUIOPASDFGHJKLYXCVBNM"
  
  ;AIR_PalColor(0) = RGB(0, 0, 0)
  AIR_PalColor(0) = RGB(235, 233, 237)
  AIR_PalColor(1) = RGB(0, 0, 153)
  AIR_PalColor(2) = RGB(255, 255, 255)
  AIR_PalColor(3) = RGB(255, 204, 0)
  AIR_PalColor(4) = RGB(255, 255, 0)
  AIR_PalColor(5) = RGB(191, 191, 191)
  AIR_PalColor(6) = RGB(153, 204, 255)
  AIR_PalColor(7) = RGB(153, 255, 255)
  AIR_PalColor(8) = RGB(0, 102, 0)
  AIR_PalColor(9) = RGB(179, 179, 179)
  AIR_PalColor(10) = RGB(166, 166, 166)
  
  Select index.l
    Case 1
      AIR_Image.s = "0000000000000000"
      AIR_Image.s = AIR_Image.s + "0000000000000000"
      AIR_Image.s = AIR_Image.s + "0000000000100000"
      AIR_Image.s = AIR_Image.s + "0000000000110000"
      AIR_Image.s = AIR_Image.s + "0000000000161000"
      AIR_Image.s = AIR_Image.s + "1111111111126100"
      AIR_Image.s = AIR_Image.s + "1622222222227610"
      AIR_Image.s = AIR_Image.s + "1677777777777761"
      AIR_Image.s = AIR_Image.s + "1666666666666610"
      AIR_Image.s = AIR_Image.s + "1111111111166100"
      AIR_Image.s = AIR_Image.s + "0000000000161000"
      AIR_Image.s = AIR_Image.s + "0000000000110000"
      AIR_Image.s = AIR_Image.s + "0000000000100000"
      AIR_Image.s = AIR_Image.s + "0000000000000000"
      AIR_Image.s = AIR_Image.s + "0000000000000000"
      AIR_Image.s = AIR_Image.s + "0000000000000000"
    Case 0
      AIR_Image.s = "0000000000000000"
      AIR_Image.s = AIR_Image.s + "0000000000000000"
      AIR_Image.s = AIR_Image.s + "0000010000000000"
      AIR_Image.s = AIR_Image.s + "0000110000000000"
      AIR_Image.s = AIR_Image.s + "0001610000000000"
      AIR_Image.s = AIR_Image.s + "0016211111111111"
      AIR_Image.s = AIR_Image.s + "0167222222222261"
      AIR_Image.s = AIR_Image.s + "1677777777777761"
      AIR_Image.s = AIR_Image.s + "0166666666666661"
      AIR_Image.s = AIR_Image.s + "0016611111111111"
      AIR_Image.s = AIR_Image.s + "0001610000000000"
      AIR_Image.s = AIR_Image.s + "0000110000000000"
      AIR_Image.s = AIR_Image.s + "0000010000000000"
      AIR_Image.s = AIR_Image.s + "0000000000000000"
      AIR_Image.s = AIR_Image.s + "0000000000000000"
      AIR_Image.s = AIR_Image.s + "0000000000000000"
    Case 2
      AIR_Image.s = "0000000000000000"
      AIR_Image.s = AIR_Image.s + "0011110000000000"
      AIR_Image.s = AIR_Image.s + "0122221500000000"
      AIR_Image.s = AIR_Image.s + "1244441111111110"
      AIR_Image.s = AIR_Image.s + "1244442222222221"
      AIR_Image.s = AIR_Image.s + "1244144444444431"
      AIR_Image.s = AIR_Image.s + "1241114444444431"
      AIR_Image.s = AIR_Image.s + "1211111444444431"
      AIR_Image.s = AIR_Image.s + "1244144444444431"
      AIR_Image.s = AIR_Image.s + "1244144444444431"
      AIR_Image.s = AIR_Image.s + "1244144444444431"
      AIR_Image.s = AIR_Image.s + "1244411144444431"
      AIR_Image.s = AIR_Image.s + "1244444444444431"
      AIR_Image.s = AIR_Image.s + "1333333333333331"
      AIR_Image.s = AIR_Image.s + "1111111111111111"
      AIR_Image.s = AIR_Image.s + "0000000000000000"
    Case 3
      AIR_Image.s = "0111111111110000"
      AIR_Image.s = AIR_Image.s + "0122222222211000"
      AIR_Image.s = AIR_Image.s + "0122222222212100"
      AIR_Image.s = AIR_Image.s + "0122222282211110"
      AIR_Image.s = AIR_Image.s + "0122222288222210"
      AIR_Image.s = AIR_Image.s + "0122228888822210"
      AIR_Image.s = AIR_Image.s + "0122282288222210"
      AIR_Image.s = AIR_Image.s + "0122282282222210"
      AIR_Image.s = AIR_Image.s + "0122222822822210"
      AIR_Image.s = AIR_Image.s + "0122228822822210"
      AIR_Image.s = AIR_Image.s + "0122288888222210"
      AIR_Image.s = AIR_Image.s + "0122228822222210"
      AIR_Image.s = AIR_Image.s + "0122222822222210"
      AIR_Image.s = AIR_Image.s + "0122222222222210"
      AIR_Image.s = AIR_Image.s + "0111111111111110"
      AIR_Image.s = AIR_Image.s + "0000000000000000"
    Case 4
      AIR_Image.s = "0000000000000000"
      AIR_Image.s = AIR_Image.s + "1111000000111111"
      AIR_Image.s = AIR_Image.s + "1991q000000qqqqq"
      AIR_Image.s = AIR_Image.s + "1971q01000111110"
      AIR_Image.s = AIR_Image.s + "1111q11q000qqqqq"
      AIR_Image.s = AIR_Image.s + "0qqq111110111111"
      AIR_Image.s = AIR_Image.s + "1111011qqq0qqqqq"
      AIR_Image.s = AIR_Image.s + "1991q01q00111110"
      AIR_Image.s = AIR_Image.s + "1971q00q000qqqqq"
      AIR_Image.s = AIR_Image.s + "1111q05100111111"
      AIR_Image.s = AIR_Image.s + "0qqqq051100qqqqq"
      AIR_Image.s = AIR_Image.s + "1111011111111110"
      AIR_Image.s = AIR_Image.s + "1991q0q11q0qqqqq"
      AIR_Image.s = AIR_Image.s + "1971q051q0111111"
      AIR_Image.s = AIR_Image.s + "1111q00q000qqqqq"
      AIR_Image.s = AIR_Image.s + "0000000000000000"
  EndSelect
  
  AIR_ToolImage = CreateImage(#PB_Any, 16, 16, #PB_Image_DisplayFormat)
  StartDrawing(ImageOutput(AIR_ToolImage))
  Box(0, 0, 16, 16, RGB(255, 255, 255))
  For I = 1 To Len(AIR_Image.s)
    For V = 1 To Len(AIT_PalStr.s)
      If Mid(AIT_PalStr.s, V, 1) = Mid(AIR_Image.s, I, 1)
        Plot(dx, dy, AIR_PalColor(V-1))
        dx = dx + 1
        If dx > 15
          dx = 0
          dy = dy + 1
        EndIf
      EndIf
    Next
  Next
  StopDrawing()
  
  ProcedureReturn(AIR_ToolImage)
EndProcedure

Procedure AdvImgReq_SetWordGlobal( IntoWord.l, WordValue.s )
  Shared AdvImgReq_GlobalWords()
  AdvImgReq_GlobalWords(IntoWord) = WordValue
EndProcedure

Procedure AdvImgReq_SetWord( *AIR, IntoWord.l, WordValue.s )
  *TAIR.AdvImgReq = *AIR
  *TAIR\Words[IntoWord] = WordValue
EndProcedure

Procedure AdvImgReq_SetGlobalLanguage( Language.l )
  If Language.l = #AdvImgReq_Language_English
    AdvImgReq_SetWordGlobal( #AdvImgReq_Words_Filename, "Filename:" )
    AdvImgReq_SetWordGlobal( #AdvImgReq_Words_Filetype, "Format:" )
    AdvImgReq_SetWordGlobal( #AdvImgReq_Words_Button_Open, "&Open" )
    AdvImgReq_SetWordGlobal( #AdvImgReq_Words_Button_Save, "&Save" )
    AdvImgReq_SetWordGlobal( #AdvImgReq_Words_Button_Abort, "&Abort" )
    AdvImgReq_SetWordGlobal( #AdvImgReq_Words_Info_FileExists, "File "+Chr(34)+"%%FILE%%" + Chr(34) + " exists already. Rewrite File?" )
    AdvImgReq_SetWordGlobal( #AdvImgReq_Words_Info_FileNotFound, "File "+Chr(34)+"%%FILE%%" + Chr(34) + " not found. Ignore this file?" )
    AdvImgReq_SetWordGlobal( #AdvImgReq_Words_Info_WrongEnteredFiles, "There is a wrong filename input. Please correct this." )
    AdvImgReq_SetWordGlobal( #AdvImgReq_Words_Info_NoFileSelected, "No file or no path is selected" )
    AdvImgReq_SetWordGlobal( #AdvImgReq_Words_Title_Warning, "Warning" )
  EndIf
  
  If Language.l = #AdvImgReq_Language_German
    AdvImgReq_SetWordGlobal( #AdvImgReq_Words_Filename, "Dateiname:" )
    AdvImgReq_SetWordGlobal( #AdvImgReq_Words_Filetype, "Dateityp:" )
    AdvImgReq_SetWordGlobal( #AdvImgReq_Words_Button_Open, "Öf&fnen" )
    AdvImgReq_SetWordGlobal( #AdvImgReq_Words_Button_Save, "&Speichern" )
    AdvImgReq_SetWordGlobal( #AdvImgReq_Words_Button_Abort, "&Abbrechen" )
    AdvImgReq_SetWordGlobal( #AdvImgReq_Words_Info_FileExists, "Datei " + Chr(34) + "%%FILE%%" + Chr(34) + " existiert bereits. Wollen Sie diese Datei überschreiben?" )
    AdvImgReq_SetWordGlobal( #AdvImgReq_Words_Info_FileNotFound, "Die Datei " + Chr(34) + "%%FILE%%" + Chr(34) + " wurde nicht gefunden." )
    ;AdvImgReq_SetWordGlobal( #AdvImgReq_Words_Info_WrongEnteredFiles, "There is a wrong filename input. Please correct this." )
    AdvImgReq_SetWordGlobal( #AdvImgReq_Words_Info_NoFileSelected, "Es ist keine Datei oder kein Pfad ausgewählt" )
    AdvImgReq_SetWordGlobal( #AdvImgReq_Words_Title_Warning, "Warnung" )
  EndIf
EndProcedure

Procedure AdvImgReq_UpdatePreviewArea( *AIR )
  *TAIR.AdvImgReq = *AIR
  
  If *TAIR\UpdatePreviewArea_Mode = #AdvImgReq_Mode_Update
    *TAIR\UpdatePreviewArea_Mode = #AdvImgReq_Mode_Pause
    If *TAIR\UpdatePreviewArea_UpdatePrivate = 0
      *TAIR\UpdatePreviewArea_UpdatePrivate = 1
      If AdvImgReq_UpdatePreviewImage( *AIR ) = 1
        AdvImgReq_UpdatePreviewBuffer( *AIR )
      EndIf
      *TAIR\UpdatePreviewArea_UpdatePrivate = 0
    EndIf
  ElseIf *TAIR\UpdatePreviewArea_Mode = #AdvImgReq_Mode_Pause
  ElseIf *TAIR\UpdatePreviewArea_Mode = #AdvImgReq_Mode_Close
  EndIf
EndProcedure

Procedure AdvImgReq_Thread_OpenImages(Pntr)
  *AIR = Pntr
  *TAIR.AdvImgReq = *AIR
  
  ;While Not *TAIR\Thread_OpenImages_Mode = #AdvImgReq_Mode_Close ;*TAIR\Thread_OpenImages_Mode = #AdvImgReq_Mode_Update
  While Not *TAIR\mode = #AdvImgReq_Mode_Close ;*TAIR\Thread_OpenImages_Mode = #AdvImgReq_Mode_Update
    Delay(10)
    
    ;Debug "PM:" + Str(*TAIR\Thread_OpenImages_PauseMode)
    
    If *TAIR\Thread_OpenImages_PauseMode = 0
      LockMutex(*TAIR\Mutex_OpenImages)
      ;Debug "BeginMain"
      *ManageFile = *TAIR\LastFile
      While *ManageFile > 0 And *TAIR\Thread_OpenImages_PauseMode = 0
        Delay(10)
        
        *File.AdvImgReq_File = *ManageFile
        *DoNextFile = *File\NextFile
        
        If *File\OpenedImage = 0
          AdvImgReq_OpenImageForFile( *AIR, *File )
          *TAIR\UpdatePreviewArea_Mode = #AdvImgReq_Mode_Update
          ;While *TAIR\UpdatePreviewArea_UpdatePrivate = 0
          ;  Delay(10)
          ;Wend
          ;While *TAIR\UpdatePreviewArea_UpdatePrivate = 1
          ;  Delay(10)
          ;Wend
          
          ;          If AdvImgReq_UpdatePreviewImage( *AIR ) = 1
          ;            AdvImgReq_UpdatePreviewBuffer( *AIR )
          ;          EndIf
        EndIf
        
        *ManageFile = *DoNextFile
      Wend
      UnlockMutex(*TAIR\Mutex_OpenImages)
      ;Debug "EndMain"
      
      ;      If *TAIR\Thread_OpenImages_PauseMode = 1
      ;        *TAIR\Thread_OpenImages_IsPaused = 1
      ;      EndIf
      
      ;      *TAIR\Thread_OpenImages_PauseMode = 2
    EndIf
    
    If *TAIR\Thread_OpenImages_PauseMode = 1
      *TAIR\Thread_OpenImages_PauseMode = 2
    EndIf
    
    If *TAIR\Thread_OpenImages_PauseMode = 2
      *TAIR\Thread_OpenImages_PauseMode = 3
    EndIf
  Wend
  
  *TAIR\Thread_OpenImages_Mode = #AdvImgReq_Mode_Closed
  
  ;  If SendClose.b = 0
  ;    While *TAIR\DoInMainUpdate = #AdvImgReq_DoMode_UpdatePreview
  ;      Delay(10)
  ;    Wend
  ;    If AdvImgReq_UpdatePreviewImage( *AIR ) = 1
  ;      AdvImgReq_UpdatePreviewBuffer( *AIR )
  ;    EndIf
  ;  EndIf
  
  ;  *TAIR\Thread_OpenImages_Mode = #AdvImgReq_Mode_Close
  ;  If SendClose.b = 1
  ;    *TAIR\mode = #AdvImgReq_Mode_Closed
  ;  EndIf
  ;  *TAIR\Thread_OpenImages_Mode = #AdvImgReq_Mode_Closed
  ;  Debug "jhg"
EndProcedure

Procedure AdvImgReq_OpenImages_Begin( *AIR )
  *TAIR.AdvImgReq = *AIR
  *TAIR\Thread_OpenImages_Mode = #AdvImgReq_Mode_Init
  
  *TAIR\Mutex_OpenImages.l = CreateMutex()
  
  Pntr = *AIR
  *TAIR\Thread_OpenImages = CreateThread( @AdvImgReq_Thread_OpenImages(), Pntr )
  *TAIR\Thread_OpenImages_AbortMode = 0
  *TAIR\Thread_OpenImages_Mode = #AdvImgReq_Mode_Update
EndProcedure

Procedure AdvImgReq_OpenImages_Pause( *AIR )
  *TAIR.AdvImgReq = *AIR
  If *TAIR\Thread_OpenImages_Mode = #AdvImgReq_Mode_Init
    ProcedureReturn
  EndIf
  
  *TAIR\Thread_OpenImages_PauseMode = 1
  ;While *TAIR\Thread_OpenImages_IsPaused = 0
  While *TAIR\Thread_OpenImages_PauseMode = 1 Or *TAIR\Thread_OpenImages_PauseMode = 2
    Delay(100)
  Wend
  ;  If *TAIR\Thread_OpenImages_PauseMode = 1
  ;    While Not *TAIR\Thread_OpenImages_PauseMode = 2
  ;      Delay(100)
  ;    Wend
  ;  EndIf
EndProcedure

Procedure AdvImgReq_OpenImages_Continue( *AIR )
  *TAIR.AdvImgReq = *AIR
  If *TAIR\Thread_OpenImages_Mode = #AdvImgReq_Mode_Init
    ProcedureReturn
  EndIf
  
  *TAIR\Thread_OpenImages_PauseMode = 0
  
  ;  *TAIR\Thread_OpenImages_Mode = #AdvImgReq_Mode_Update
EndProcedure

Procedure AdvImgReq_UpdateFileInput( *AIR )
  *TAIR.AdvImgReq = *AIR
  
  InputString.s = ""
  Added.l = 0
  
  *ManageFile = *TAIR\LastFile
  While Not *ManageFile = 0
    *File.AdvImgReq_File = *ManageFile
    If *File\Selected = 1
      Filename.s = *File\Filename
      OnlyFilename.s = StringField( Filename.s, CountString(Filename.s, "\")+1, "\")
      If Added.l = 0
        InputString.s = OnlyFilename.s
      ElseIf Added.l = 1
        InputString.s = Chr(34) + InputString.s + Chr(34) + " "
        InputString.s = InputString.s + Chr(34) + OnlyFilename.s + Chr(34) + " "
      ElseIf Added.l > 1
        InputString.s = InputString.s + Chr(34) + OnlyFilename.s + Chr(34) + " "
      EndIf
      Added.l = Added.l + 1
    EndIf
    ;*File\Selected = SelMode
    
    *ManageFile = *File\NextFile
  Wend
  
  If Added.l > 1
    InputString.s = Mid(InputString.s, 0, Len(InputString.s) - 1)
  EndIf
  SetGadgetText(*TAIR\Win\Input_Filename, InputString.s )
EndProcedure

Procedure AdvImgReq_ClearFiles( *AIR )
  *TAIR.AdvImgReq = *AIR
  
  ;  OpenGadgetList(*TAIR\Win\PreviewArea)
  *ManageFile = *TAIR\LastFile
  While Not *ManageFile = 0
    *File.AdvImgReq_File = *ManageFile
    *DoNextFile = *File\NextFile
    
    ;    FreeGadget( *File\FileText )
    ;    If *File\ExistsImage = 1
    ;      FreeGadget( *File\ImageGadget )
    ;    EndIf
    ;    FreeGadget( *File\Container )
    ;    If *File\ExistsImage = 1
    ;      FreeImage( *File\ImageHandle.l )
    ;    EndIf
    
    FreeMemory(*File)
    *ManageFile = *DoNextFile
  Wend
  ;  CloseGadgetList()
  
  *TAIR\LastFile = 0
EndProcedure
Zuletzt geändert von ShadowTurtle am 24.07.2007 21:26, insgesamt 2-mal geändert.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Beitrag von RSBasic »

Bitte Code-Tags setzen
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
ShadowTurtle
Beiträge: 114
Registriert: 11.09.2004 07:58
Wohnort: Mannheim
Kontaktdaten:

Beitrag von ShadowTurtle »

Der Code wurde abgeschnitten. Deswegen hier nun die dritte Fortsetzung:

Code: Alles auswählen

Procedure AdvImgReq_SetFont( *AIR, FntName.s, FntHeight.l, FntFlags.l = 0 )
  *TAIR.AdvImgReq = *AIR
  If *TAIR\PreviewFont.l > 0
    FreeFont(*TAIR\PreviewFont.l)
  EndIf
  *TAIR\PreviewFont.l = LoadFont(#PB_Any, FntName.s, FntHeight.l, FntFlags.l)
EndProcedure

Procedure AdvImgReq_SetPreviewViewMode( *AIR, I )
  *TAIR.AdvImgReq = *AIR
  If I = 1
    If *TAIR\ViewMode = 1
      AdvImgReq_SwitchView( *TAIR, 0 )
    EndIf
  Else
    If *TAIR\ViewMode = 0
      AdvImgReq_SwitchView( *TAIR, 1 )
    EndIf
    If I = 2
      ChangeListIconGadgetDisplay( *TAIR\Win\ExplorerList, #PB_ListIcon_LargeIcon )
    EndIf
    If I = 3
      ChangeListIconGadgetDisplay( *TAIR\Win\ExplorerList, #PB_ListIcon_SmallIcon )
    EndIf
    If I = 4
      ChangeListIconGadgetDisplay( *TAIR\Win\ExplorerList, #PB_ListIcon_List )
    EndIf
    If I = 5
      ChangeListIconGadgetDisplay( *TAIR\Win\ExplorerList, #PB_ListIcon_Report )
    EndIf
    *TAIR\LastExplorerListDisplayMode = I
  EndIf
  For J = 1 To 5
    If J = I
      SetMenuItemState( *TAIR\Win\Menu, *TAIR\Win\Menu + J, 1 )
    Else
      SetMenuItemState( *TAIR\Win\Menu, *TAIR\Win\Menu + J, 0 )
    EndIf
  Next
EndProcedure

Procedure AdvImgReq_OpenImageForFile( *AIR, *RFile )
  *TAIR.AdvImgReq = *AIR
  *ReqFile.AdvImgReq_File = *RFile
  
  FileExtension.s = LCase(Mid(*ReqFile\Filename, Len(*ReqFile\Filename)-3,4))
  If FileExtension.s = ".bmp" Or FileExtension.s = ".ico" Or FileExtension.s = ".jpg" Or FileExtension.s = ".jpeg" Or FileExtension.s = ".tga" Or FileExtension.s = ".pcx" Or FileExtension.s = ".gif" Or FileExtension.s = ".png"
    MakePreview.b = 1
  Else
    MakePreview.b = 0
  EndIf
  
  If MakePreview.b = 1
    FileHandle = OpenFile(#PB_Any, *ReqFile\Filename )
    MakePreview.b = 0
    If IsFile(FileHandle)
      CloseFile(FileHandle)
      MakePreview.b = 1
    Else
    EndIf
  EndIf
  
  If MakePreview.b = 1
    *ReqFile\ImageHandle.l = LoadImage( #PB_Any, *ReqFile\Filename, #PB_Image_DisplayFormat )
    If *ReqFile\ImageHandle = 0
      *ReqFile\ExistsImage = 0
      MakePreview.b = 0
    Else
      If ImageID(*ReqFile\ImageHandle.l) = 0
        *ReqFile\ExistsImage = 0
        MakePreview.b = 0
      EndIf
    EndIf
    
    If MakePreview.b = 1
      TestScales.b = 2
      While TestScales.b > 0
        AdvImgReq_FlagX = ImageWidth(*ReqFile\ImageHandle.l)
        AdvImgReq_FlagY = ImageHeight(*ReqFile\ImageHandle.l)
        MaxHeight.l = AdvImgReq_PreviewSizeY - AdvImgReq_PreviewInfoHeight - 4
        AdvImgReq_Utils_GetMaxSize(AdvImgReq_PreviewSizeX - 4, AdvImgReq_PreviewSizeY - 4)
        sx.l = Int(AdvImgReq_FlagX)
        sy.l = Int(AdvImgReq_FlagY)
        If TestScales.b = 2
          ResizeImage( *ReqFile\ImageHandle.l, sx.l, sy.l, #PB_Image_Smooth )
        ElseIf TestScales.b = 1
          ResizeImage( *ReqFile\ImageHandle.l, sx.l, sy.l, #PB_Image_Raw )
        EndIf
        ;*ReqFile\ImageGadget = ImageGadget( #PB_Any, (AdvImgReq_PreviewSizeX-4)/2-sx.l/2, MaxHeight.l/2-sy.l/2, sx.l, sy.l, ImageID(*ReqFile\ImageHandle), #PB_Image_Border )
        If ImageID(*ReqFile\ImageHandle.l) = 0
          *ReqFile\ExistsImage = 0
        Else
          *ReqFile\ExistsImage = 1
          TestScales.b = 0
        EndIf
        
        TestScales.b = TestScales.b - 1
      Wend
    EndIf
  EndIf
  
  *ReqFile\OpenedImage = 1
EndProcedure

Procedure AdvImgReq_AddFile( *AIR, Filename.s )
  *TAIR.AdvImgReq = *AIR
  
  ;  OpenGadgetList( *TAIR\Win\PreviewArea )
  
  ;ContainerStyle.l = #PB_Container_Flat
  ContainerStyle.l = 0
  OnlyFilename.s = StringField( Filename.s, CountString(Filename.s, "\")+1, "\")
  
  *NewFile.AdvImgReq_File = AllocateMemory(SizeOf(AdvImgReq_File))
  
  *NewFile\PreviewMode = #AdvImgReq_Mode_Init
  *NewFile\ExistsImage = 0
  *NewFile\Selected = 0
  *NewFile\OpenedImage = 0
  
  *NewFile\Filename = Filename
  ;AdvImgReq_OpenImageForFile( *TAIR, *NewFile )
  
  ;  *NewFile\Container = ContainerGadget(#PB_Any, 0, 0, AdvImgReq_PreviewSizeX, AdvImgReq_PreviewSizeY, ContainerStyle.l)
  ;  *NewFile\FileText = TextGadget(#PB_Any, 0, AdvImgReq_PreviewSizeY - AdvImgReq_PreviewInfoHeight, AdvImgReq_PreviewSizeX, AdvImgReq_PreviewInfoHeight, OnlyFilename.s, #PB_Text_Center | #PB_Text_Border)
  ;  SetGadgetColor( *NewFile\FileText, #PB_Gadget_BackColor, RGB(255, 255, 255) )
  ;  SetGadgetColor( *NewFile\FileText, #PB_Gadget_FrontColor, RGB(0, 0, 0) )
  
  *NewFile\NextFile = *TAIR\LastFile
  *TAIR\LastFile = *NewFile
EndProcedure

Procedure AdvImgReq_GetFileFromPosition( *AIR, MX.l, MY.l )
  *TAIR.AdvImgReq = *AIR
  *ManageFile = *TAIR\LastFile
  While Not *ManageFile = 0
    *File.AdvImgReq_File = *ManageFile
    If MX.l > *File\ClientPosX And MX.l < *File\ClientPosX + *File\ClientSizeX
      If MY.l > *File\ClientPosY And MY.l < *File\ClientPosY + *File\ClientSizeY
        ProcedureReturn(*File)
      EndIf
    EndIf
    
    *ManageFile = *File\NextFile
  Wend
  
  ProcedureReturn 0
EndProcedure

Procedure AdvImgReq_FileSelectReverse( *AIR )
  *TAIR.AdvImgReq = *AIR
  *ManageFile = *TAIR\LastFile
  While Not *ManageFile = 0
    *File.AdvImgReq_File = *ManageFile
    If *File\Selected = 0
      *File\Selected = 1
      *TAIR\LastSelectedFile = *File
    ElseIf *File\Selected = 1
      *File\Selected = 0
    EndIf
    
    *ManageFile = *File\NextFile
  Wend
  
  ItemCount.l = CountGadgetItems(*TAIR\Win\ExplorerList)
  For I = 0 To ItemCount.l
    ItmGlbFile.s = *TAIR\WorkPath + GetGadgetItemText(*TAIR\Win\ExplorerList, I, 0)
    ItmState.l = GetGadgetItemState(*TAIR\Win\ExplorerList, I)
    ItmSelected.b = 0
    If ItmState.l & #PB_Explorer_Selected
      ItmSelected.b = 1
      ;AdvImgReq_SelectFileByName( *TAIR, *TAIR\WorkPath + GetGadgetItemText(*TAIR\Win\ExplorerList, I, 0) )
    EndIf
    
    If ItmSelected = 0
      DoState.l = #LVIS_SELECTED
    ElseIf ItmSelected = 1
      DoState.l = 0
    EndIf
    
    ExItem.LVITEM
    ExItem\mask = #LVIF_STATE
    ExItem\stateMask = #LVIS_SELECTED
    ExItem\state = DoState
    SendMessage_(GadgetID(*TAIR\Win\ExplorerList), #LVM_SETITEMSTATE, I, @ExItem)
    SetActiveGadget(*TAIR\Win\ExplorerList)
  Next
  
  AdvImgReq_UpdateFileInput( *TAIR )
EndProcedure

Procedure AdvImgReq_SelectAllFiles( *AIR, SelMode.b )
  *TAIR.AdvImgReq = *AIR
  *ManageFile = *TAIR\LastFile
  While Not *ManageFile = 0
    *File.AdvImgReq_File = *ManageFile
    *File\Selected = SelMode
    
    *ManageFile = *File\NextFile
  Wend
  
  If SelMode = 0
    DoState.l = 0
  ElseIf SelMode = 1
    DoState.l = #LVIS_SELECTED
  EndIf
  
  ExItem.LVITEM
  ExItem\mask = #LVIF_STATE
  ExItem\stateMask = #LVIS_SELECTED
  ExItem\state = DoState.l
  SendMessage_(GadgetID(*TAIR\Win\ExplorerList), #LVM_SETITEMSTATE, -1, @ExItem)
  SetActiveGadget(*TAIR\Win\ExplorerList)
  
  AdvImgReq_UpdateFileInput( *TAIR )
EndProcedure


Procedure AdvImgReq_SelectFile( *AIR, *AIR_File, SelStd.b = 1 )
  *TAIR.AdvImgReq = *AIR
  
  *File.AdvImgReq_File = *AIR_File
  If SelStd.b = 2
    If *File\Selected = 1
      SelStd.b = 0
    Else
      SelStd.b = 1
    EndIf
  EndIf
  *File\Selected = SelStd.b
   
  *TAIR\LastSelectedFile = *File
  
  ;Debug GetGadgetText(*TAIR\Win\ExplorerList)
  If *TAIR\ViewMode = 0
    ItemCount.l = CountGadgetItems(*TAIR\Win\ExplorerList)
    For I = 0 To ItemCount.l
      ItmGlbFile.s = *TAIR\WorkPath + GetGadgetItemText(*TAIR\Win\ExplorerList, I, 0)
      ItmState.l = GetGadgetItemState(*TAIR\Win\ExplorerList, I)
      ItmSelected.b = 0
      If ItmState.l & #PB_Explorer_Selected
        ItmSelected.b = 1
        ;AdvImgReq_SelectFileByName( *TAIR, *TAIR\WorkPath + GetGadgetItemText(*TAIR\Win\ExplorerList, I, 0) )
      EndIf
      
      If ItmSelected.b = 1
        ;Debug ItmGlbFile.s
      EndIf
      
      *ManageFile = *TAIR\LastFile
      While Not *ManageFile = 0
        *File.AdvImgReq_File = *ManageFile
        
        If *File\Filename = ItmGlbFile.s
          If *File\Selected = 1
            ExItem.LVITEM
            ExItem\mask = #LVIF_STATE
            ExItem\stateMask = #LVIS_SELECTED
            ExItem\state = #LVIS_SELECTED
            SendMessage_(GadgetID(*TAIR\Win\ExplorerList), #LVM_SETITEMSTATE, I, @ExItem)
            SetActiveGadget(*TAIR\Win\ExplorerList)
            ;          Debug *File\Filename + "=>" + ItmGlbFile.s+";;"+Str(ItmSelected.b)
          ElseIf *File\Selected = 0
            ExItem.LVITEM
            ExItem\mask = #LVIF_STATE
            ExItem\stateMask = #LVIS_SELECTED
            ExItem\state = 0
            SendMessage_(GadgetID(*TAIR\Win\ExplorerList), #LVM_SETITEMSTATE, I, @ExItem)
            SetActiveGadget(*TAIR\Win\ExplorerList)
          EndIf
        EndIf
        
        *ManageFile = *File\NextFile
      Wend
    Next
  EndIf
  
  AdvImgReq_UpdateFileInput( *TAIR )
EndProcedure

Procedure AdvImgReq_SelectFileByName( *AIR, Filen.s, SelStd.b = 1 )
  *TAIR.AdvImgReq = *AIR
  *ManageFile = *TAIR\LastFile
  While Not *ManageFile = 0
    *File.AdvImgReq_File = *ManageFile
    If *File\Filename = Filen.s
      AdvImgReq_SelectFile( *AIR, *File, SelStd.b )
    EndIf
    
    *ManageFile = *File\NextFile
  Wend
EndProcedure
;AdvImgReq_SelectFileByName( *TAIR, GetGadgetItemText(*TAIR\Win\ExplorerList, I, 0) )

Procedure AdvImgReq_UpdateFilePositions( *AIR )
  ProcedureReturn
  
  *TAIR.AdvImgReq = *AIR
  
  PosX.l = 0
  PosY.l = 0
  MaxHeight.l = 0
  
  *ManageFile = *TAIR\LastFile
  While Not *ManageFile = 0
    *File.AdvImgReq_File = *ManageFile
    
    ;ResizeGadget( *File\Container, PosX, PosY, #PB_Ignore, #PB_Ignore )
    PosX = PosX + AdvImgReq_PreviewSizeX
    If PosX + AdvImgReq_PreviewSizeX > 0;GetGadgetAttribute( *TAIR\Win\PreviewArea, #PB_ScrollArea_InnerWidth)
      PosX = 0
      PosY = PosY + AdvImgReq_PreviewSizeY
      MaxHeight = PosY + AdvImgReq_PreviewSizeY
    EndIf
    
    *ManageFile = *File\NextFile
  Wend
  
  ;  SetGadgetAttribute( *TAIR\Win\PreviewArea, #PB_ScrollArea_InnerHeight, MaxHeight )
EndProcedure

Procedure AdvImgReq_FilterExplorerGadget( *AIR, gadget.l )
  *TAIR.AdvImgReq = *AIR
  
  WorkPos = 0
  ItmCnt.l = CountGadgetItems(gadget.l)
  For u = 0 To ItmCnt.l
    DoRemove.b = 1
    *Pattern.AdvImgReq_Pattern = *TAIR\PatternList[*TAIR\UsePattern]
    For I = 0 To #AdvImgReq_PatternExtensionMax - 1
      If Not *Pattern\Extension[I] = ""
        If AdvImgReq_Utils_CheckRegexFile( GetGadgetItemText(gadget.l, WorkPos, 0), *Pattern\Extension[I]) = 1
          DoRemove.b = 0
        EndIf
      EndIf
    Next
    
    If DoRemove.b = 1
      RemoveGadgetItem(gadget.l, WorkPos)
      WorkPos = WorkPos - 1
    EndIf
    WorkPos = WorkPos + 1
  Next
EndProcedure

Procedure AdvImgReq_OpenFileProperities( *AIR )
  *TAIR.AdvImgReq = *AIR
  *ManageFile = *TAIR\LastFile
  While Not *ManageFile = 0
    *File.AdvImgReq_File = *ManageFile
    *DoNextFile = *File\NextFile
    
    If *File\Selected = 1
      If *TAIR\LastSelectedFile = *File
        verb$ = "properties"
        
        SEI.SHELLEXECUTEINFO
        SEI\cbSize = SizeOf(SHELLEXECUTEINFO)
        SEI\fMask = #SEE_MASK_NOCLOSEPROCESS | #SEE_MASK_INVOKEIDLIST | #SEE_MASK_FLAG_NO_UI
        SEI\lpVerb = @verb$
        SEI\lpDirectory = 0
        SEI\nShow = 0
        SEI\hInstApp = 0
        SEI\lpIDList = 0
        SEI\lpParameters = 0
        
        UseFile$ = *File\Filename
        SEI\lpFile = @UseFile$
        ShellExecuteEx_(@SEI)
      EndIf
    EndIf
    
    *ManageFile = *DoNextFile
  Wend 
EndProcedure

Procedure AdvImgReq_SetPath( *AIR, Path.s, mode.b, addtostack.l = #True )
  AdvImgReq_OpenImages_Pause( *AIR )
  
  *TAIR.AdvImgReq = *AIR
  
  GoPath.s = Path.s
  
  *TAIR\WorkPath = GoPath.s
  If Not mode.b = 0
    SetGadgetText( *TAIR\Win\Explorer, GoPath.s )
  EndIf
  If Not mode.b = 1
    SetGadgetText( *TAIR\Win\StringPath, GoPath.s )
  EndIf
  
  ;If *TAIR\ViewMode = 1
  SetGadgetText( *TAIR\Win\ExplorerList, GoPath.s )
  ;EndIf
  
  AdvImgReq_ClearFiles( *TAIR )
  ;If *TAIR\ViewMode = 0
  If Not GoPath.s = ""
    ExDir = ExamineDirectory( #PB_Any, GoPath.s, "*.*" )
    If ExDir
      While NextDirectoryEntry(ExDir)
        If DirectoryEntryType(ExDir) = #PB_DirectoryEntry_File
;          For I = 0 To *TAIR\PatternInList - 1
;            *Pattern.AdvImgReq_Pattern = *TAIR\PatternList[I]
;          Next
          EntryName.s = DirectoryEntryName(ExDir)
          
          DoAdd.b = 0
          *Pattern.AdvImgReq_Pattern = *TAIR\PatternList[*TAIR\UsePattern]
          For I = 0 To #AdvImgReq_PatternExtensionMax - 1
            If Not *Pattern\Extension[I] = ""
              If AdvImgReq_Utils_CheckRegexFile(EntryName, *Pattern\Extension[I]) = 1
                DoAdd.b = 1
              EndIf
            EndIf
          Next
          ;Debug *Pattern\Caption
          
          If DoAdd.b = 1
            AdvImgReq_AddFile( *TAIR, GoPath.s + EntryName.s )
          EndIf
        EndIf
      Wend
      FinishDirectory(ExDir)
      
      AdvImgReq_FilterExplorerGadget( *TAIR, *TAIR\Win\ExplorerList )
      AdvImgReq_UpdateFileInput( *TAIR )
    EndIf
  EndIf
  ;AdvImgReq_UpdateFilePositions( *TAIR )
  ;  If AdvImgReq_UpdatePreviewImage( *AIR ) = 1
  ;    AdvImgReq_UpdatePreviewBuffer( *AIR )
  ;  EndIf
  *TAIR\UpdatePreviewArea_DrawFull = 1
  *TAIR\UpdatePreviewArea_Mode = #AdvImgReq_Mode_Update
  ;EndIf
  AdvImgReq_OpenImages_Continue( *AIR )
  
  If addtostack.l = 1
    DisableGadget(*TAIR\Win\ToolButton[0], #False)
    *TAIR\PathStackPosition = *TAIR\PathStackPosition + 1
    *TAIR\PathStack[*TAIR\PathStackPosition] = GoPath.s
    If *TAIR\PathStackPosition > *TAIR\PathStacks.l
      *TAIR\PathStacks.l = *TAIR\PathStackPosition
    EndIf
    
    DisableGadget(*TAIR\Win\ToolButton[1], #True)
    *TAIR\PathStacks.l = *TAIR\PathStackPosition
  EndIf
EndProcedure

Procedure AdvImgReq_ClearPattern( *AIR )
  *TAIR.AdvImgReq = *AIR
  For I = 0 To *TAIR\PatternInList - 1
    If Not *TAIR\PatternList[I] = 0
      FreeMemory( *TAIR\PatternList[I] )
      *TAIR\PatternList[I] = 0
    EndIf
  Next
  *TAIR\PatternInList = 0
EndProcedure

Procedure AdvImgReq_AddPattern( *AIR, PattStr.s )
  *TAIR.AdvImgReq = *AIR
  
  CountPattern.l = CountString(PattStr.s, ";") + 1
  For GoPattern.l = 1 To CountPattern.l
    PIL.l = *TAIR\PatternInList
    *Pattern.AdvImgReq_Pattern = AllocateMemory(SizeOf(AdvImgReq_Pattern))
    
    UnitPatStr.s = StringField( PattStr.s, GoPattern.l, ";" )
    CountInformations = CountString(UnitPatStr.s, "|") + 1
    For GoInf = 1 To CountInformations
      If GoInf = 1
        *Pattern\Caption = StringField( UnitPatStr.s, GoInf, "|" )
      Else
        *Pattern\Extension[GoInf-2] = StringField( UnitPatStr.s, GoInf, "|" )
      EndIf
    Next
    
    ;PatCaption.s = StringField( UnitPatStr.s, 1, "|" )
    ;PatExtension.s = StringField( UnitPatStr.s, 2, "|" )
    
    ;*Pattern\Caption = PatCaption.s
    ;*Pattern\Extension = PatExtension.s
    
    *TAIR\PatternList[PIL] = *Pattern
    *TAIR\PatternInList = *TAIR\PatternInList + 1
  Next
  
EndProcedure

Procedure AdvImgReq_UpdatePatternAtGui( *AIR )
  *TAIR.AdvImgReq = *AIR
  ClearGadgetItemList(*TAIR\Win\Combo_FileType)
  For I = 0 To *TAIR\PatternInList - 1
    *Pattern.AdvImgReq_Pattern = *TAIR\PatternList[I]
    AddGadgetItem(*TAIR\Win\Combo_FileType, I, *Pattern\Caption)
  Next
EndProcedure

Procedure AdvImgReq_SelectPattern( *AIR, SelID.l )
  *TAIR.AdvImgReq = *AIR
  SetGadgetState( *TAIR\Win\Combo_FileType , SelID.l )
  *TAIR\UsePattern = SelID
  ;GetGadgetState(*TAIR\Win\Combo_FileType)
EndProcedure

Procedure.l AdvImgReq_IsRun( *AIR )
  *TAIR.AdvImgReq = *AIR
  
  If *TAIR\mode = #AdvImgReq_Mode_Update
    ProcedureReturn 1
  EndIf
  
  If *TAIR\Thread_OpenImages_Mode = #AdvImgReq_Mode_Close
    ProcedureReturn 0
  EndIf
  
  ProcedureReturn 0
EndProcedure

Procedure.b AdvImgReq_UpdatePreviewImage( *AIR )
  *TAIR.AdvImgReq = *AIR
  ;If *TAIR\DoInMainUpdate = #AdvImgReq_DoMode_UpdatePreview
  ;  ProcedureReturn 0
  ;EndIf
  ;AdvImgReq_OpenImages_Pause( *AIR )
  ;*TAIR\DoInMainUpdate = #AdvImgReq_DoMode_UpdatePreview
  
  ;*TAIR\Thread_OpenImages_PauseMode = 1
  
  If *TAIR\PreviewArea_Width < 15 Or *TAIR\PreviewArea_Height < 15
    ProcedureReturn 0
  EndIf
  
  ColWhite.l = RGB(255, 255, 255)
  ColBlack.l = RGB(0, 0, 0)
  ColSelected.l = RGB(193, 218, 230)
  StartDrawing(ImageOutput(*TAIR\PreviewImage))
  DrawingMode(#PB_2DDrawing_Transparent)
  DrawingFont(FontID(*TAIR\PreviewFont))
  Box(0, 0, *TAIR\PreviewArea_Width, *TAIR\PreviewArea_Height, ColWhite)
  
  PosX.l = 0
  PosY.l = 0
  Rows.l = 0
  *LastFile = 0
  
  ShowRowsFrom = GetGadgetState(*TAIR\Win\PreviewScrollbar.l)
  ShowRowsLength = 3
  DPAddX = 0
  DPAddY = 0
  While *TAIR\RowHeights[DoDowner] > 0 And DoDowner < ShowRowsFrom
    DPAddY = DPAddY - *TAIR\RowHeights[DoDowner]
    DoDowner = DoDowner + 1
  Wend
  
  
  MaxTxtHeight.l = 0
  *ManageFile = *TAIR\LastFile
  While Not *ManageFile = 0
    *File.AdvImgReq_File = *ManageFile
    
    DPX.l = PosX + 5
    DPY.l = PosY + 5 + DPAddY
    
    DrawThisItem.b = 1
    If *TAIR\UpdatePreviewArea_DrawFull = 0
      If DPY > *TAIR\PreviewArea_Height
        DrawThisItem.b = 0
      EndIf
      If DPY < 0
        DrawThisItem.b = 0
      EndIf
    EndIf
    
    ;    If *TAIR\UpdatePreviewArea_DrawFull = 0 Or *TAIR\UpdatePreviewArea_DrawFull = 1
    ;      DPX
    
    Filename.s = *File\Filename
    OnlyFilename.s = StringField( Filename.s, CountString(Filename.s, "\")+1, "\")
    
    If DrawThisItem.b = 1
      DrawingMode(#PB_2DDrawing_Transparent)
      If *File\Selected = 1
        Box(DPX - 2, DPY - 2, AdvImgReq_PreviewSizeX + 4, AdvImgReq_PreviewSizeY + 2, ColSelected)
        If *TAIR\LastSelectedFile = *File
          If DPX > 0 And DPY > 0 And DPX + AdvImgReq_PreviewSizeX - 1 < *TAIR\PreviewArea_Width And DPY + AdvImgReq_PreviewSizeY - 3 < *TAIR\PreviewArea_Height
            AdvImgReq_Utils_DottedBox(DPX, DPY, AdvImgReq_PreviewSizeX - 1, AdvImgReq_PreviewSizeY - 3, ColBlack)
          EndIf
        EndIf
      EndIf
      
      If *File\ExistsImage = 1
        ;ResizeGadget( *File\Container, PosX, PosY, #PB_Ignore, #PB_Ignore )
        DrawImageX = DPX + AdvImgReq_PreviewSizeX / 2 - ImageWidth(*File\ImageHandle) / 2
        DrawImageY = DPY + AdvImgReq_PreviewSizeY / 2 - ImageHeight(*File\ImageHandle) / 2
        DrawImage( ImageID(*File\ImageHandle), DrawImageX, DrawImageY )
      EndIf
      
      DrawingMode(#PB_2DDrawing_Outlined | #PB_2DDrawing_Transparent)
      Box(DPX - 2, DPY - 2, AdvImgReq_PreviewSizeX + 4, AdvImgReq_PreviewSizeY + 2, ColBlack)
      
      DrawingMode(#PB_2DDrawing_Outlined | #PB_2DDrawing_Transparent)
      TxtHeight.l = AdvImgReq_Utils_DrawTextInRect( DPX + 2, DPY + AdvImgReq_PreviewSizeY + 2, AdvImgReq_PreviewSizeX - 4, OnlyFilename.s )
      If TxtHeight.l > MaxTxtHeight.l
        MaxTxtHeight.l = TxtHeight.l
      EndIf
      Box(DPX - 2, DPY + AdvImgReq_PreviewSizeY - 1, AdvImgReq_PreviewSizeX + 4, TxtHeight + 6 + 1, ColBlack)
      
      If *File\Selected = 1
        DrawingMode(#PB_2DDrawing_Transparent | #PB_2DDrawing_XOr)
        ;Box(DPX + 2, DPY + AdvImgReq_PreviewSizeY + 2, AdvImgReq_PreviewSizeX - 4, TxtHeight.l, ColSelected.l )
        Box(DPX - 2, DPY + AdvImgReq_PreviewSizeY, AdvImgReq_PreviewSizeX + 4, TxtHeight + 6)
      EndIf
    EndIf
    
    *File\ClientSizeX = AdvImgReq_PreviewSizeX + 4
    *File\ClientSizeY = AdvImgReq_PreviewSizeY + 2 + TxtHeight + 6 + 1
    *File\ClientPosX = DPX
    *File\ClientPosY = DPY
    *File\InRow = Rows
    
    PosX = PosX + AdvImgReq_PreviewSizeX + 6
    If PosX + AdvImgReq_PreviewSizeX + 6 > *TAIR\PreviewArea_Width - 1
      PosX = 0
      PosY = PosY + AdvImgReq_PreviewSizeY + MaxTxtHeight.l + 10
      *TAIR\RowHeights[Rows] = AdvImgReq_PreviewSizeY + MaxTxtHeight.l + 10
      *TAIR\RowHeights[Rows+1] = 0
      MaxTxtHeight.l = 0
      Rows = Rows + 1
    EndIf
    ;    ElseIf DrawThisItem.b = 0
    ;      TxtHeight.l = AdvImgReq_Utils_GetTextInRectHeight( DPX + 2, DPY + AdvImgReq_PreviewSizeY + 2, AdvImgReq_PreviewSizeX - 4, OnlyFilename.s )
    
    ;    If *File\ClientPosY + *File\ClientSizeY > FullHeight
    ;      FullHeight = *File\ClientPosY + *File\ClientSizeY
    ;    EndIf
    
    *LastFile = *File
    *ManageFile = *File\NextFile
  Wend
  
  DrawingMode(#PB_2DDrawing_Transparent)
  Line(0, 0, *TAIR\PreviewArea_Width, 0, ColBlack)
  Line(0, *TAIR\PreviewArea_Height-1, *TAIR\PreviewArea_Width, 0, ColBlack)
  Line(0, 0, 0, *TAIR\PreviewArea_Height, ColBlack)
  Line(*TAIR\PreviewArea_Width-1, 0, 0, *TAIR\PreviewArea_Height, ColBlack)
  
  StopDrawing()
  
  If *TAIR\UpdatePreviewArea_DrawFull = 1
    SetGadgetAttribute( *TAIR\Win\PreviewScrollbar.l, #PB_ScrollBar_Minimum, 0)
    If Rows > 0
      RowScreenBegin = Rows
      RowsScreenMaxHeight = 0
      While RowScreenBegin > 0 And RowsScreenMaxHeight < *TAIR\PreviewArea_Height
        RowsScreenMaxHeight = RowsScreenMaxHeight + *TAIR\RowHeights[RowScreenBegin]
        RowScreenBegin = RowScreenBegin - 1
      Wend
      
      ;Debug (Rows - RowScreenBegin)
      ;Debug RowsScreenMaxHeight
      
      SetGadgetAttribute( *TAIR\Win\PreviewScrollbar.l, #PB_ScrollBar_Maximum, Rows - (Rows - RowScreenBegin) + 3)
      SetGadgetAttribute( *TAIR\Win\PreviewScrollbar.l, #PB_ScrollBar_PageLength, 1)
    Else
      SetGadgetAttribute( *TAIR\Win\PreviewScrollbar.l, #PB_ScrollBar_Maximum, 0)
      SetGadgetAttribute( *TAIR\Win\PreviewScrollbar.l, #PB_ScrollBar_PageLength, 0)
    EndIf
  EndIf
  
  If *TAIR\UpdatePreviewArea_DrawFull = 1
    *TAIR\UpdatePreviewArea_DrawFull = 0
  EndIf
  
  AdvImgReq_OpenImages_Continue( *AIR )
  ;*TAIR\DoInMainUpdate = #AdvImgReq_DoMode_Nothing
  
  ProcedureReturn 1
EndProcedure

Procedure AdvImgReq_UpdatePreviewBuffer( *AIR )
  *TAIR.AdvImgReq = *AIR
  If *TAIR\PreviewArea_Width < 10 Or *TAIR\PreviewArea_Height < 10
    ProcedureReturn
  EndIf
  
  If *TAIR\Win\PreviewBuffer > 0
    FreeImage(*TAIR\Win\PreviewBuffer)
  EndIf
  *TAIR\Win\PreviewBuffer = CopyImage(*TAIR\PreviewImage, #PB_Any)
  SetGadgetState(*TAIR\Win\PreviewGadget, ImageID(*TAIR\Win\PreviewBuffer))
EndProcedure

Procedure AdvImgReq_SwitchView( *AIR, mode.b )
  *TAIR.AdvImgReq = *AIR
  *TAIR\ViewMode.b = mode.b
  
  If *TAIR\ViewMode.b = 0
    HideGadget(*TAIR\Win\PreviewGadget, #False)
    HideGadget(*TAIR\Win\PreviewScrollbar, #False)
    HideGadget(*TAIR\Win\ExplorerList, #True)
    
    ;Path.s = GetGadgetText(*TAIR\Win\StringPath)
    ;AdvImgReq_SetPath( *TAIR, Path.s, 2, #False )
  ElseIf *TAIR\ViewMode.b = 1
    HideGadget(*TAIR\Win\PreviewGadget, #True)
    HideGadget(*TAIR\Win\PreviewScrollbar, #True)
    HideGadget(*TAIR\Win\ExplorerList, #False)
  EndIf
EndProcedure

Procedure.b AdvImgReq_CheckForAction( *AIR )
  *TAIR.AdvImgReq = *AIR
  
;  Debug "Selected Files as String: " + AdvImgReq_GetSelectedFiles( *AIR )
;  Debug "Selected Folder as String: " + AdvImgReq_GetSelectedPath( *AIR )
;  Debug "Selected Files readed from AdvImgReq_ReadSelectedFiles and AdvImgReq_NextSelectedFile:"
  
  SelFiles.s = GetGadgetText( *TAIR\Win\Input_Filename )
  SelPath.s = GetGadgetText( *TAIR\Win\ExplorerList )

  GlobalOkCheck.b = 1
  
  If SelFiles.s = "" Or SelPath.s = ""
    If (SelFiles.s = "" And (*TAIR\flags & #AdvImgReq_Open)) Or SelPath.s = ""
      ShowMsg.s = *TAIR\Words[#AdvImgReq_Words_Info_NoFileSelected]
      MessageRequester( *TAIR\Words[#AdvImgReq_Words_Title_Warning], ShowMsg.s, #PB_MessageRequester_Ok)
      GlobalOkCheck.b = 0
    EndIf
  Else
    SelectedFile.s = AdvImgReq_ReadSelectedFiles( SelFiles.s )
    While Not SelectedFile.s = ""
      ExistsCheck.b = 0
      
      FileHandle = ReadFile(#PB_Any, SelPath.s + SelectedFile.s )
      If IsFile(FileHandle)
        CloseFile(FileHandle)
        ExistsCheck.b = 1
      EndIf
      
      If *TAIR\flags & #AdvImgReq_Open
        If ExistsCheck.b = 0
          ShowMsg.s = ReplaceString( *TAIR\Words[#AdvImgReq_Words_Info_FileNotFound], "%%FILE%%", SelPath.s + SelectedFile.s )
          MessageRequester(*TAIR\Words[#AdvImgReq_Words_Title_Warning], ShowMsg.s, #PB_MessageRequester_Ok)
          GlobalOkCheck.b = 0
        EndIf
      ElseIf *TAIR\flags & #AdvImgReq_Save
        If ExistsCheck.b = 1
          ShowMsg.s = ReplaceString( *TAIR\Words[#AdvImgReq_Words_Info_FileExists], "%%FILE%%", SelPath.s + SelectedFile.s )
          MsgVal.l = MessageRequester(*TAIR\Words[#AdvImgReq_Words_Title_Warning], ShowMsg.s, #PB_MessageRequester_YesNo)
          If MsgVal.l = #PB_MessageRequester_Yes
            GlobalOkCheck.b = 1
          ElseIf MsgVal.l = #PB_MessageRequester_No
            GlobalOkCheck.b = 0
          EndIf
        EndIf
      EndIf
      
      SelectedFile.s = AdvImgReq_NextSelectedFile()
    Wend
  EndIf
  
  ProcedureReturn GlobalOkCheck.b
EndProcedure

Procedure AdvImgReq_Resize( *AIR, sx.l, sy.l )
  *TAIR.AdvImgReq = *AIR
  
  PreviewArea_Width = sx.l - 10 - *TAIR\Win\ExplorerWidth - 5 - AdvImgReq_BeginScrollbarWidth
  PreviewArea_Height = sy.l - 10 - *TAIR\Win\BottomSpace - 10 - 25
  
  If PreviewArea_Width < 10
    PreviewArea_Width = 10
  EndIf
  
  If PreviewArea_Height < 10
    PreviewArea_Height = 10
  EndIf
  
  *TAIR\PreviewArea_Width = PreviewArea_Width
  *TAIR\PreviewArea_Height = PreviewArea_Height
  
  StringPathWidth.l = sx.l - 10 - *TAIR\Win\ExplorerWidth - 5 - #AdvImgReq_ToolButtons * 24 - 5
  
  ResizeGadget( *TAIR\Win\Explorer, #PB_Ignore, #PB_Ignore, *TAIR\Win\ExplorerWidth, sy.l - 10 - *TAIR\Win\BottomSpace - 10 )
  ResizeGadget( *TAIR\Win\StringPath, *TAIR\Win\ExplorerWidth + 10, #PB_Ignore, StringPathWidth.l, #PB_Ignore )
  For I = 0 To #AdvImgReq_ToolButtons-1
    ;ToolImage = AdvImgReq_Utils_GetToolImage(I)
    ResizeGadget(*TAIR\Win\ToolButton[I], *TAIR\Win\ExplorerWidth + 10 + StringPathWidth.l + I * 24 + 5, #PB_Ignore, #PB_Ignore, #PB_Ignore)
  Next
  ResizeImage( *TAIR\PreviewImage, PreviewArea_Width, PreviewArea_Height, #PB_Image_Raw )
  ResizeImage( *TAIR\Win\PreviewBuffer, PreviewArea_Width, PreviewArea_Height, #PB_Image_Raw )
  ResizeGadget( *TAIR\Win\PreviewGadget, *TAIR\Win\ExplorerWidth + 10, #PB_Ignore, PreviewArea_Width, PreviewArea_Height )
  ResizeGadget( *TAIR\Win\PreviewScrollbar, *TAIR\Win\ExplorerWidth + 10 + PreviewArea_Width, #PB_Ignore, AdvImgReq_BeginScrollbarWidth, PreviewArea_Height )
  ResizeGadget( *TAIR\Win\ExplorerList, *TAIR\Win\ExplorerWidth + 10, 30, PreviewArea_Width + AdvImgReq_BeginScrollbarWidth, PreviewArea_Height )
  
  DoTop.l = 30 + PreviewArea_Height + 5
  ResizeGadget( *TAIR\Win\InputText_Filename, 5, DoTop, *TAIR\InputTextWidth.l - 10, *TAIR\BottomFieldHeight )
  ResizeGadget( *TAIR\Win\Input_Filename, *TAIR\InputTextWidth.l, DoTop, *TAIR\Win\ExplorerWidth + 10 + PreviewArea_Width + AdvImgReq_BeginScrollbarWidth - *TAIR\ButtonWidth - *TAIR\InputSpaceWidth - *TAIR\InputTextWidth.l - 5, *TAIR\BottomFieldHeight )
  ResizeGadget( *TAIR\Win\ButtonOk, *TAIR\Win\ExplorerWidth + 10 + PreviewArea_Width + AdvImgReq_BeginScrollbarWidth - *TAIR\ButtonWidth, DoTop.l, *TAIR\ButtonWidth, *TAIR\BottomFieldHeight )
  DoTop.l = DoTop.l + *TAIR\BottomFieldHeight + 5
  ResizeGadget( *TAIR\Win\ComboText_FileType, 5, DoTop, *TAIR\InputTextWidth.l - 10, *TAIR\BottomFieldHeight )
  ;ResizeGadget( *TAIR\Win\Combo_FileType, *TAIR\InputTextWidth.l, DoTop, *TAIR\Win\ExplorerWidth + 10 + PreviewArea_Width + AdvImgReq_BeginScrollbarWidth - *TAIR\ButtonWidth - *TAIR\InputSpaceWidth - *TAIR\InputTextWidth.l - 5, *TAIR\BottomFieldHeight )
  ResizeGadget( *TAIR\Win\Combo_FileType, *TAIR\InputTextWidth.l, DoTop, *TAIR\Win\ExplorerWidth + 10 + PreviewArea_Width + AdvImgReq_BeginScrollbarWidth - *TAIR\ButtonWidth - *TAIR\InputSpaceWidth - *TAIR\InputTextWidth.l - 5, #PB_Ignore)
  ResizeGadget( *TAIR\Win\ButtonAbort, *TAIR\Win\ExplorerWidth + 10 + PreviewArea_Width + AdvImgReq_BeginScrollbarWidth - *TAIR\ButtonWidth, DoTop.l, *TAIR\ButtonWidth, *TAIR\BottomFieldHeight )
  
  ;If AdvImgReq_UpdatePreviewImage( *AIR ) = 1
  ;  AdvImgReq_UpdatePreviewBuffer( *AIR )
  ;EndIf
  *TAIR\UpdatePreviewArea_DrawFull = 1
  *TAIR\UpdatePreviewArea_Mode = #AdvImgReq_Mode_Update
EndProcedure

Procedure AdvImgReq_Init( *AIR )
  Shared AdvImgReq_GlobalWords()
  
  AdvImgReq_OpenedRequesters.l = AdvImgReq_OpenedRequesters.l + 1
  
  *TAIR.AdvImgReq = *AIR
  *TAIR\mode = #AdvImgReq_Mode_Init
  
  If AdvImgReq_BeginSizeX = 0
    AdvImgReq_BeginSizeX = 800
  EndIf
  
  If AdvImgReq_BeginSizeY = 0
    AdvImgReq_BeginSizeY = 600
  EndIf
  
  If AdvImgReq_PreviewSizeX = 0
    ;AdvImgReq_PreviewSizeX = 128
    ;AdvImgReq_PreviewSizeX = 65
    AdvImgReq_PreviewSizeX = 74
  EndIf
  
  If AdvImgReq_PreviewSizeY = 0
    ;AdvImgReq_PreviewSizeY = 128
    ;AdvImgReq_PreviewSizeY = 65
    AdvImgReq_PreviewSizeY = 91
  EndIf
  
  If AdvImgReq_BeginScrollbarWidth = 0
    AdvImgReq_BeginScrollbarWidth = 16
  EndIf
  
  If AdvImgReq_CharSpace_X = 0
    AdvImgReq_CharSpace_X = 8
  EndIf
  
  If AdvImgReq_CharSpace_Y = 0
    AdvImgReq_CharSpace_Y = 16
  EndIf
  
  WinFlags.l = #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_MaximizeGadget
  
  If AdvImgReq_BeginPosX = 0 And AdvImgReq_BeginPosY = 0
    WinFlags.l = WinFlags.l | #PB_Window_ScreenCentered
  EndIf
  
  If *TAIR\Win\BottomSpace = 0
    *TAIR\Win\BottomSpace = 0
  EndIf
  
  If *TAIR\Win\ExplorerWidth = 0
    *TAIR\Win\ExplorerWidth = 187
  EndIf
  
  If *TAIR\ButtonWidth = 0
    *TAIR\ButtonWidth = 73
  EndIf
  
  If *TAIR\BottomFieldHeight = 0
    *TAIR\BottomFieldHeight = 20
  EndIf
  
  If *TAIR\InputTextWidth = 0
    *TAIR\InputTextWidth = 100
  EndIf

  If *TAIR\InputSpaceWidth = 0
    *TAIR\InputSpaceWidth = 100
  EndIf
  
  For I = 0 To #AdvImgReq_MaxWords - 1
    If Not AdvImgReq_GlobalWords(I) = ""
      *TAIR\Words[I] = AdvImgReq_GlobalWords(I)
    EndIf
  Next
  
  If *TAIR\Words[#AdvImgReq_Words_Filename] = ""
    *TAIR\Words[#AdvImgReq_Words_Filename] = #AdvImgReq_Words_Default_Filename
  EndIf
  
  If *TAIR\Words[#AdvImgReq_Words_Filetype] = ""
    *TAIR\Words[#AdvImgReq_Words_Filetype] = #AdvImgReq_Words_Default_Filetype
  EndIf
  
  If *TAIR\Words[#AdvImgReq_Words_Button_Open] = ""
    *TAIR\Words[#AdvImgReq_Words_Button_Open] = #AdvImgReq_Words_Default_Button_Open
  EndIf
  
  If *TAIR\Words[#AdvImgReq_Words_Button_Save] = ""
    *TAIR\Words[#AdvImgReq_Words_Button_Save] = #AdvImgReq_Words_Default_Button_Save
  EndIf
  
  If *TAIR\Words[#AdvImgReq_Words_Button_Abort] = ""
    *TAIR\Words[#AdvImgReq_Words_Button_Abort] = #AdvImgReq_Words_Default_Button_Abort
  EndIf
  
  If *TAIR\Words[#AdvImgReq_Words_Info_FileExists] = ""
    *TAIR\Words[#AdvImgReq_Words_Info_FileExists] = #AdvImgReq_Words_Default_Info_FileExists
  EndIf
  
  If *TAIR\Words[#AdvImgReq_Words_Info_FileNotFound] = ""
    *TAIR\Words[#AdvImgReq_Words_Info_FileNotFound] = #AdvImgReq_Words_Default_Info_FileNotFound
  EndIf
  
  If *TAIR\Words[#AdvImgReq_Words_Info_WrongEnteredFiles] = ""
    *TAIR\Words[#AdvImgReq_Words_Info_WrongEnteredFiles] = #AdvImgReq_Words_Default_Info_WrongEnteredFiles
  EndIf
  
  If *TAIR\Words[#AdvImgReq_Words_Info_NoFileSelected] = ""
    *TAIR\Words[#AdvImgReq_Words_Info_NoFileSelected] = #AdvImgReq_Words_Default_Info_NoFileSelected
  EndIf
  
  If *TAIR\Words[#AdvImgReq_Words_Title_Warning] = ""
    *TAIR\Words[#AdvImgReq_Words_Title_Warning] = #AdvImgReq_Words_Default_Title_Warning
  EndIf

  *TAIR\Win\BottomSpace = *TAIR\Win\BottomSpace + (*TAIR\BottomFieldHeight+5) * 2 - 10
  
  AdvImgReq_PreviewInfoHeight = 30
  
  PreviewArea_Width = AdvImgReq_BeginSizeX - 10 - *TAIR\Win\ExplorerWidth - 5 - AdvImgReq_BeginScrollbarWidth
  PreviewArea_Height = AdvImgReq_BeginSizeY - 10 - *TAIR\Win\BottomSpace - 10 - 25
  
  *TAIR\PreviewArea_Width = PreviewArea_Width
  *TAIR\PreviewArea_Height = PreviewArea_Height
  
  StringPathWidth.l = AdvImgReq_BeginSizeX - 10 - *TAIR\Win\ExplorerWidth - 5 - #AdvImgReq_ToolButtons * 24 - 5
  
  *TAIR\Win\Win = OpenWindow( #PB_Any, AdvImgReq_BeginPosX, AdvImgReq_BeginPosY, AdvImgReq_BeginSizeX, AdvImgReq_BeginSizeY, *TAIR\Title, WinFlags.l )
  CreateGadgetList( WindowID(*TAIR\Win\Win) )
  *TAIR\Win\Explorer = ExplorerTreeGadget( #PB_Any, 5, 5, *TAIR\Win\ExplorerWidth, AdvImgReq_BeginSizeY - 10 - *TAIR\Win\BottomSpace - 10, "", #PB_Explorer_AlwaysShowSelection | #PB_Explorer_AutoSort | #PB_Explorer_NoFiles )
  *TAIR\Win\StringPath = StringGadget( #PB_Any, *TAIR\Win\ExplorerWidth + 10, 5, StringPathWidth, 22, "" )
  For I = 0 To #AdvImgReq_ToolButtons-1
    ToolImage = AdvImgReq_Utils_GetToolImage(I)
    *TAIR\Win\ToolButton[I] = ButtonImageGadget(#PB_Any, *TAIR\Win\ExplorerWidth + 10 + StringPathWidth.l + I * 24 + 5, 5, 22, 22, ImageID(ToolImage) )
  Next
  DisableGadget(*TAIR\Win\ToolButton[0], #True)
  DisableGadget(*TAIR\Win\ToolButton[1], #True)
  *TAIR\PreviewImage = CreateImage( #PB_Any, PreviewArea_Width, PreviewArea_Height, #PB_Image_DisplayFormat )
  *TAIR\Win\PreviewBuffer = CreateImage( #PB_Any, PreviewArea_Width, PreviewArea_Height, #PB_Image_DisplayFormat )
  *TAIR\Win\PreviewGadget = ImageGadget( #PB_Any, *TAIR\Win\ExplorerWidth + 10, 30, PreviewArea_Width, PreviewArea_Height, ImageID(*TAIR\Win\PreviewBuffer))
  *TAIR\Win\PreviewScrollbar = ScrollBarGadget( #PB_Any, *TAIR\Win\ExplorerWidth + 10 + PreviewArea_Width, 30, AdvImgReq_BeginScrollbarWidth, PreviewArea_Height, 0, 0, 0, #PB_ScrollBar_Vertical )
  doflags.l = #PB_Explorer_AlwaysShowSelection
  If *TAIR\flags & #AdvImgReq_MultiSelect
    doflags.l = doflags.l | #PB_Explorer_MultiSelect
  EndIf
  doflags.l = doflags.l | #PB_Explorer_HeaderDragDrop | #PB_Explorer_FullRowSelect | #PB_Explorer_NoFolders | #PB_Explorer_NoParentFolder | #PB_Explorer_NoDirectoryChange | #PB_Explorer_AutoSort
  *TAIR\Win\ExplorerList = ExplorerListGadget(#PB_Any, *TAIR\Win\ExplorerWidth + 10, 30, PreviewArea_Width + AdvImgReq_BeginScrollbarWidth, PreviewArea_Height, "", doflags)
  HideGadget(*TAIR\Win\ExplorerList, #True)
  
  DoTop.l = 30 + PreviewArea_Height + 5
  *TAIR\Win\InputText_Filename = TextGadget(#PB_Any, 5, DoTop, *TAIR\InputTextWidth.l, *TAIR\BottomFieldHeight, *TAIR\Words[#AdvImgReq_Words_Filename])
  *TAIR\Win\Input_Filename = StringGadget(#PB_Any, *TAIR\InputTextWidth.l, DoTop, *TAIR\Win\ExplorerWidth + 10 + PreviewArea_Width + AdvImgReq_BeginScrollbarWidth - *TAIR\ButtonWidth - *TAIR\InputSpaceWidth - *TAIR\InputTextWidth.l - 5, *TAIR\BottomFieldHeight, "")
  
  If *TAIR\flags & #AdvImgReq_Open
    UseWord.s = *TAIR\Words[#AdvImgReq_Words_Button_Open]
  ElseIf *TAIR\flags & #AdvImgReq_Save
    UseWord.s = *TAIR\Words[#AdvImgReq_Words_Button_Save]
  EndIf
  ;*TAIR\Win\ButtonOk = ButtonGadget(#PB_Any, *TAIR\Win\ExplorerWidth + 10 + PreviewArea_Width + AdvImgReq_BeginScrollbarWidth - *TAIR\ButtonWidth, DoTop.l, *TAIR\ButtonWidth, *TAIR\BottomFieldHeight, "Öf&fnen")
  *TAIR\Win\ButtonOk = ButtonGadget(#PB_Any, *TAIR\Win\ExplorerWidth + 10 + PreviewArea_Width + AdvImgReq_BeginScrollbarWidth - *TAIR\ButtonWidth, DoTop.l, *TAIR\ButtonWidth, *TAIR\BottomFieldHeight, UseWord.s)
  DoTop.l = DoTop.l + *TAIR\BottomFieldHeight + 5
  *TAIR\Win\ComboText_FileType = TextGadget(#PB_Any, 5, DoTop, *TAIR\InputTextWidth.l, *TAIR\BottomFieldHeight, *TAIR\Words[#AdvImgReq_Words_Filetype])
;  *TAIR\Win\Combo_FileType = ComboBoxGadget(#PB_Any, *TAIR\InputTextWidth.l, DoTop, *TAIR\Win\ExplorerWidth + 10 + PreviewArea_Width + AdvImgReq_BeginScrollbarWidth - *TAIR\ButtonWidth - *TAIR\InputSpaceWidth - *TAIR\InputTextWidth.l - 5, *TAIR\BottomFieldHeight)
    *TAIR\Win\Combo_FileType = ComboBoxGadget(#PB_Any, *TAIR\InputTextWidth.l, DoTop, *TAIR\Win\ExplorerWidth + 10 + PreviewArea_Width + AdvImgReq_BeginScrollbarWidth - *TAIR\ButtonWidth - *TAIR\InputSpaceWidth - *TAIR\InputTextWidth.l - 5, 100)
  *TAIR\Win\ButtonAbort = ButtonGadget(#PB_Any, *TAIR\Win\ExplorerWidth + 10 + PreviewArea_Width + AdvImgReq_BeginScrollbarWidth - *TAIR\ButtonWidth, DoTop.l, *TAIR\ButtonWidth, *TAIR\BottomFieldHeight, *TAIR\Words[#AdvImgReq_Words_Button_Abort])
  
  *TAIR\Win\Menu = 500
  CreatePopupMenu(*TAIR\Win\Menu)
  MenuTitle("Ansicht")
  MenuItem(*TAIR\Win\Menu + 1, "&Gallerie")
  SetMenuItemState( *TAIR\Win\Menu, *TAIR\Win\Menu + 1, 1 )
  MenuItem(*TAIR\Win\Menu + 2, "G&roße Symbole")
  MenuItem(*TAIR\Win\Menu + 3, "&Kleine Symbole")
  MenuItem(*TAIR\Win\Menu + 4, "&Liste")
  MenuItem(*TAIR\Win\Menu + 5, "&Details")
  CloseSubMenu()
  MenuBar()
  MenuItem(*TAIR\Win\Menu + 6, "Alles &markieren")
  MenuItem(*TAIR\Win\Menu + 7, "Markierung &umkehren")
  MenuBar()
  MenuItem(*TAIR\Win\Menu + 8, "&Eigenschaften")
  
  
  AdvImgReq_SetFont( *TAIR, "Arial", 10)
  
  AdvImgReq_ClearPattern( *TAIR )
  AdvImgReq_AddPattern( *TAIR, *TAIR\Pattern.s )
  AdvImgReq_UpdatePatternAtGui( *TAIR )
  AdvImgReq_SelectPattern( *TAIR, 0 )
  
  ;If AdvImgReq_UpdatePreviewImage( *TAIR ) = 1
  ;  AdvImgReq_UpdatePreviewBuffer( *TAIR )
  ;EndIf
  *TAIR\UpdatePreviewArea_Mode = #AdvImgReq_Mode_Update
  
  *TAIR\mode = #AdvImgReq_Mode_Update
  
  *TAIR\DoInMainUpdate = #AdvImgReq_DoMode_Nothing
  
  AdvImgReq_OpenImages_Begin( *AIR )
  
  AdvImgReq_SetPath( *TAIR, *TAIR\StdFile, 2, #False )
EndProcedure

Procedure AdvImgReq_Close( *AIR )
  *TAIR.AdvImgReq = *AIR
  If AdvImgReq_OpenedRequesters.l > 0
    If Not *TAIR\mode = #AdvImgReq_Mode_Closed
      ;AdvImgReq_OpenImages_Pause( *AIR )
      *TAIR\Thread_OpenImages_Mode = #AdvImgReq_Mode_Close
      *TAIR\mode = #AdvImgReq_Mode_Close
      *TAIR\SelectedFiles.s = GetGadgetText( *TAIR\Win\Input_Filename )
      *TAIR\SelectedPath.s = GetGadgetText( *TAIR\Win\ExplorerList )
      
      AdvImgReq_LastSelectedFiles.s = *TAIR\SelectedFiles.s
      AdvImgReq_LastSelectedPath.s = *TAIR\SelectedPath.s
      
      ;While (*TAIR\mode <> #AdvImgReq_Mode_Closed And *TAIR\Thread_OpenImages_Mode <> #AdvImgReq_Mode_Closed)
      While Not *TAIR\Thread_OpenImages_Mode = #AdvImgReq_Mode_Closed
        Delay(1)
      Wend
      
      CloseWindow( *TAIR\Win\Win )
      AdvImgReq_OpenedRequesters.l = AdvImgReq_OpenedRequesters.l - 1
    EndIf
  EndIf
EndProcedure

Procedure AdvImgReq_Update( *AIR, Event, WindowID, GadgetID, EventType, MenuEvent )
  *TAIR.AdvImgReq = *AIR
  *TAIR\Last_Event.l = Event
  *TAIR\Last_WindowID.l = WindowID
  *TAIR\Last_GadgetID.l = GadgetID
  *TAIR\Last_EventType.l = EventType
  *TAIR\Last_MenuEvent.l = MenuEvent
  
  If ( *TAIR\Last_Event = #PB_Event_Gadget )
    If ( *TAIR\Last_GadgetID = *TAIR\Win\Combo_FileType )
      PatID = GetGadgetState(*TAIR\Win\Combo_FileType)
      If Not *TAIR\UsePattern = PatID
        AdvImgReq_SelectPattern( *TAIR, PatID )
        Path.s = GetGadgetText(*TAIR\Win\StringPath)
        AdvImgReq_SetPath( *TAIR, Path.s, 2, #False )
      EndIf
    EndIf
    
    If *TAIR\Last_EventType = #PB_EventType_Change
      If ( *TAIR\Last_GadgetID = *TAIR\Win\StringPath )
        Entered.s = GetGadgetText(*TAIR\Win\StringPath)
        Path.s = AdvImgReq_Utils_GetParentPath( GetGadgetText(*TAIR\Win\StringPath) )
        If Not LCase(Path.s) = LCase(*TAIR\WorkPath)
          AdvImgReq_SetPath( *TAIR, Path.s, 1 )
        EndIf
      EndIf
      
      If ( *TAIR\Last_GadgetID = *TAIR\Win\Explorer )
        Selected.s = GetGadgetText(*TAIR\Win\Explorer)
        If Not LCase(Selected.s) = LCase(*TAIR\WorkPath)
          AdvImgReq_SetPath( *TAIR, Selected.s, 0 )
        EndIf
      EndIf
      
      If ( *TAIR\Last_GadgetID = *TAIR\Win\ExplorerList )
        ItemCount.l = CountGadgetItems(*TAIR\Win\ExplorerList)
        
        ;AdvImgReq_SelectAllFiles( *TAIR, 0 )
        For I = 0 To ItemCount.l
          If GetGadgetItemState(*TAIR\Win\ExplorerList, I) & #PB_Explorer_Selected
            AdvImgReq_SelectFileByName( *TAIR, *TAIR\WorkPath + GetGadgetItemText(*TAIR\Win\ExplorerList, I, 0), 1 )
            ;Debug GetGadgetItemText(*TAIR\Win\ExplorerList, I, 0)
          Else
            AdvImgReq_SelectFileByName( *TAIR, *TAIR\WorkPath + GetGadgetItemText(*TAIR\Win\ExplorerList, I, 0), 0 )
          EndIf
        Next
        *TAIR\UpdatePreviewArea_Mode = #AdvImgReq_Mode_Update
      EndIf
    EndIf
    
    If ( *TAIR\Last_GadgetID = *TAIR\Win\PreviewScrollbar.l )
      ;If AdvImgReq_UpdatePreviewImage( *AIR ) = 1
      ;  AdvImgReq_UpdatePreviewBuffer( *AIR )
      ;EndIf
      *TAIR\UpdatePreviewArea_Mode = #AdvImgReq_Mode_Update
    EndIf
    
    If *TAIR\Last_EventType = #PB_EventType_LeftClick
      If *TAIR\Last_GadgetID = *TAIR\Win\ButtonOk
        If AdvImgReq_CheckForAction( *TAIR ) = 1
          *TAIR\ActionMode = #AdvImgReq_Action_Ok
          AdvImgReq_LastActionMode.l = *TAIR\ActionMode
          AdvImgReq_Close( *TAIR )
        EndIf
      EndIf
      
      If *TAIR\Last_GadgetID = *TAIR\Win\ButtonAbort
        *TAIR\ActionMode = #AdvImgReq_Action_Abort
        AdvImgReq_LastActionMode.l = *TAIR\ActionMode
        AdvImgReq_Close( *TAIR )
      EndIf
      
      If *TAIR\Last_GadgetID = *TAIR\Win\PreviewGadget
        If AdvImgReq_Utils_MouseOverGadget( *TAIR, *TAIR\Win\PreviewGadget )
          ;*File\ClientPosX
          *Pntr = AdvImgReq_GetFileFromPosition( *TAIR, AdvImgReq_LastMouseOverX, AdvImgReq_LastMouseOverY )
          If *Pntr
            If *TAIR\flags & #AdvImgReq_MultiSelect
              If GetAsyncKeyState_(#VK_CONTROL) > -1
                *FileFromPos.AdvImgReq_File = *Pntr
                AdvImgReq_SelectAllFiles( *TAIR, 0 )
              EndIf
            Else
              AdvImgReq_SelectAllFiles( *TAIR, 0 )
            EndIf

            DoMode.b = 1
            If *TAIR\flags & #AdvImgReq_MultiSelect
              If GetAsyncKeyState_(#VK_CONTROL) > -1
                DoMode.b = 2
              EndIf
            EndIf
            
            AdvImgReq_SelectFile( *TAIR, *Pntr, DoMode.b )
            ;If AdvImgReq_UpdatePreviewImage( *AIR ) = 1
            ;  AdvImgReq_UpdatePreviewBuffer( *AIR )
            ;EndIf
            *TAIR\UpdatePreviewArea_Mode = #AdvImgReq_Mode_Update
          EndIf
        EndIf
      EndIf
      
      For I = 0 To #AdvImgReq_ToolButtons-1    
        If ( *TAIR\Last_GadgetID = *TAIR\Win\ToolButton[I] )
          If I = 0 ; Go to previuos folder
            *TAIR\PathStackPosition = *TAIR\PathStackPosition - 1
            Path.s = *TAIR\PathStack[*TAIR\PathStackPosition]
            If Not LCase(Path.s) = LCase(*TAIR\WorkPath)
              AdvImgReq_SetPath( *TAIR, Path.s, 2, #False )
            EndIf
            If *TAIR\PathStackPosition = 0
              DisableGadget(*TAIR\Win\ToolButton[0], #True)
            EndIf
            DisableGadget(*TAIR\Win\ToolButton[1], #False)
          EndIf
          If I = 1 ; Go to last folder
            *TAIR\PathStackPosition = *TAIR\PathStackPosition + 1
            Path.s = *TAIR\PathStack[*TAIR\PathStackPosition]
            If Not LCase(Path.s) = LCase(*TAIR\WorkPath)
              AdvImgReq_SetPath( *TAIR, Path.s, 2, #False )
            EndIf
            If *TAIR\PathStackPosition = *TAIR\PathStacks
              DisableGadget(*TAIR\Win\ToolButton[1], #True)
            Else
              DisableGadget(*TAIR\Win\ToolButton[1], #False)
            EndIf
            DisableGadget(*TAIR\Win\ToolButton[0], #False)
          EndIf
          If I = 2 ; Go to parent folder
            Path.s = AdvImgReq_Utils_GetOrgParentPath( GetGadgetText(*TAIR\Win\StringPath) )
            If Not LCase(Path.s) = LCase(*TAIR\WorkPath)
              AdvImgReq_SetPath( *TAIR, Path.s, 2 )
            EndIf
          EndIf
          If I = 3 ; Reload folder
            Path.s = GetGadgetText(*TAIR\Win\StringPath)
            AdvImgReq_SetPath( *TAIR, Path.s, 2, #False )
          EndIf
          If I = 4 ; Switch view
            If *TAIR\ViewMode = 0
              ;AdvImgReq_SwitchView( *TAIR, 1 )
              If *TAIR\LastExplorerListDisplayMode = 0
                *TAIR\LastExplorerListDisplayMode = 5
              EndIf
              AdvImgReq_SetPreviewViewMode( *TAIR, *TAIR\LastExplorerListDisplayMode )
            Else
              AdvImgReq_SetPreviewViewMode( *TAIR, 1 )
              ;AdvImgReq_SwitchView( *TAIR, 0 )
            EndIf
          EndIf
        EndIf
      Next
    EndIf
    
    If *TAIR\Last_EventType = #PB_EventType_RightClick
      If *TAIR\Last_GadgetID = *TAIR\Win\PreviewGadget
        DisplayPopupMenu(*TAIR\Win\Menu, WindowID(*TAIR\Win\Win))
      EndIf
      
      If *TAIR\Last_GadgetID = *TAIR\Win\ExplorerList
        DisplayPopupMenu(*TAIR\Win\Menu, WindowID(*TAIR\Win\Win))
      EndIf
    EndIf
  EndIf
  
  ;PreviewViewMode.l
  If ( *TAIR\Last_Event = #PB_Event_Menu )
    If ( *TAIR\Last_MenuEvent = *TAIR\Win\Menu )
    EndIf
    
    For I = 1 To 5
      If ( *TAIR\Last_MenuEvent = *TAIR\Win\Menu + I )
        AdvImgReq_SetPreviewViewMode( *TAIR, I )
      EndIf
    Next
    
    If ( *TAIR\Last_MenuEvent = *TAIR\Win\Menu + 6 )
      AdvImgReq_SelectAllFiles( *TAIR, 1 )
      *TAIR\UpdatePreviewArea_Mode = #AdvImgReq_Mode_Update
    EndIf
    
    If ( *TAIR\Last_MenuEvent = *TAIR\Win\Menu + 7 )
      AdvImgReq_FileSelectReverse( *TAIR )
      *TAIR\UpdatePreviewArea_Mode = #AdvImgReq_Mode_Update
    EndIf
    
    If ( *TAIR\Last_MenuEvent = *TAIR\Win\Menu + 8 )
      AdvImgReq_OpenFileProperities( *TAIR )
    EndIf
  EndIf
  
  If ( *TAIR\Last_Event = #PB_Event_SizeWindow )
    AdvImgReq_Resize( *TAIR, WindowWidth(*TAIR\Win\Win), WindowHeight(*TAIR\Win\Win) )
  EndIf
  
  If *TAIR\DoInMainUpdate = #AdvImgReq_DoMode_UpdatePreview
    ;If AdvImgReq_UpdatePreviewImage( *AIR ) = 1
    ;  AdvImgReq_UpdatePreviewBuffer( *AIR )
    ;EndIf
    *TAIR\UpdatePreviewArea_Mode = #AdvImgReq_Mode_Update
    *TAIR\DoInMainUpdate = #AdvImgReq_DoMode_Nothing
  EndIf
  
  If ( *TAIR\Last_Event = #PB_Event_CloseWindow )
    If ( *TAIR\Last_WindowID = *TAIR\Win\Win )
      *TAIR\ActionMode = #AdvImgReq_Action_Abort
      AdvImgReq_Close( *TAIR )
    EndIf
  EndIf
EndProcedure

Procedure.l AdvImgReq_GetActionMode( *AIR )
  *TAIR.AdvImgReq = *AIR
  ProcedureReturn *TAIR\ActionMode
EndProcedure

Procedure.s AdvImgReq_GetSelectedFiles( *AIR )
  *TAIR.AdvImgReq = *AIR
  ProcedureReturn *TAIR\SelectedFiles.s
EndProcedure

Procedure.s AdvImgReq_GetSelectedPath( *AIR )
  *TAIR.AdvImgReq = *AIR
  ProcedureReturn *TAIR\SelectedPath
EndProcedure

Procedure.l AdvImgReq_GetLastActionMode()
  ProcedureReturn AdvImgReq_LastActionMode.l
EndProcedure

Procedure.s AdvImgReq_GetLastSelectedFiles()
  ProcedureReturn AdvImgReq_LastSelectedFiles.s
EndProcedure

Procedure.s AdvImgReq_GetLastSelectedPath()
  ProcedureReturn AdvImgReq_LastSelectedPath.s
EndProcedure



Procedure.s AdvImgReq_NextSelectedFile()
  StopRead.b = 0
  InSpaceMode.b = 0
  IgnoreMode.b = 0
  ReturnBack.s = ""
  While AdvImgReq_ReadSelStr_Pos < AdvImgReq_ReadSelStr_Len + 1 And StopRead.b = 0
    ReadChar.s = Mid(AdvImgReq_ReadSelString, AdvImgReq_ReadSelStr_Pos, 1)
    If ReadChar.s = " "
      If IgnoreMode.b = 0
        InSpaceMode.b = 1
      Else
        ReturnBack = ReturnBack + ReadChar.s
      EndIf
    Else
      If InSpaceMode.b = 1
        InSpaceMode.b = 0
        AdvImgReq_ReadSelStr_Pos = AdvImgReq_ReadSelStr_Pos - 1
        StopRead.b = 1
      Else
        If ReadChar.s = Chr(34)
          If IgnoreMode.b = 0
            IgnoreMode.b = 1
          Else
            IgnoreMode.b = 0
          EndIf
        Else
          ReturnBack = ReturnBack + ReadChar.s
        EndIf
      EndIf
    EndIf
    
    AdvImgReq_ReadSelStr_Pos = AdvImgReq_ReadSelStr_Pos + 1
  Wend
  ProcedureReturn ReturnBack.s
EndProcedure

Procedure.s AdvImgReq_ReadSelectedFiles( InputStr.s )
  AdvImgReq_ReadSelString.s = InputStr.s
  AdvImgReq_ReadSelStr_Len.l = Len(InputStr.s)
  AdvImgReq_ReadSelStr_Pos.l = 1
  If FindString(InputStr.s, Chr(34), 0)
    ProcedureReturn AdvImgReq_NextSelectedFile()
  Else
    AdvImgReq_ReadSelStr_Pos.l = AdvImgReq_ReadSelStr_Len.l + 1
    ProcedureReturn InputStr.s
  EndIf
EndProcedure

Procedure AdvImageFileRequester_BeginPosition(x, y)
  AdvImgReq_BeginPosX = x
  AdvImgReq_BeginPosY = y
EndProcedure

Procedure AdvImageFileRequester_BeginSize(x, y)
  AdvImgReq_BeginSizeX = x
  AdvImgReq_BeginSizeY = y
EndProcedure

Procedure.l AdvImageFileRunRequester(Title.s, StdFile.s, Pattern.s, PatternPosition.l, flags.l = #AdvImgReq_Open)
  *AIR.AdvImgReq = AllocateMemory(SizeOf(AdvImgReq))
  *AIR\Title.s = Title.s
  *AIR\StdFile.s = StdFile.s
  *AIR\Pattern.s = Pattern.s
  *AIR\PatternPosition.l = PatternPosition.l
  *AIR\flags.l = flags.l
  
  AdvImgReq_Init( *AIR )
  
  While( AdvImgReq_IsRun(*AIR) = 1 )
    If AdvImgReq_OpenedRequesters.l > 0
      Event = WaitWindowEvent(10) ; This line waits until an event is received from Windows
      WindowID = EventWindow() ; The Window where the event is generated, can be used in the gadget procedures
      GadgetID = EventGadget() ; Is it a gadget event?
      EventType = EventType() ; The event type
      MenuEvent = EventMenu() ; Menu event
      
      If AdvImgReq_IsRun(*AIR) = 1
        AdvImgReq_Update( *AIR, Event, WindowID, GadgetID, EventType, MenuEvent )
        AdvImgReq_UpdatePreviewArea( *AIR )
      EndIf
    EndIf
    ;Debug *AIR\Thread_OpenImages_Mode
  Wend
  
  AdvImgReq_Close( *AIR )
   
  ProcedureReturn( *AIR )
EndProcedure

Procedure.l AdvImageFileRunRequester_Multi(Title.s, StdFile.s, Pattern.s, PatternPosition.l, flags.l = #AdvImgReq_Open)
  *AIR.AdvImgReq = AllocateMemory(SizeOf(AdvImgReq))
  *AIR\Title.s = Title.s
  *AIR\StdFile.s = StdFile.s
  *AIR\Pattern.s = Pattern.s
  *AIR\PatternPosition.l = PatternPosition.l
  *AIR\flags.l = flags.l
  
  
  *AIRB.AdvImgReq = AllocateMemory(SizeOf(AdvImgReq))
  *AIRB\Title.s = Title.s
  *AIRB\StdFile.s = StdFile.s
  *AIRB\Pattern.s = Pattern.s
  *AIRB\PatternPosition.l = PatternPosition.l
  *AIRB\flags.l = flags.l
  
  
  AdvImgReq_Init( *AIR )
  AdvImgReq_Init( *AIRB )
  
  While( AdvImgReq_IsRun(*AIR) = 1 Or AdvImgReq_IsRun(*AIRB) = 1 )
    Event = WaitWindowEvent(10) ; This line waits until an event is received from Windows
    WindowID = EventWindow() ; The Window where the event is generated, can be used in the gadget procedures
    GadgetID = EventGadget() ; Is it a gadget event?
    EventType = EventType() ; The event type
    MenuEvent = EventMenu() ; Menu event
    
    If AdvImgReq_IsRun(*AIR) = 1
      AdvImgReq_Update( *AIR, Event, WindowID, GadgetID, EventType, MenuEvent )
      AdvImgReq_UpdatePreviewArea( *AIR )
    EndIf
    
    If AdvImgReq_IsRun(*AIRB) = 1
      AdvImgReq_Update( *AIRB, Event, WindowID, GadgetID, EventType, MenuEvent )
      AdvImgReq_UpdatePreviewArea( *AIRB )
    EndIf
    ;Debug *AIR\Thread_OpenImages_Mode
  Wend
  
  AdvImgReq_Close( *AIR )
  AdvImgReq_Close( *AIRB )
  
  ProcedureReturn( *AIR )
EndProcedure


Procedure.s AdvImageFileRequester(Title.s, StdFile.s, Pattern.s, PatternPosition.l, flags.l = #AdvImgReq_Open)
  *AIR.AdvImgReq = AdvImageFileRunRequester( Title.s, StdFile.s, Pattern.s, PatternPosition.l, flags.l )
  
  If AdvImgReq_GetActionMode( *AIR ) = #AdvImgReq_Action_Ok
    Debug "ACTION: #AdvImgReq_Action_Ok = Ok"
    ProcedureReturn *AIR\SelectedFiles.s
  ElseIf AdvImgReq_GetActionMode( *AIR ) = #AdvImgReq_Action_Abort
    Debug "ACTION: #AdvImgReq_Action_Abort = Abort"
    ProcedureReturn ""
  EndIf
  
  ProcedureReturn *AIR\SelectedFiles.s
EndProcedure
Zuletzt geändert von ShadowTurtle am 27.07.2007 23:24, insgesamt 1-mal geändert.
Benutzeravatar
legion
Beiträge: 467
Registriert: 08.10.2006 18:04
Computerausstattung: Intel Core i5-6500 @ 4x 3.6GHz mit Windows 10 Pro, Intel Core-i7 mit Ubuntu 18.04 bionic, x86_64 Linux 4.18.0-16-generic, Microsoft Surface Pro - Windows 10 Pro
Wohnort: Wien
Kontaktdaten:

Beitrag von legion »

Funktioniert bei mir nicht (VISTA, PB4.10) !
Keine Fehlermeldung, doch die Vorschaubilder werden nicht angezeigt.
Nur schwarzer Rand mit Dateinamen.

Lg. Legion
PB 5.71 LTS Windows 10 Pro & Ubuntu 18.04.2 LTS & Linux Mint 19.3
-----------------------------------------------------
Alles ist, wie man glaubt, dass es ist!
ShadowTurtle
Beiträge: 114
Registriert: 11.09.2004 07:58
Wohnort: Mannheim
Kontaktdaten:

Beitrag von ShadowTurtle »

Das ist doch Gut. Das teil hängt sich nicht auf wenn der Zugriff auf eine Datei nicht gewährt wird. Standardmäßig sind bei Windows Vista generell die Dateizugriffsrechten "Fremdartiger" Programme äußerst eingeschränkt.

Es kann aber auch sein das Du vergessen hast die "Plugins" zu Aktivieren; falls Du dein eigenes Beispiel geschrieben haben solltest. Ich glaube aber eher ersteres (siehe oben) bzgl. Win Vista.

Code: Alles auswählen

UseJPEGImageDecoder()
UsePNGImageDecoder()
UseTIFFImageDecoder()
UseTGAImageDecoder()
Benutzeravatar
legion
Beiträge: 467
Registriert: 08.10.2006 18:04
Computerausstattung: Intel Core i5-6500 @ 4x 3.6GHz mit Windows 10 Pro, Intel Core-i7 mit Ubuntu 18.04 bionic, x86_64 Linux 4.18.0-16-generic, Microsoft Surface Pro - Windows 10 Pro
Wohnort: Wien
Kontaktdaten:

Beitrag von legion »

Ja, du hattest recht ! :D
Wenn man dein Progi im Administrator-Modus ausführt
funktioniert es einwandfrei !

Nicht schlecht !
Gute Arbeit !

Lg. Legion
PB 5.71 LTS Windows 10 Pro & Ubuntu 18.04.2 LTS & Linux Mint 19.3
-----------------------------------------------------
Alles ist, wie man glaubt, dass es ist!
Jilocasin
Beiträge: 665
Registriert: 13.05.2006 16:04
Kontaktdaten:

Beitrag von Jilocasin »

Zwei Worte....

Ur geil :shock:
Bild
ShadowTurtle
Beiträge: 114
Registriert: 11.09.2004 07:58
Wohnort: Mannheim
Kontaktdaten:

Beitrag von ShadowTurtle »

Ein kleines Bugfix:

In der Prozedur AdvImgReq_IsRun muss beim letzten ProcedureReturn eine 0 statt einer 1 stehen, da sonst nie der richtige Wert zurück geliefert wird.

Obiger Quellcode ist seit Heute bereits bereinigt.
ShadowTurtle
Beiträge: 114
Registriert: 11.09.2004 07:58
Wohnort: Mannheim
Kontaktdaten:

Beitrag von ShadowTurtle »

Update zum Sonntag, 12. August 2007:

Es gibt eine kleine Anleitung zu einer Portierung auf Linux. Siehe erstes Posting.
Antworten