AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Panel mit vielen Buttons baut sich langsam auf
Thema durchsuchen
Ansicht
Themen-Optionen

Panel mit vielen Buttons baut sich langsam auf

Ein Thema von NielsB · begonnen am 4. Mär 2016 · letzter Beitrag vom 31. Jan 2019
Antwort Antwort
Seite 2 von 5     12 34     Letzte »    
Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
9.592 Beiträge
 
Delphi 11 Alexandria
 
#11

AW: Panel mit vielen Buttons baut sich langsam auf

  Alt 4. Mär 2016, 16:50
Das hört sich so an als ob alle Komponenten gleichzeitig vorhanden sind. Viel sinnvoller ist aber diese nur dynamisch zu erstellen wenn sie benötigt werden. Je mehr Komponenten auf dem Formular sind desto langsamer wird das. Und das nicht proportional sondern exponentiell, weil die einzelnen Komponenten sich gegenseitig benachrichtigen.

In unserer Kassenanwendung ist diese Anzahl von Knöpfen jedenfalls auch auf einem solchen Atom Prozessor kein Problem.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
bra

Registriert seit: 20. Jan 2015
711 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#12

AW: Panel mit vielen Buttons baut sich langsam auf

  Alt 4. Mär 2016, 16:53
Ich stelle mir das gerade so ähnlich wie das hier vor:

http://www.bulkrenameutility.co.uk/Screenshots.php

  Mit Zitat antworten Zitat
NielsB

Registriert seit: 4. Mär 2016
17 Beiträge
 
#13

AW: Panel mit vielen Buttons baut sich langsam auf

  Alt 4. Mär 2016, 18:05
Das Formular dient der Selektion von Items aus einer sehr langen Liste, das Panel mit den Buttons ist eine Sprungfunktion zu den jeweiligen Oberkategorien. Wenn sich das besser lösen lässt, bin ich für Vorschläge offen. Die bisherigen Tipps werde ich bei Gelegenheit ausprobieren, in der Bahn ist das nämlich schwierig
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#14

AW: Panel mit vielen Buttons baut sich langsam auf

  Alt 4. Mär 2016, 18:24
Also wenn du schon schreibst: "Liste" Da kommt einem doch sofort eine Listbox oder Combobox in den Sinn.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
NielsB

Registriert seit: 4. Mär 2016
17 Beiträge
 
#15

AW: Panel mit vielen Buttons baut sich langsam auf

  Alt 4. Mär 2016, 19:15
Die Liste ist nicht das Problem, sie kann allerdings nur Eintragweise navigiert werden. Von 0 zu 30 hieße also 30x den Button hämmern, deshalb gibt es das Panel (legt sich komplett über die Anwendung), das alle Einträge anzeigt und es ermöglicht, direkt zu jedem Eintrag zu springen. Dieser kann dann geöffnet und die Subeinträge in der Liste weiter durchgegangen werden, bis man zu dem Eintrag kommt, der selektiert werden soll.
Das Öffnen des Panels ist durch das ungleichmäßige Anzeigen sehr unansehnlich, prinzipiell würde es auch reichen, wenn das Panel 1 sek später erscheint, dafür aber der Ladevorgang eben nicht sichtbar ist.
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#16

AW: Panel mit vielen Buttons baut sich langsam auf

  Alt 4. Mär 2016, 19:20
TTreeView ist dein Freund
  Mit Zitat antworten Zitat
NielsB

Registriert seit: 4. Mär 2016
17 Beiträge
 
#17

AW: Panel mit vielen Buttons baut sich langsam auf

  Alt 5. Mär 2016, 11:52
Zunächst vielen Dank für die vielen Vorschläge, ich habe versucht, alles auszuprobieren (mit aktuellen Treibern) - leider ohne Erfolg. Zunächst nochmal das Problem in Videoform, vielleicht wird es dann deutlicher: Video

Die Aufnahmen sind stark verlangsamt, um den Aufbau deutlich erkennen zu können. In Echtzeit ist es in dieser Testunit nur zu erkennen, wenn man drauf achtet, aber mit der eigentlichen Applikationslogik im Hintergrund und zusätzlichen Styles wird das Problem sehr deutlich sichtbar.

Die Methoden scheinen sich nicht signifikant zu unterscheiden und der eigentliche Bildaufbau ist immer ein Vorgang, der sich sichtbar über den Bildschirm bewegt. Ist es überhaupt möglich, dies zu verhindern?

Der Code(habe leider keine Spoilertags gefunden):
Delphi-Quellcode:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Buttons, Vcl.ExtCtrls;

type
  TForm1 = class(TForm)
    BitBtn42: TBitBtn;
    Panel1: TPanel;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    BitBtn3: TBitBtn;
    BitBtn4: TBitBtn;
    BitBtn5: TBitBtn;
    BitBtn6: TBitBtn;
    BitBtn7: TBitBtn;
    BitBtn8: TBitBtn;
    BitBtn9: TBitBtn;
    BitBtn10: TBitBtn;
    BitBtn11: TBitBtn;
    BitBtn12: TBitBtn;
    BitBtn13: TBitBtn;
    BitBtn14: TBitBtn;
    BitBtn15: TBitBtn;
    BitBtn16: TBitBtn;
    BitBtn17: TBitBtn;
    BitBtn18: TBitBtn;
    BitBtn19: TBitBtn;
    BitBtn20: TBitBtn;
    BitBtn21: TBitBtn;
    BitBtn22: TBitBtn;
    BitBtn23: TBitBtn;
    BitBtn24: TBitBtn;
    BitBtn25: TBitBtn;
    BitBtn26: TBitBtn;
    BitBtn27: TBitBtn;
    BitBtn28: TBitBtn;
    BitBtn29: TBitBtn;
    BitBtn30: TBitBtn;
    BitBtn31: TBitBtn;
    BitBtn32: TBitBtn;
    BitBtn33: TBitBtn;
    BitBtn34: TBitBtn;
    BitBtn35: TBitBtn;
    BitBtn36: TBitBtn;
    BitBtn37: TBitBtn;
    BitBtn38: TBitBtn;
    BitBtn39: TBitBtn;
    BitBtn40: TBitBtn;
    BitBtn41: TBitBtn;
    BitBtn43: TBitBtn;
    BitBtn44: TBitBtn;
    BitBtn45: TBitBtn;
    BitBtn46: TBitBtn;
    procedure BitBtn42Click(Sender: TObject);
    procedure BitBtn44Click(Sender: TObject);
    procedure BitBtn45Click(Sender: TObject);
    procedure BitBtn46Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.BitBtn42Click(Sender: TObject);
var
I : Integer;
handle : HWND;
begin
  handle := BeginDeferWindowPos(1);
  DeferWindowPos(handle,Panel1.Handle,HWND_TOP,0,0,640,480,$0001);
  EndDeferWindowPos(handle);
end;

procedure TForm1.BitBtn44Click(Sender: TObject);
begin
  Panel1.Left := 640;
end;

procedure TForm1.BitBtn45Click(Sender: TObject);
begin
  Panel1.Left := 0;
end;

procedure TForm1.BitBtn46Click(Sender: TObject);
begin
  SendMessage(Panel1.Handle, WM_SETREDRAW, 0, 0);
try
  Panel1.Left:= Form1.Width + 1; // Sollte natürlich das Formular sein auf dem das Panel liegt.
  Panel1.Top:=0;
  Panel1.Visible:=True;
  Panel1.Left:= 0;
finally
  SendMessage(Panel1.Handle, WM_SETREDRAW, 1, 0);
  RedrawWindow(Panel1.Handle, nil, 0, RDW_ERASE or RDW_FRAME or RDW_INVALIDATE or RDW_ALLCHILDREN);
end;

end;

end.
Delphi-Quellcode:
object Form1: TForm1
  Left = 0
  Top = 0
  BorderStyle = bsNone
  Caption = 'Form1'
  ClientHeight = 480
  ClientWidth = 640
  Color = clBtnFace
  DoubleBuffered = True
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  Scaled = False
  PixelsPerInch = 96
  TextHeight = 13
  object BitBtn42: TBitBtn
    Left = 8
    Top = 228
    Width = 97
    Height = 25
    Caption = 'DeferWindowsPos'
    TabOrder = 0
    OnClick = BitBtn42Click
  end
  object Panel1: TPanel
    Left = 640
    Top = 0
    Width = 640
    Height = 480
    Caption = 'Panel1'
    FullRepaint = False
    TabOrder = 1
    object BitBtn1: TBitBtn
      Left = 16
      Top = 16
      Width = 177
      Height = 25
      Caption = 'BitBtn1'
      TabOrder = 0
    end
    object BitBtn2: TBitBtn
      Left = 16
      Top = 47
      Width = 177
      Height = 25
      Caption = 'BitBtn1'
      TabOrder = 1
    end
    object BitBtn3: TBitBtn
      Left = 16
      Top = 78
      Width = 177
      Height = 25
      Caption = 'BitBtn1'
      TabOrder = 2
    end
    object BitBtn4: TBitBtn
      Left = 16
      Top = 109
      Width = 177
      Height = 25
      Caption = 'BitBtn1'
      TabOrder = 3
    end
    object BitBtn5: TBitBtn
      Left = 16
      Top = 140
      Width = 177
      Height = 25
      Caption = 'BitBtn1'
      TabOrder = 4
    end
    object BitBtn6: TBitBtn
      Left = 16
      Top = 171
      Width = 177
      Height = 25
      Caption = 'BitBtn1'
      TabOrder = 5
    end
    object BitBtn7: TBitBtn
      Left = 16
      Top = 202
      Width = 177
      Height = 25
      Caption = 'BitBtn1'
      TabOrder = 6
    end
    object BitBtn8: TBitBtn
      Left = 16
      Top = 233
      Width = 177
      Height = 25
      Caption = 'BitBtn1'
      TabOrder = 7
    end
    object BitBtn9: TBitBtn
      Left = 16
      Top = 264
      Width = 177
      Height = 25
      Caption = 'BitBtn1'
      TabOrder = 8
    end
    object BitBtn10: TBitBtn
      Left = 16
      Top = 295
      Width = 177
      Height = 25
      Caption = 'BitBtn1'
      TabOrder = 9
    end
    object BitBtn11: TBitBtn
      Left = 16
      Top = 326
      Width = 177
      Height = 25
      Caption = 'BitBtn1'
      TabOrder = 10
    end
    object BitBtn12: TBitBtn
      Left = 16
      Top = 357
      Width = 177
      Height = 25
      Caption = 'BitBtn1'
      TabOrder = 11
    end
    object BitBtn13: TBitBtn
      Left = 16
      Top = 388
      Width = 177
      Height = 25
      Caption = 'BitBtn1'
      TabOrder = 12
    end
    object BitBtn14: TBitBtn
      Left = 16
      Top = 419
      Width = 177
      Height = 25
      Caption = 'BitBtn1'
      TabOrder = 13
    end
    object BitBtn15: TBitBtn
      Left = 224
      Top = 16
      Width = 177
      Height = 25
      Caption = 'BitBtn1'
      TabOrder = 14
    end
    object BitBtn16: TBitBtn
      Left = 224
      Top = 295
      Width = 177
      Height = 25
      Caption = 'BitBtn1'
      TabOrder = 15
    end
    object BitBtn17: TBitBtn
      Left = 224
      Top = 326
      Width = 177
      Height = 25
      Caption = 'BitBtn1'
      TabOrder = 16
    end
    object BitBtn18: TBitBtn
      Left = 224
      Top = 357
      Width = 177
      Height = 25
      Caption = 'BitBtn1'
      TabOrder = 17
    end
    object BitBtn19: TBitBtn
      Left = 224
      Top = 388
      Width = 177
      Height = 25
      Caption = 'BitBtn1'
      TabOrder = 18
    end
    object BitBtn20: TBitBtn
      Left = 224
      Top = 419
      Width = 177
      Height = 25
      Caption = 'BitBtn1'
      TabOrder = 19
    end
    object BitBtn21: TBitBtn
      Left = 224
      Top = 47
      Width = 177
      Height = 25
      Caption = 'BitBtn1'
      TabOrder = 20
    end
    object BitBtn22: TBitBtn
      Left = 224
      Top = 78
      Width = 177
      Height = 25
      Caption = 'BitBtn1'
      TabOrder = 21
    end
    object BitBtn23: TBitBtn
      Left = 224
      Top = 109
      Width = 177
      Height = 25
      Caption = 'BitBtn1'
      TabOrder = 22
    end
    object BitBtn24: TBitBtn
      Left = 224
      Top = 140
      Width = 177
      Height = 25
      Caption = 'BitBtn1'
      TabOrder = 23
    end
    object BitBtn25: TBitBtn
      Left = 224
      Top = 171
      Width = 177
      Height = 25
      Caption = 'BitBtn1'
      TabOrder = 24
    end
    object BitBtn26: TBitBtn
      Left = 224
      Top = 202
      Width = 177
      Height = 25
      Caption = 'BitBtn1'
      TabOrder = 25
    end
    object BitBtn27: TBitBtn
      Left = 224
      Top = 233
      Width = 177
      Height = 25
      Caption = 'BitBtn1'
      TabOrder = 26
    end
    object BitBtn28: TBitBtn
      Left = 224
      Top = 264
      Width = 177
      Height = 25
      Caption = 'BitBtn1'
      TabOrder = 27
    end
    object BitBtn29: TBitBtn
      Left = 440
      Top = 16
      Width = 177
      Height = 25
      Caption = 'BitBtn1'
      TabOrder = 28
    end
    object BitBtn30: TBitBtn
      Left = 440
      Top = 295
      Width = 177
      Height = 25
      Caption = 'BitBtn1'
      TabOrder = 29
    end
    object BitBtn31: TBitBtn
      Left = 440
      Top = 326
      Width = 177
      Height = 25
      Caption = 'BitBtn1'
      TabOrder = 30
    end
    object BitBtn32: TBitBtn
      Left = 440
      Top = 357
      Width = 177
      Height = 25
      Caption = 'BitBtn1'
      TabOrder = 31
    end
    object BitBtn33: TBitBtn
      Left = 440
      Top = 388
      Width = 177
      Height = 25
      Caption = 'BitBtn1'
      TabOrder = 32
    end
    object BitBtn34: TBitBtn
      Left = 440
      Top = 419
      Width = 177
      Height = 25
      Caption = 'BitBtn1'
      TabOrder = 33
    end
    object BitBtn35: TBitBtn
      Left = 440
      Top = 47
      Width = 177
      Height = 25
      Caption = 'BitBtn1'
      TabOrder = 34
    end
    object BitBtn36: TBitBtn
      Left = 440
      Top = 78
      Width = 177
      Height = 25
      Caption = 'BitBtn1'
      TabOrder = 35
    end
    object BitBtn37: TBitBtn
      Left = 440
      Top = 109
      Width = 177
      Height = 25
      Caption = 'BitBtn1'
      TabOrder = 36
    end
    object BitBtn38: TBitBtn
      Left = 440
      Top = 140
      Width = 177
      Height = 25
      Caption = 'BitBtn1'
      TabOrder = 37
    end
    object BitBtn39: TBitBtn
      Left = 440
      Top = 171
      Width = 177
      Height = 25
      Caption = 'BitBtn1'
      TabOrder = 38
    end
    object BitBtn40: TBitBtn
      Left = 440
      Top = 202
      Width = 177
      Height = 25
      Caption = 'BitBtn1'
      TabOrder = 39
    end
    object BitBtn41: TBitBtn
      Left = 440
      Top = 233
      Width = 177
      Height = 25
      Caption = 'BitBtn1'
      TabOrder = 40
    end
    object BitBtn43: TBitBtn
      Left = 440
      Top = 264
      Width = 177
      Height = 25
      Caption = 'BitBtn1'
      TabOrder = 41
    end
    object BitBtn44: TBitBtn
      Left = 224
      Top = 450
      Width = 177
      Height = 25
      Caption = 'Panel ausblenden'
      TabOrder = 42
      OnClick = BitBtn44Click
    end
  end
  object BitBtn45: TBitBtn
    Left = 128
    Top = 228
    Width = 75
    Height = 25
    Caption = 'Left:=0'
    TabOrder = 2
    OnClick = BitBtn45Click
  end
  object BitBtn46: TBitBtn
    Left = 232
    Top = 228
    Width = 75
    Height = 25
    Caption = 'SendMessage'
    TabOrder = 3
    OnClick = BitBtn46Click
  end
end
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#18

AW: Panel mit vielen Buttons baut sich langsam auf

  Alt 5. Mär 2016, 12:38
Du solltest dir eine Alternative zu dieser Button-Orgie überlegen.

z.B. Eine ListBox, die einfach die Bilder von einem Button malt. Die Auflistung kann man auch wesentlich einfacher erweitern (mehr "Buttons" darstellen).
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
9.592 Beiträge
 
Delphi 11 Alexandria
 
#19

AW: Panel mit vielen Buttons baut sich langsam auf

  Alt 5. Mär 2016, 15:32
Hier habe ich mal so etwas selbst gezeichnet:
http://www.delphipraxis.net/132375-p...-beta-6-a.html
Das funktionierte auch auf einem alten Rechner problemlos.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.160 Beiträge
 
Delphi 10 Seattle Enterprise
 
#20

AW: Panel mit vielen Buttons baut sich langsam auf

  Alt 5. Mär 2016, 17:01
Dumme Frage: Der TBitBtn ist doch so etwas von der VCL selbst gezeichnetes, oder? Was ist wenn man einmal mit Notepad durch die .pas und .dfm geht und alle Vorkommen von TBitBtn gegen TButton ersetzt?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 5     12 34     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:04 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz