Seite 4 von 9

Re: SpiderBasic Library - Liste neuer Funktionen

Verfasst: 16.10.2018 10:19
von RSBasic
Es gibt in SpiderBasic kein MessageRequester(). Jetzt aber schon.

Requester > Nachrichten-Dialog erstellen

Code: Alles auswählen

EnableExplicit

#SB_MessageRequester_Ok = 1
#SB_MessageRequester_Cancel = 2
#SB_MessageRequester_OkCancel = 3

Procedure MessageRequester(text.s, flags = #SB_MessageRequester_Ok)
  Protected sb_messagerequester_ok = #SB_MessageRequester_Ok
  Protected sb_messagerequester_cancel = #SB_MessageRequester_Cancel
  
  Select flags
    Case #SB_MessageRequester_Ok
      ! alert(v_text);
    Case #SB_MessageRequester_OkCancel
      ! var returnvalue = confirm(v_text);
      ! if (returnvalue == true) { 
      !   return v_sb_messagerequester_ok;
      ! } else {
      !   return v_sb_messagerequester_cancel;
      ! }
  EndSelect
  
EndProcedure

;================================================== Beispielcode ==================================================

Define Result

If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  
  MessageRequester("Hallo Freunde")
  Result = MessageRequester("Hallo Freunde?", #SB_MessageRequester_OkCancel)
  If Result = #SB_MessageRequester_Ok
    Debug "Ok"
  ElseIf Result = #SB_MessageRequester_Cancel
    Debug "Cancel"
  EndIf
  
EndIf

Re: SpiderBasic Library - Liste neuer Funktionen

Verfasst: 16.10.2018 10:20
von RSBasic
Es gibt in SpiderBasic kein InputRequester(). Jetzt aber schon.

Requester > Eingabe-Dialog erstellen

Code: Alles auswählen

EnableExplicit

Procedure.s InputRequester(message.s, standardtext.s)
  ! var returnvalue = prompt(v_message, v_standardtext);
  ! if (returnvalue) { 
  !   return returnvalue;
  ! } else {
  !   return "";
  ! }
  
EndProcedure

;================================================== Beispielcode ==================================================

If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  
  Debug InputRequester("Hallo Freunde", "Standardtext")
  
EndIf

Re: SpiderBasic Library - Liste neuer Funktionen

Verfasst: 16.10.2018 10:39
von Kiffi
dige hat geschrieben:Edit: Hast du noch eine Idee, wie man den Text, der bspw. in einem TextGadget angezeigt wird, auswählbar machen kann (zum kopieren usw.)?

Code: Alles auswählen

! $(".spiderwindow").removeClass("sbNoSelect");
... gilt dann allerdings für alle Gadgets innerhalb aller Fenster.

Grüße ... Peter

Re: SpiderBasic Library - Liste neuer Funktionen

Verfasst: 16.10.2018 10:42
von RSBasic
Kiffi war schneller. Ich kann ja gerne eine Funktion bauen, damit man es je Gadget einstellen kann.

Re: SpiderBasic Library - Liste neuer Funktionen

Verfasst: 16.10.2018 10:57
von RSBasic
Gadget > TextGadget > Textmarkierung aktivieren oder deaktivieren
Gadget > ContainerGadget > Textmarkierung für alle Unter-Gadgets aktivieren oder deaktivieren
Gadget > FrameGadget > Textmarkierung aktivieren oder deaktivieren
Gadget > OptionGadget > Textmarkierung aktivieren oder deaktivieren
Gadget > CheckBoxGadget > Textmarkierung aktivieren oder deaktivieren
Gadget > HyperLinkGadget > Textmarkierung aktivieren oder deaktivieren
Gadget > ScrollAreaGadget > Textmarkierung für alle Unter-Gadgets aktivieren oder deaktivieren
Gadget > WebGadget > Textmarkierung aktivieren oder deaktivieren

Code: Alles auswählen

EnableExplicit

Procedure DisableGadgetTextSelection(gadget, state)
  Protected styles.s
  Protected id.s
 
  ;Falls nicht existiert, dann <style type="text/css" id="SBCustomStyles"></style> im Head erstellen, ohne Inline-Styles verwenden zu müssen
  ! if (!document.getElementById('SBCustomStyles')) {
  !   var StyleElement = document.createElement('style');
  !   StyleElement.type = 'text/css';
  !   StyleElement.id = 'SBCustomStyles';
  !   var HeadElement = document.getElementsByTagName('head')[0];
  !   HeadElement.appendChild(StyleElement);
  ! }
 
  ;Falls nicht existiert, dann eine ID im Hauptelement erstellen, um später per CSS besser darauf zugreifen zu können
  ! var GadgetElement = $(spider_GadgetID(v_gadget).div);
  ! if (GadgetElement.attr("id")) {
  !   v_id = GadgetElement.attr("id");
  ! } else {
  !   GadgetElement.attr("id", "SB_Gadget_" + v_gadget);
  !   v_id = GadgetElement.attr("id");
  ! }
  
  If state
    styles = "#" + id + " { -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; }"
  Else
    styles = "#" + id + " { -webkit-touch-callout: text; -webkit-user-select: text; -khtml-user-select: text; -moz-user-select: text; -ms-user-select: text; user-select: text; }"
  EndIf
  
  ;Styles hinzufügen
  ! document.getElementById("SBCustomStyles").appendChild(document.createTextNode( v_styles ));
 
EndProcedure

;================================================== Beispielcode ==================================================

If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_ScreenCentered)
  TextGadget(1, 10, 10, 100, 20, "Hello World", 0)
  
  DisableGadgetTextSelection(1, 0)
  
EndIf

Re: SpiderBasic Library - Liste neuer Funktionen

Verfasst: 16.10.2018 14:07
von RSBasic
In SpiderBasic kann man keine StatusBar erstellen. Jetzt schon (CreateStatusBar(), AddStatusBarField(), StatusBarText(), FreeStatusBar(), IsStatusBar(), StatusBarHeight(), StatusBarID()):

StatusBar > StatusBar erstellen

Code: Alles auswählen

EnableExplicit

#SB_StatusBar_BorderLess = 1
#SB_StatusBar_Center = 2
#SB_StatusBar_Right = 4

Procedure CreateStatusBar(windowid)
  Protected id.s
  
  ;Falls nicht existiert, dann <style type="text/css" id="SBCustomStyles"></style> im Head erstellen, ohne Inline-Styles verwenden zu müssen
  ! if (!document.getElementById('SBCustomStyles')) {
  !   var StyleElement = document.createElement('style');
  !   StyleElement.type = 'text/css';
  !   StyleElement.id = 'SBCustomStyles';
  !   var HeadElement = document.getElementsByTagName('head')[0];
  !   HeadElement.appendChild(StyleElement);
  ! }
  
  ;Falls nicht existiert, dann CSS-Klassen mit den Styles erstellen
  ! if ($('#SBCustomStyles')[0].innerHTML.indexOf('.spiderwindow-statusbar') == -1) {
  !   document.getElementById("SBCustomStyles").appendChild(document.createTextNode( ".spiderwindow-statusbar { position: absolute; height: 22px; bottom: 0; width: 100%; border-top: 1px solid #D7D7D7; line-height: 22px; }" ));
  !   document.getElementById("SBCustomStyles").appendChild(document.createTextNode( ".spiderwindow-statusbar .StatusBarField { display: inline-block; padding: 0 5px; border-right: 1px solid #D7D7D7; }" ));
  !   document.getElementById("SBCustomStyles").appendChild(document.createTextNode( ".spiderwindow-statusbar .StatusBarField:last-child { border: none; }" ));
  ! }
  
  ! $(v_windowid.statusBar).addClass("spiderwindow-statusbar");
  ! return 1;
  
EndProcedure

Procedure AddStatusBarField(windowid, width)
  Protected styles.s
  Protected id.s
  
  ;Falls nicht existiert, dann <style type="text/css" id="SBCustomStyles"></style> im Head erstellen, ohne Inline-Styles verwenden zu müssen
  ! if (!document.getElementById('SBCustomStyles')) {
  !   var StyleElement = document.createElement('style');
  !   StyleElement.type = 'text/css';
  !   StyleElement.id = 'SBCustomStyles';
  !   var HeadElement = document.getElementsByTagName('head')[0];
  !   HeadElement.appendChild(StyleElement);
  ! }
  
  ! var StatusBarField = document.createElement('div');
  ! StatusBarField.className = 'StatusBarField StatusBarField' + $(v_windowid.statusBar).children().length;
  ! StatusBarField.style.cssText = 'width: ' + v_width + 'px';
  
  ! $(v_windowid.statusBar).append(StatusBarField);
  ! return 1;
  
EndProcedure

Procedure StatusBarText(windowid, field, text.s, flags = 0)
  Protected styles.s
  Protected id.s
  Protected sb_statusbar_borderless = #SB_StatusBar_BorderLess
  Protected sb_statusbar_center = #SB_StatusBar_Center
  Protected sb_statusbar_right = #SB_StatusBar_Right

  ;Falls nicht existiert, dann <style type="text/css" id="SBCustomStyles"></style> im Head erstellen, ohne Inline-Styles verwenden zu müssen
  ! if (!document.getElementById('SBCustomStyles')) {
  !   var StyleElement = document.createElement('style');
  !   StyleElement.type = 'text/css';
  !   StyleElement.id = 'SBCustomStyles';
  !   var HeadElement = document.getElementsByTagName('head')[0];
  !   HeadElement.appendChild(StyleElement);
  ! }
  
  ! if ((v_flags & v_sb_statusbar_borderless) == v_sb_statusbar_borderless) {
  !   $($(v_windowid.statusBar).find(".StatusBarField" + v_field)[0]).css("border", "none");
  ! }
  ! if ((v_flags & v_sb_statusbar_center) == v_sb_statusbar_center) {
  !   $($(v_windowid.statusBar).find(".StatusBarField" + v_field)[0]).css("text-align", "center");
  ! }
  ! if ((v_flags & v_sb_statusbar_right) == v_sb_statusbar_right) {
  !   $($(v_windowid.statusBar).find(".StatusBarField" + v_field)[0]).css("text-align", "right");
  ! }
  
  ! $(v_windowid.statusBar).find(".StatusBarField" + v_field)[0].innerHTML = v_text;
  ! return 1;
  
EndProcedure

Procedure FreeStatusBar(windowid)
  ! $(v_windowid.statusBar).children().remove();
  ! $(v_windowid.statusBar).removeAttr("class");
  ! return 1;
  
EndProcedure

Procedure IsStatusBar(windowid)
  ! if ($(v_windowid.statusBar).hasClass("spiderwindow-statusbar")) {;
  !   return 1;
  ! } else {
  !   return 0;
  ! }
  
EndProcedure

Procedure StatusBarHeight(windowid)
  ! return $(v_windowid.statusBar).height();
  
EndProcedure

Procedure StatusBarID(windowid)
  ! if ($(v_windowid.statusBar).hasClass("spiderwindow-statusbar")) {;
  !   return v_windowid.statusBar;
  ! } else {
  !   return 0;
  ! }
  
EndProcedure

;================================================== Beispielcode ==================================================

If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_SizeGadget)
  If CreateMenu(1, WindowID(0))
    MenuTitle("File")
    MenuItem(1, "Hello")
    MenuTitle("Edit")
    MenuItem(2, "Hello")
  EndIf
  
  TextGadget(1, 10, 10, 480, 20, "This window now has a status bar. See below :-)", 0)
  
  If CreateStatusBar(WindowID(0))
    AddStatusBarField(WindowID(0), 100)
    AddStatusBarField(WindowID(0), 100)
    AddStatusBarField(WindowID(0), 100)
    AddStatusBarField(WindowID(0), 100)
    
    StatusBarText(WindowID(0), 0, "Hello")
    StatusBarText(WindowID(0), 1, "PureBasic", #SB_StatusBar_Center)
    StatusBarText(WindowID(0), 2, "Friends", #SB_StatusBar_Right)
    StatusBarText(WindowID(0), 3, ":-)")
    
  EndIf
  
EndIf

Re: SpiderBasic Library - Liste neuer Funktionen

Verfasst: 16.10.2018 14:16
von ¯\_(ツ)_/¯
1. TOP, danke!!!
2. Du hast wieder einen Lauf!
3. Warum arbeitest du nicht im SpiderBasic Team, dann würde die Entwicklung von SpiderBasic viiiiiiiiiel schneller gehen.

Re: SpiderBasic Library - Liste neuer Funktionen

Verfasst: 16.10.2018 22:26
von RSBasic
In SpiderBasic gibt es kein ShortcutGadget. Jetzt schon:

ShortcutGadget > ShortcutGadget erstellen

Code: Alles auswählen

EnableExplicit

Procedure ShortcutGadget(gadget, x, y, width, height)
  Protected id.s
  
  StringGadget(gadget, x, y, width, height, "", #PB_String_ReadOnly)
  
  ;Falls nicht existiert, dann <style type="text/css" id="SBCustomStyles"></style> im Head erstellen, ohne Inline-Styles verwenden zu müssen
  ! if (!document.getElementById('SBCustomStyles')) {
  !   var StyleElement = document.createElement('style');
  !   StyleElement.type = 'text/css';
  !   StyleElement.id = 'SBCustomStyles';
  !   var HeadElement = document.getElementsByTagName('head')[0];
  !   HeadElement.appendChild(StyleElement);
  ! }
 
  ;Falls nicht existiert, dann eine ID im Hauptelement erstellen, um später per CSS besser darauf zugreifen zu können
  ! var GadgetElement = $(spider_GadgetID(v_gadget).div);
  ! if (GadgetElement.attr("id")) {
  !   v_id = GadgetElement.attr("id");
  ! } else {
  !   GadgetElement.attr("id", "SB_Gadget_" + v_gadget);
  !   v_id = GadgetElement.attr("id");
  ! }
  
  ! var dijitInputInner = GadgetElement.find(".dijitInputInner");
  ! var IsPressing_Control = false;
  ! var IsPressing_Shift = false;
  ! var IsPressing_Alt = false;
  ! var IsPressing_NormalKey = false;
  ! dijitInputInner.keydown(function(e) {
  !   var CurrentKey = e.key.toUpperCase();
  !   if (!IsPressing_Control && !IsPressing_Shift && !IsPressing_Alt && !IsPressing_NormalKey) {
  !     dijitInputInner.val("");
  !   }
  !   switch (CurrentKey) {
  !     case 'CONTROL':
  !       if (!IsPressing_Control) {
  !         dijitInputInner.val(dijitInputInner.val() + CurrentKey + " + ");
  !       }
  !       IsPressing_Control = true;
  !       break;
  !     case 'SHIFT':
  !       if (!IsPressing_Shift) {
  !         dijitInputInner.val(dijitInputInner.val() + CurrentKey + " + ");
  !       }
  !       IsPressing_Shift = true;
  !       break;
  !     case 'ALT':
  !       if (!IsPressing_Alt) {
  !         dijitInputInner.val(dijitInputInner.val() + CurrentKey + " + ");
  !       }
  !       IsPressing_Alt = true;
  !       break;
  !     default:
  !       IsPressing_NormalKey = true;
  !       if (!IsPressing_Control && !IsPressing_Shift && !IsPressing_Alt) {
  !         dijitInputInner.val(CurrentKey);
  !       } else {  
  !         dijitInputInner.val(dijitInputInner.val() + CurrentKey);
  !       }
  !   };
  ! });
  ! dijitInputInner.keyup(function(e) {
  !   var CurrentKey = e.key.toUpperCase();
  !   if (!IsPressing_NormalKey && (IsPressing_Control || IsPressing_Shift || IsPressing_Alt)) {
  !     dijitInputInner.val("");
  !   }
  !   IsPressing_Control = false;
  !   IsPressing_Shift = false;
  !   IsPressing_Alt = false;
  !   IsPressing_NormalKey = false;
  ! });
  
EndProcedure


;================================================== Beispielcode ==================================================

Procedure GadgetEvent()
  Select EventGadget()
    Case 2
      Debug GetGadgetText(1)
  EndSelect
 
EndProcedure

If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_ScreenCentered)
  ShortcutGadget(1, 10, 10, 200, 20)
  ButtonGadget(2, 220, 10, 100, 20, "Get pressed key", 0)
  
  BindEvent(#PB_Event_Gadget, @GadgetEvent())
  
EndIf

Re: SpiderBasic Library - Liste neuer Funktionen

Verfasst: 17.10.2018 19:04
von RSBasic
Die Funktion Gadget in 3D drehen habe ich erweitert. Man kann nun auch optional ein Objekt perspektivisch drehen.

Re: SpiderBasic Library - Liste neuer Funktionen

Verfasst: 18.10.2018 12:07
von RSBasic
In SpiderBasic gibt es kein ScrollBarGadget. Jetzt schon:

ScrollBarGadget > ScrollBarGadget erstellen

Code: Alles auswählen

EnableExplicit

Procedure ScrollBarGadgetEx(windowid, gadget, x, y, width, height, max, flags)
  Protected styles.s
  Protected id.s
  
  ;Falls nicht existiert, dann <style type="text/css" id="SBCustomStyles"></style> im Head erstellen, ohne Inline-Styles verwenden zu müssen
  ! if (!document.getElementById('SBCustomStyles')) {
  !   var StyleElement = document.createElement('style');
  !   StyleElement.type = 'text/css';
  !   StyleElement.id = 'SBCustomStyles';
  !   var HeadElement = document.getElementsByTagName('head')[0];
  !   HeadElement.appendChild(StyleElement);
  ! }
  
  ! var ScrollBarGadget = document.createElement('div');
  ! ScrollBarGadget.id = "SB_Gadget_" + v_gadget;
  If flags = #PB_ScrollBar_Vertical
    ! ScrollBarGadget.className = "SB_ScrollBarGadget SB_ScrollBarGadget_Vertical";
    ! ScrollBarGadget.style.cssText = "left: " + v_x + "px; top: " + v_y + "px; width: auto; height: " + v_height + "px; overflow-y: scroll;";
  Else
    ! ScrollBarGadget.className = "SB_ScrollBarGadget SB_ScrollBarGadget_Horizontal";
    ! ScrollBarGadget.style.cssText = "left: " + v_x + "px; top: " + v_y + "px; width: " + v_width + "px; height: auto; overflow-x: scroll;";
  EndIf
  ! v_windowid.content.appendChild(ScrollBarGadget);
  
  ! var ScrollBarGadget_Inner = document.createElement('div');
  ! ScrollBarGadget_Inner.className = "SB_ScrollBarGadget_Inner";
  If flags = #PB_ScrollBar_Vertical
    ! ScrollBarGadget_Inner.style.cssText = "width: 1px; height: " + v_max + "px;";
  Else
    ! ScrollBarGadget_Inner.style.cssText = "width: " + v_max + "px; height: 1px;";
  EndIf
  ! ScrollBarGadget.appendChild(ScrollBarGadget_Inner);
  
  styles = ".SB_ScrollBarGadget { position: absolute; } .SB_ScrollBarGadget_Inner {} .SB_ScrollBarGadget_Vertical {} .SB_ScrollBarGadget_Horizontal {}"
  
  ;Styles hinzufügen
  ! document.getElementById("SBCustomStyles").appendChild(document.createTextNode( v_styles ));
  
EndProcedure

Macro ScrollBarGadget(windowid, gadget, x, y, width, height, max, flags = 0)
  ScrollBarGadgetEx(windowid, gadget, x, y, width, height, max, flags)
EndMacro

Procedure GetGadgetStateEx(gadget)
  Protected isownscrollbargadget.s
 
  ! var GadgetElement = $("#SB_Gadget_" + v_gadget);
  ! v_isownscrollbargadget = GadgetElement.hasClass("SB_ScrollBarGadget");
  ! var IsVertical = GadgetElement.hasClass("SB_ScrollBarGadget_Vertical");
  If isownscrollbargadget <> ""
    ! if (IsVertical) {;
    !   return GadgetElement.scrollTop();
    ! } else {;
    !   return GadgetElement.scrollLeft();
    ! };
  Else
    ProcedureReturn GetGadgetState(gadget)
  EndIf
 
EndProcedure

Macro GetGadgetState(gadget)
  GetGadgetStateEx(gadget)
EndMacro

Procedure SetGadgetStateEx(gadget, state)
  Protected isownscrollbargadget.s
 
  ! var GadgetElement = $("#SB_Gadget_" + v_gadget);
  ! v_isownscrollbargadget = GadgetElement.hasClass("SB_ScrollBarGadget");
  ! var IsVertical = GadgetElement.hasClass("SB_ScrollBarGadget_Vertical");
  If isownscrollbargadget <> ""
    ! if (IsVertical) {;
    !   GadgetElement.scrollTop(v_state);
    ! } else {;
    !   GadgetElement.scrollLeft(v_state);
    ! };
  Else
    SetGadgetState(gadget, state)
  EndIf
 
EndProcedure

Macro SetGadgetState(gadget, state)
  SetGadgetStateEx(gadget, state)
EndMacro

Procedure GetGadgetAttributeEx(gadget, attribute)
  Protected isownscrollbargadget.s
 
  ! var GadgetElement = $("#SB_Gadget_" + v_gadget);
  ! v_isownscrollbargadget = GadgetElement.hasClass("SB_ScrollBarGadget");
  ! var IsVertical = GadgetElement.hasClass("SB_ScrollBarGadget_Vertical");
  If isownscrollbargadget <> ""
    ! if (IsVertical) {;
    !   return GadgetElement.find(".SB_ScrollBarGadget_Inner").height();
    ! } else {;
    !   return GadgetElement.find(".SB_ScrollBarGadget_Inner").width();
    ! };
  Else
    ProcedureReturn GetGadgetAttribute(gadget, attribute)
  EndIf
 
EndProcedure

Macro GetGadgetAttribute(gadget, attribute)
  GetGadgetAttributeEx(gadget, attribute)
EndMacro

Procedure SetGadgetAttributeEx(gadget, attribute, value)
  Protected isownscrollbargadget.s
 
  ! var GadgetElement = $("#SB_Gadget_" + v_gadget);
  ! v_isownscrollbargadget = GadgetElement.hasClass("SB_ScrollBarGadget");
  ! var IsVertical = GadgetElement.hasClass("SB_ScrollBarGadget_Vertical");
  If isownscrollbargadget <> ""
    ! if (IsVertical) {;
    !   GadgetElement.find(".SB_ScrollBarGadget_Inner").height(v_value);
    ! } else {;
    !   GadgetElement.find(".SB_ScrollBarGadget_Inner").width(v_value);
    ! };
  Else
    SetGadgetAttribute(gadget, attribute, value)
  EndIf
 
EndProcedure

Macro SetGadgetAttribute(gadget, attribute, value)
  SetGadgetAttributeEx(gadget, attribute, value)
EndMacro

;================================================== Beispielcode ==================================================

Procedure TimerEvents()
  Select EventTimer()
    Case 1
      SetGadgetText(3, "ScrollBarGadget1-Scrollposition: " + Str(GetGadgetState(1)))
      SetGadgetText(4, "ScrollBarGadget2-Scrollposition: " + Str(GetGadgetState(2)))
     
  EndSelect
EndProcedure

If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_ScreenCentered)
  ScrollBarGadget(WindowID(0), 1, 10, 10, 480, 0, 500)
  ScrollBarGadget(WindowID(0), 2, 10, 40, 0, 300, 2000, #PB_ScrollBar_Vertical)
  TextGadget(3, 50, 50, 400, 20, "", 0)
  TextGadget(4, 50, 80, 400, 20, "", 0)
  
  
  SetGadgetAttribute(1, #PB_ScrollBar_Maximum, 1000)
  Debug GetGadgetAttribute(1, #PB_ScrollBar_Maximum)
  SetGadgetState(1, 100)
  SetGadgetState(2, 500)
  
  AddWindowTimer(0, 1, 100)
  BindEvent(#PB_Event_Timer, @TimerEvents())
  
EndIf