Announcement

Collapse
No announcement yet.

Delphi + Intraweb: IWDBGrid Scrollbar zu kurz

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Delphi + Intraweb: IWDBGrid Scrollbar zu kurz

    Hallo zusammen,
    bin nicht ganz sicher ob ich hier richtig bin, aber eine Intraweb-Forum gibt's leider bei embarcadero nicht (mehr) und da ich die Komponenten in Delphi nutze hoffe ich hier Hilfe zu finden.

    Ich habe folgendes mit den entsprechenden Intraweb-Komponenten eingerichtet:
    - Form mit zwei Regions, je eine oben und unten im Fenster. Oben mit align=alTop, unten align=alBottom
    - in der Mitte zwischen den Regions ein IWDBGRID mit der Option "align=alClient", so dass dieses Grid den ganzen Platz einnimmt, der von Top und Bottom freigelassen wird.

    Das Grid zeigt in der Voreinstellung 20 Zeilen (RowLimit=20), je nach Größe des Browser-Fensters passen die nicht alle ins Fenster. Die Komponente zeigt dann auch einen Laufbalken an der rechten Seite, der blättert aber nur max. 1 Zeile weiter. Wenn das Fenster also statt 20 Zeilen nur 10 Zeilen des IWDBGrid anzeigen kann, kann man nicht zur letzten Zeile scrollen sondern nur bis zur 11. oder manchmal 12. Zeile. Das ist auch unabhängig davon, ob das Fenster von Anfang an zu klein ist oder ob man es nach Anzeigen der ganzen Liste verlkeinert. Der Scrollbalken ist immer "zu kurz".

    Ich möchte das aber für den Anwender so komfortabel wie möglich, egal wie groß er das Fenster zieht soll sich das IWDBGrid ja mit der Option align=alClient ebefalls vergrößern/verkleinern und wenn das Fenster für das Grid zu klein wird sollte man zumindest scrollen können (wie auch sonst bei "normalem" direkt in HTLM erstellten Web-Anwendungen, da macht das halt der Browser wenn der Inhalt zu lang wird).

    Ich habe schon alle Einstellungen ausprobiert, die dem Namen nach irgendwie etwas mit dem Thema zu tun haben könnten, finde aber keine Lösung. Mache ich etwas falsch oder kann die Komponente das einfach nicht? Ein normales DBGrid in einer Delphi-Anwendung macht das ja korrekt - ich dachte IWDBGrid könne das auch...

    Wenn ich für das IWDBGrid align=alTop einstelle und ein feste Höhe angebe, wird immerhin ein Gesamt-Scrollbalken angezeigt, der innerhalb des Browserfensters die ganze Liste verschiebt, so dass man bis zur letzten Zeile scrollen kann. Ich kann auch per Code vorab berechnen, wie hoch die Liste sein muss, damit alle gewünschten Zeilen angezeigt werden (der Anwender kann wählen zwischen 10, 20, 50, 250,alle), aber mit einem IWDBGrid das seine Größe per align=alClient anpasst und dessen eigenem Scrollbalken in richtiger Länge wäre es schöner.

    Hat jemand einen Tipp für mich, wie ich das gewünschte Verhalten erreichen kann? Habe ich nur eine Option übersehen oder muss ich evtl. im OnRender-Event selbst eingreifen - dann wüsste ich aber auch nicht wo ich da ansetzen muss.

    Gruß,
    Siegbert

  • #2
    Also erstmal sei die Frage erlaubt, ob die Technik (noch) angesagt ist. Aber das musst Du wissen.
    Dann, ich hab damit noch nie gearbeitet, nur mit den VCL Komponenten. Aber auch da gibt's manchmal solche Probleme.
    Also kann ich Dir nur einen einfachen, allgemeinen Rat geben, vielleicht verhält sich das ja analog.
    Schau Dir an, worauf sich die alClient Positionierung bezieht und untersuche, ob das optimal ist.
    Es kann vorkommen, insbesondere wenn mehrere solcher alignxy Objekte nebeneinander oder untereinander liegen, dass die Größenangaben falsch oder in falscher Reihenfolge berechnet werden, spätestens bei einem Resize des Parentobjekts. Wenn ich mich richtig erinnere, hat das (Fehl-)Verhalten teilweise sogar mit der Erstellungsfolge im Entwurfsmodus zu tun.
    In VCL habe ich das meist mit Panels umschifft, die ich sozusagen als Container für die autoalign Controls verwendet habe. Schema: max. 2 Controls pro Container, also notfalls entsprechend verschachtelt (2 Panels im Panel) mit den jeweils gewünschten Align Eigenschaften.
    Gruß, defo

    Comment


    • #3
      selbst wenn ich wie beschrieben dem IWDBGRID eine feste Größe gebe und unabhängig davon ob es selbst wieder in ein Panel (bei Intraweb heißt das Region) eingebettet ist oder nicht, tritt der Effekt immer in gleicher Weise auf, hängt also nicht an der der per autoAlign ermittelten Größe.
      Beispiel:
      - align = alNone
      - Height = 200 (reicht für ca. 8 Rows)
      - RowLimit=20
      Der Scrollbalken lässt es nicht zu, über alle 20 Zeilen zu scrollen.
      iwdbgrid.jpg
      Das IWDBGrid müsste ja eigentlich auf Basis seine Height-Eigenschaft und der Anzahl der angezeigten Rows den Scrollbereich berechnen. Es zeigt ja auch einenScrollbalken an, wenn die Anzahl der Zeilen nicht in dem mit Height angegebenen Fenster angezeigt werden kann (und auch nur dann - es "merkt" also schon, dass das Fenster zu klein ist). Der Srollbalken srolt dann halt leider nur eine, machmal sogar zu eine halbe Zeile nach unten, egal wie viele Rows eigentlich noch folgen würden.

      Zu Technik: IntraWeb ist halt für jemanden der Delphi gewohnt ist recht einfach, damit einen Zugriff auf Daten über einen Browser bereitzustellen. Schöner wäre eine z.B. mit PHP erstellte Applikation, die dann auch nahezu auf jedem beliebigen Web-Host laufen würde. Aber um die Funktionalität von TQuery, TDataset und DBGrid nachzubauen braucht man deutlich mehr Zeit als mit Intraweb - und zu Delphi gehört es auch noch ohne Zusatzkosten dazu. Oder meinst Du die Objekte mit alignTop/alignBottom? Ist einfach Gewohnheit, weil ich meine Delphi-Forms imme mit einem identischen Kopf- und Fußbereich versehe und die Anwender so in jedem Formular gleiche Cotntrols an den selben Stellen finden. Je nach Auflösung und Schriftgröße kann man die Forms beliebig vergrößern/verkleinern.

      Comment


      • #4
        Ja, das mit der Gewohnheit ist wahrscheinlich häufig der Grund. Ich meinte, dass es insgesamt nicht sehr verbreitet ist. Die Folgen bekommst Du grad zu spüren. Wenig Nutzer, also auch wenig Community Support. Du kannst Dich natürlich gleich an Emba wenden, wenn es so sehr nach einem Bug aussieht.
        Ansonsten gibt es Foren, die mehr auf Delphi spezialisiert sind. Da würde ich es mal versuchen.
        Gruß, defo

        Comment

        Working...
        X