German Elektroschaltplan zeichen

Bobbes

Active Member
Licensed User
Longtime User
Hi Klaus,
ich komme ja garnicht nach.
ich konnte irgendwie mit dem PC auf den PPC zugreifen. jetzt habe ich den PPC resetet und bin jetzt wieder am installieren.

Ach ja Warum hast du denn Landscape Modus raus genommen ?

Nochmal zu dem Geräten in Lila, ich glaube das geht bei mir irgenwie nicht. Wenn das Gerät beim selktieren eine andere Farbe bekommt ist das bestimmt nicht schlecht, es wird auch übersichtlicher. Müssen wir dann nicht jedes Symbol doppelt haben?

Der Fehler in Zeile 304 ImageList1.Add(ArrayList1.Item(t)) besteht noch wenn ich ein Schaltzeichen aus dem Ordner Schaltzeichen entnehme oder hinzufüge. Ich verstehe aber nicht warum ? Die Variable ALCount müßte sich doch mit der Anzahl der Bilder im Ordner Schaltzeichen ändern, oder?

Ich habe den Breakpoint mal ein gesetzt, in der FOR NEXT Schleife und da zählt er bis 97, es sind aber 147.
 
Last edited:

klaus

Expert
Licensed User
Longtime User
Hi Bernd,

In der frmlib_Resize Routine hatte Ich mal Probleme und hatte die Codelines kommentiert. Um den Landscape Modus wieder einzuführen müssen wir jetzt viel mehr Controlwerte ändern. Werde es nachholen.

Mit den Geräten in lila, Ich verstehe auch noch nicht warum das bei Dir nicht funktioniert ? Wir brauchen da bloss ein Bild pro Element, der Farbunterschied wird mit Transparent false oder true geregelt. Das Originalbild muss einen lila Hintergrund haben (oder auch eine andere Farbe, muss aber für Alle die gleiche sein) wie die jetzigen Gerätebilder Bitmaps. Ich arbeite mit Bitmaps, kommt mir einfacher vor und in der EXE Datei werden die Bilder, egal welches Format, sowie so in Bitmaps gespeichert. In diesem Bereich müssen wir sowieso etwas anderes einführen, den wenn Du ein neues Symbol in der Datei einfügst, oder löschst, wird die Reihenfolge geändert und ältere CAD Dateien zeigen dann falsche Symbole an !

Das Problem in Zeile 304 verstehe Ich auch noch nicht, denn Ich hatte 5 neue "i" Bilder eingefügt und bei mir hat es funktioniert. Ein vorläufiger Unterschied zwischen Geräten und andern Bildern ist dass die Geräte Bilder Bitmaps sind und keine JPG aber die ALCount Variable sollte richtig sein, was bei mir auch der Fall ist.
Was für eine Fehlermeldung bekommst Du eigentlich ?

Hast du wirklich nur die Dateien von CadElec2_5.zip in einen neuen Ordner geladen und von dort das Programm geladen ? In die ZIP Dateien gebe Ich alles rein was man braucht um Vermischungen zwischen Versionen zu vermeiden.

Eine Frage an unsere anderen 'Kollegen' im deutschen Forum:
Ist da noch jemand der auch an diesem Programm interessiert ist ? Oder ist es nur generelle Interesse ? Denn wir sind ja nicht die zwei einzigen die unsere Posts lesen.

Grüsse.
 

specci48

Well-Known Member
Licensed User
Longtime User
Ist da noch jemand der auch an diesem Programm interessiert ist ? Oder ist es nur generelle Interesse ? Denn wir sind ja nicht die zwei einzigen die unsere Posts lesen.

Hmmm... bin ich interessiert oder habe ich nur Interesse
Sagen wir es mal so: Ich werde das Programm sicherlich niemals konkret verwenden, sondern verfolge so gut es eben geht eure Umsetzung und Programmierung mit Basic4ppc.
Allerdings entwickelt Ihr beiden dass Programm so schnell, dass ich nicht hinterher komme. Es stecken bereits so viele Ideen darin, die kann ich mir beim besten Willen nicht alle merken. :sign0188:


Viele Grüße
ein interessierter specci48 mit Interesse...
 

Bobbes

Active Member
Licensed User
Longtime User
Hi Klaus,
ich mache immer die ZIP-Datei in einen neuen Ordner und entpacke sie da.

Nun zu der Fehlermeldung:

ImageList1.Add(ArayList1.item(t))
Error description:
Parameter is not Valid

Also die Version 2.5 ist traumhaft. Das einzige was ich jetzt noch geändert habe ist, das DatumsFormat ist im englischen anders. Und noch eine durchlaufende Zeichnungsnummerierung wenn ich eine neue Zeichnung beginne. Also man braucht nichts zu schreiben.

Was ich jetzt noch an Ideen hätte wäre Pfade einzufügen. Senkrecht an der Seite Buchstaben A-F z.B. und oben waagrecht Nummern 1-8 , aber das ist nicht so wichtig.

Bei dem ProgressBalken ist noch ein Problem. Wenn ich Symbole hinzufüge addiert sich automatisch durch die For Next Schleife zweimal der wert von 10 dazu. Heißt also sobald ich etwas ergänzte ändert sich auch der Max.Wert des ProgressBalkens. Ich schlage vor einfach die beiden Anweisungen Progressbar.Value= Progressbar.Value+10 in der For Next Schleife zu entfernen.

Also das Programm läuft auf meinem PPC ganz gut. unten in der Ecke ist das Symbol auch lila.

Vom ScreenSize her past es auch sehr gut.

Minimieren wäre doch noch ganz schön. Aber mit der NotifyIcon.Dll hab ich so meine Schwierigkeiten. Bei mir funtz das nicht vom FullScreen in den ShowTodayScreen zu wechseln.

Habe jetzt nochmal getestet original Ordner von ZIP Datei geht, ohne den viel zitierten Fehler. Ich benenne den Original Ordner um und füge einen anderen Ordner mit dem Namen Schaltzeichen ein. Der Fehler tritt wieder auf. Ich benenne den alte funtionierenden Ordner wieder um jetzt tritt der Fehler auch bei dem Original Ordner auf.
 
Last edited:

klaus

Expert
Licensed User
Longtime User
Hallo specci48,
Gut zu lesen dass es zu mindestens Einen Interessierten gibt, wenn auch generell. Es ist klar dass das Programm doch relativ specifisch ist.
Für mich ist es eigentlich etwas ähnlich, ich werde dieses Programm auch nicht selbst konkret verwenden, denn ich bin auch kein Elektriker. Es ist für mich das erste Programm das ich mithelfe zu schreiben das Ich nicht selbst benützen werde. Das sieht man auch an den Vorschlägen von Bernd, mit konkreten Besserungen vom täglichen Gebrauch, was mir in diesem Fall fehlt. Aber mich hat das Thema gekitzelt und hab mich dann hineingebunden.

Hi Bernd,
Kannst Du mit einem Breakpoint nachvollziehen, wenn der Fehelr auftritt, welche Werte ALCount und t haben (und / oder haben sollten). Denn bei mir funktioniert es, mit zufügen, entfernen habe Ich nicht versucht.
Welche Art von Symbolen hast Du zugefügt, Gerätesymbole oder von einer anderen Art ?

An das Datumsformat habe Ich auch noch nachgedacht, und schlage vor dass wir im Configpanel das Format wählen lassen, je nach Vorlieb des Benützers.

Kannst Du Deine letzte Version posten dann kann Ich mit dieser weitermachen, landscape usw, ausser Du möchtest es selbst machen.

Die Undo Funktion habe Ich (noch) nicht im Detail angeschaut und auch nicht richtig ausprobiert, da ist bestimmt auch noch etwas zu machen, das wenige das Ich gesehen habe ist dass sie nicht mehr ganz richtig funktioniert.

Zeichnungsnummer, hast Du diese schon eingefügt ? Sollte aber auch editierbar sein im Sketchdatapanel.

Hebe gesehen dass Du dein Post ergänzt hast:
Wie meinst Du das mit Pfaden, im Setuppanel kann man einen Defaulpfad eingeben.

Das mit dem Progressbalken hatte Ich auch gemerkt, den Maximalwert einfach erhöht aber dann vergessen.

Buchstaben und Zahlen zuzufügen sollte nicht schwierig sein, müssen aber auf die ganze Grösse des Schemas erwitert werden also mehr als A-F und 1-8.

Das Problem mit dem Schaltzeichenordner werde Ich auch nachvollziehen, ich hatte im gleichen Ordner die Symbole zugefügt.

Grüsse.
 
Last edited:

Bobbes

Active Member
Licensed User
Longtime User
Hi Klaus,
habe mal ein Screenshot beigefügt.
Habe einen neuen Ordner eingefügt und hier die ZIP-Datei entpackt.
Und eine jpeg-datei eingefügt, danach gab es den Fehler den du auf dem Screenshot siehst.
Habe deine Version V2_5 mit meinen Änderungen beigefügt (Datum passend zur Sprache E = mm/dd/yy F,I,D = dd.mm.yy und bei neu anlegen einer Zeichnung steht dann da "Zeichnung 1" fortlaufend passend zur Landessprache)
 

Bobbes

Active Member
Licensed User
Longtime User
Screenshot die zweite
 

klaus

Expert
Licensed User
Longtime User
Hi Bernd,
Kannst Du den Ordner wo das Programm den Fehler erzeugt posten, um zu sehen ob es bei mir auch den Fehler erzeugt.

Ich hab nicht richtig verstanden wie das mit dem Datum funktionieren soll?
Welchen Wert hat Text(43) in den verschiedenen Sprachen?
Ein Test der gewählten Sprache würde eigentlich genügen denn beim Start des Programmes ist die gewählte Sprache bekannt, in Variable Language_I.
B4X:
  Language_I=0   ' language index
  cEnglish=0     ' language constants
  cFrench=1
  cGerman=2
  cSpanish=3
  cItalian=4
  cPortuguese=5
  cJapanese=6

Grüsse.
 

Bobbes

Active Member
Licensed User
Longtime User
Hi Klaus,
stimmt die Konstanten die hab ich auch gesehen. Habe aber in deine txt.Datei
jeweils zwei Variablen hinzugefügt und frage die dann über Text(42) und text (43) ab. version wo´s den Fehler gibt ist bei gefügt.
 

klaus

Expert
Licensed User
Longtime User
Hi Bernd,
Habe herausgefunden warum das Programm stecken bleibt.
Im Windows FileExplorer zeigst du die Bilder wahrscheinlich mit Miniaturen an. In diesem Fall generiet Windwos eine zusätzliche Datei 'Thumbs.db', die aber vom FileExplorer nicht angezeigt wird. Ich das Problem nicht weil Ich immer die Details anzeigen lasse.
Um zu vermeiden dass diese Datei erstellt wird schau hier:
Thumbs.db - eine platzfressende Datei beseitigen

Ich schaue mir die Bilder mit ACDSee an und da sieht man die Thumbs.db datei. Hatte sie auch in früheren Versionen gesehen und einfach gelöscht, dachte einfach, nützt nix und raus.

Grüsse.
 
Last edited:

Bobbes

Active Member
Licensed User
Longtime User
Hi Klaus,
das wars die Sch.... Thumbs.db Dateien, die sind mir schon immer negativ aufgefallen. Ich kann jetzt auch wieder Symbole hinzufügen. Wahrscheinlich geht das Booten auch auf dem PPC schneller.
Ich hatte die Option wo ich alle Dateien angezeigt bekomme angemakert und habe auch immer die Thumbs.db gesehen. Ich abe auch festgestellt das diese Datei auch immer sehr groß war, hab mir da aber keine Gedanken gemacht.
Leider war auch bei der Option Miniaturbilder speichern ein Häckchen und somit wurde die Thumbs.db immer größer.

Kannst du mir nochmal erklären wie du das dem Wechsel vom FullScreen zu ShowtodayScreen realisierst.

Ich habe gesehen das du die Anweisung FullScreen2(true,True) verwendest. Um diese Anweisung auf zuheben muß ich doch FullScreen2(flase,false) verwenden, oder?
Und danach müßte doch mit der Hardware.DLL der ToDayScreen und der NotifyIcon.DLL das Icon unten im PPC Screen angezeigt werden.


wie hast du das mit den ersten Symbolpanel gemacht, das transparentschalten und so. Ich würde es gerne erstmal wegschalten, weil die symbole nicht richtig dargestellt werden. Ansonsten habe ich noch die restlichen TXT-Dateien, Comboboxen und die grünhinterlegten und nicht mehr bebötigten Anweisungen gelöscht.

Das Programm läuft eigentlich super, was ich noch gerne hätte wäre das Minimieren. Ich würde das Zeichen und mein Brechnungs Programm mit dem Autostart verknüpfen uns dann beim booten gleich mit zu starten.
 
Last edited:

Bobbes

Active Member
Licensed User
Longtime User
Hi Klaus,
habe mal meine aktuelle Version begefügt.
Was mir noch aufgefallen ist, ist

Sub DrawText(j,col)
Dim xa,ya,x1,y1

xa=ImageX(j)*Grid
ya=ImageY(j)*Grid
imageBeschrift = SubString(ArrayList1.Item(j), ZeichenPathLength, StrLength(ArrayList1.Item(ImageNr))-ZeichenPathLength - 4)
brush.Color=col
x1=xa-drawer.StringWidth(ImageText(j),7)-1
If imageBeschrift = "iBeschriftVerbindungSenk" Then
y1=ya-30
Else If imageBeschrift = "iBeschriftVerbindungWaag" Then
y1=ya+10
Else If imageBeschrift <> "iBeschriftVerbindungWaag" AND imageBeschrift <> "iBeschriftVerbindungSenk" Then
y1=ya+2
End If
drawer.DrawString1(ImageText(j),7,brush.Value,x1,y1)
yredo=y1
xredo=x1
End Sub

Wenn ich einen Breakpoint setzte hat die Variable imageBeschrift einen anderen Wert als das angeklickte Symbol. Kann das mit dem Hinzufügen von neuen Symbolen sein
 

Bobbes

Active Member
Licensed User
Longtime User
Hi Klaus,
hier nochmal ein Update. Ich hab die aufsteigende Nummerierung der Beschriftung mit in die Combobox ein gefügt, sodas ich z.B. eine vergebene Symbolbezeichnung nochmal aufrufen kann.
Dann hab ich noch ein SetupCongif-Panel kreiert und die btn7 und btn8 dort eingefügt und andere Bilder verwendet. Eine Checkbox hab ich im Setup hinzugefügt, um die Beschriftungs Combobox nicht erscheinen zulassen.
Ein seperaten Beschriftungsbutton habe ich zum SetupConfigPanel eingefügt, um Extrabeschriftungen durch zuführen.
Hm Ich glaub ich auch noch probieren ob die Zusatzbeschriftungen mit gespeichert bzw. auch wieder geladen werden.
 

klaus

Expert
Licensed User
Longtime User
Hallo Bernd,
Ich melde mich 'endlich' wieder einmal, war während den letzen Tagen nicht oft zu Hause.

Deine Ergänzungen sind in der letzen Version mit drin.

Die Minimierung habe Ich so gemacht (für mich des erste mal)
NotifyIcon funtioniert bei mir nicht auf dem PPC. Habe das Programm test3.sbp von dzt ausprobiert, funktioniert auf dem Desktop aber nciht auf dem PPC (WM2003).

Anweisung FullScreen2(true,true)
1. true Menüleiste weg
2. true Titelleiste weg

FullScreen2(false,false) bringt nichts.

Wenn die Titelleiste weg ist und man die Harware.ShowTodayScreen Funktion verwended wird nur die Titelleiste vom Todayscreen angezeigt. Man muss daher erst wieder die Titelleiste anzeigen bevor man die Harware.ShowTodayScreen Funktion verwendet.

Das geschiet mit DoorLib Objekten (Code von Erel):
B4X:
  obj.SetProperty("MaximizeBox",true)
  obj.SetProperty("ControlBox",true)
  obj.SetProperty("FormBorderStyle","Sizable")
  obj.SetProperty("WindowState","Normal")
  Hardware.ShowTodayScreen
Wenn man eine Taskbar hat wird das Icon von CadElec dort angezeigt.
Wenn man in der Taskbar auf das CadElecIcon klickt kommt das CadElecFenster wieder, aber leider mit der Titelleiste.

Mit dem DoorLib Event (CadElecForm) frmMain Activated kann man wieder FullScreen2 verwenden. Bei mir funktioniert es.
B4X:
Sub evtFormActivated_NewEvent
  If CPPC= true AND ToDayScreen=1 Then
    frmlib.FullScreen2(true,true)
   ToDayScreen=0
  End If
End Sub
Das Symbolhighlighten funktioniert so:
Die Symbolbilder haben einen rosa Hintergrund.
Mit der Drawer.DrawImage1 Funktion kann man angeben ob man das Bild transparent zeichnen will oder nicht.
Mit Drawer.SetTransparentColor1(Rgb(255,0,255)) kann man die Transparentfarbe, in unserem Fall rosa, angeben.
Transparent zeichnen heisst dass alle Pixel mit der Transparentfarbe durch das Hintergrundpixel ersetzt werden, in unserem Fall weiss für die Zeichnung. Wenn wir dies auf alle Symbole erweitern wollen müssen die Symbolbildhintergründe auf rosa geändert werden.
In den Symbolpanels habe Ich die Image Controls durch ImageButtons ersetzt denn bei diesen kann man eben auch die Buttonbilder transparent zeichnen, in diesem Fall ist die Farbe des linken oberen Pixels die Transparentfarbe. Diese Möglichkeit verwende Ich ja auch mit den andern ImageButtons um anzuzeigen welcher Button aktiv ist. Das ist auch der Grund warum die Eckpunkte der Rahmen der Buttonbilder weiss sind und nicht schwarz.

Das Problem in der DrawText Routine ist behoben, war ein Fehler drin. Ich hatte für die Symbole den

SymbolIndex anstatt des Bildindexes benützt.
imageBeschrift = SubString(ArrayList1.Item(j) . . .
durch
imageBeschrift = SubString(ArrayList1.Item(ImageType(j)) . . .
ersetzt.

In der letzten Version musst du die Bilder für die zusätzlichen Buttons beifügen, die habe Ich nicht, habe einfach provisorische zugefügt. Deine Sprachtextdateien musst Du auch reinladen.
Habe die Minimize und Exit Buttons verkleinert und ein bisschen mehr an Windows angepasst, kannst es ja wieder Rückgängig machen falls es Dir nicht gefällt.

Habe eine Variable für die Beschriftungscheckbox dazugegebn und in der CadElec.ini Datei gespeichert.

Habe das ContextMenu rausgenommen und den Button btn9 auch denn das nützt ja nichts mehr mit dem neuen SetupConfigPanel.

btn12 in ToolBar_Click integriert.

Vorläufig notlfyicon Routinen entfernt, hast Du einen TaskManager. ich hatte keinen, habe aber jetzt einen, ist ganz praktisch.

In der Routine ToolBar_Click finde Ich etwas komisch.
B4X:
 Case "btn1"    ' New
    btn1.Transparent=false
    Txt=Text(33)&crlf&Text(34)&crlf&Text(35)&crlf&Text(36)
    Answ=Msgbox(Txt,Text(9),cMsgBoxYesNoCancel,cMsgBoxQuestion)
    Select Answ
    Case cYes
      NewSketch=1
      [COLOR=Red]sketchNb=0[/COLOR]
      sketchNb=SketchNb+1
Die Zeichnungnummer ist IMMER 1 denn Du bringst jedesmal die Nummer auf 0 und addierst 1.
Habe es geändert, sketchNb=SketchNb+1 ist jetzt in der btnSketchDataOK_Click Routine, denn wenn der

Benützer eine neue Zeichnung nicht bestätigt wird dieNummer auch nicht erhöht.

LoadCAD ein bisschen geändert.

Wie hast du das mit den ersten Symbolpanel gemacht, das transparentschalten und so. Ich würde es gerne erstmal wegschalten, weil die symbole nicht richtig dargestellt werden.
Was meinst Du mit 'weil die Symbole nicht richtig dargestellt werden ?

Grüsse.
 

Bobbes

Active Member
Licensed User
Longtime User
Hi Klaus,
schön wieder von dir zu hören.
Habe jetzt nochmal Alles gezipt und mit geliefert.
Habe die images alle umbenannt.


Kann man die symbole drehen, es müßte weniger Symbole aufgerufen werden.

Grüße Bernd
 

klaus

Expert
Licensed User
Longtime User
Hi Bernd,
Bilder kann man drehen mit
RotateImage(sourceImage, angle): Rotates an image. Angle must be one of 0, 90, 180, 270. Returns the rotated Image.

in der dzImage.dll.

Mehr Details in:
http://www.b4x.com/forum/additional-libraries/1403-dzimage-library-4.html
Letzte Version in Post 30#

Wenn Du die Bilder drehen willst musst Du dann aber auch den Winkel speichern. Denn wenn du eine Datei lädst mit dem Originalbild muss dieses noch gedreht werden.

Hab gesehen dass sich viele Bilder geändert haben. Warum eigentlich die Nummerierung anstatt den sinnvolleren Namen ?

Grüsse.
 

Bobbes

Active Member
Licensed User
Longtime User
hi Klaus,
weil ich der Meinung war das die Datei-Namen zu lang waren und mir deswegen das Programm abgestürtz ist.

Mit dem drehen versuch ich gleich mal.

Ich hab auch noch nicht auf deine ganzen Fragen geantwortet. ich werde es nachholen wenn die andere Hand von der Waschmaschine getrennt ist.

Gruß
 

klaus

Expert
Licensed User
Longtime User
Hi Bernd,
Bist Du sicher dass Dein Programm durch die langen Namen abgestürzt ist, ist bei mir nie vorgekommen.
Eine Möglichkeit wäre nur die Dateinamen anstatt der kompletten Namen zu speichern, und beim laden den kompletten Namen neu generieren.

Grüsse.
 
Last edited:

Bobbes

Active Member
Licensed User
Longtime User
Hi Klaus,
also um das Zeichnen und die Bedienbarkeit mal auszuprobieren habe ich mal angefangen einen Schaltplan zu fertigen. In diesem Fall war es eine Wendeschützschaltung. Symbole setzen und überschreiben alles kein Problem.
Hier und da kann man sichlich noch die Bedienung vereinfachen oder optimieren. Aber meiner Meinung läuft das ganze schon ganz gut.
So irgendwann beim 95-100sten Symbol kommt eine Fehlermeldung und da war ich der Meinung gelesen zuhaben das der String zu lang ist um in die ArrayList gespeichert zuwerden.
Danach habe ich ein Programm geschrieben, um alle JPG-Dateien mit ihren langen Namen automatisch umzuschreiben, sodas jetzt nur noch z.B. ibtn0 da steht.

Bei deiner Version V2_7 habe mal das selbe wiederholt und siehe da keine Fehlermeldung mehr !!!!

Was ich jetzt noch gemacht habe ist wenn man im Desktop-Modus ist, ist an Stelle des Tastatur-Symbols das Drucker-Symbol. Ich habe dann auch schon mal die Anweisung eingegeben, aber irgenwie druckt er nur Zahlen und Buchstaben aus und keine Bilder . Geht das vielleicht nur mit BMP-Files.

Am Rotieren der Bilder bin ich noch dran, hier ist mir auch auf gefallen das eine Fehlermeldung kommt irgendwas mit BMP-Files obwohl ich ja eine JPG-File
benutzte.

Soweit bis dahin
Gruß aus Schlitz
 

klaus

Expert
Licensed User
Longtime User
Hi Bernd,
Hab mal das drehen probiert, funktioniert. Mit einem Winkel von 0 grad funktioniert die Originalfunktion nicht.
Mit einem neuen Bitmap Object bmpRotate.
B4X:
Sub DrawImage(j,tr,a)
  Dim xa,ya
   
  xa=ImageX(j)*Grid
  ya=ImageY(j)*Grid

  rectDest.New1(xa,ya,Grid,Grid)
  If a=0 Then
    drawer.DrawImage1(ImageList1.item(ImageType(j)),rectSrc.Value,rectDest.Value,tr)
  Else
    bmpRotate.Value=dzImage1.RotateImage(ImageList1.item(ImageType(j)),a)
    drawer.DrawImage1(bmpRotate.Value,rectSrc.Value,rectDest.Value,tr)
  End If   
  If ImageText(j)<>"" Then
    DrawText(j,cRed)
  End If
End Sub

Wenn Du willst kann Ich es weiter verfolgen, mit einem neuen panel für die Drehungen.

Welche Anweisungen hast Du zum drucken verwendet ? Ich nehme an dass Du die RichTextBox Library von agrahem verwendet hast. In diesem Fall kann man das Schema bloss als Bild über die CopySelectionToClipboard(Img AS Image) Funktion mit PasteBitmap() übergeben.

EDIT: Mit Winkel 0 es funktioniert, hatte eine ältere Library.

Grüsse.
 
Last edited:
Cookies are required to use this site. You must accept them to continue using the site. Learn more…