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
Benutzerbild von ibp
ibp

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

AW: Panel mit vielen Buttons baut sich langsam auf

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

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

AW: Panel mit vielen Buttons baut sich langsam auf

  Alt 5. Mär 2016, 10: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
 
#3

AW: Panel mit vielen Buttons baut sich langsam auf

  Alt 5. Mär 2016, 11: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

Registriert seit: 10. Jun 2003
Ort: Berlin
10.064 Beiträge
 
Delphi 12 Athens
 
#4

AW: Panel mit vielen Buttons baut sich langsam auf

  Alt 5. Mär 2016, 14: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
AppCentral
  Mit Zitat antworten Zitat
Der schöne Günther

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

AW: Panel mit vielen Buttons baut sich langsam auf

  Alt 5. Mär 2016, 16: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
NielsB

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

AW: Panel mit vielen Buttons baut sich langsam auf

  Alt 5. Mär 2016, 17:20
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?
Ändert leider nichts, aber der komplette Aufbau innerhalb eines Frames scheint aufgrund von Software oder Hardwarelimitierungen nicht möglich zu sein, zumindest habe ich bisher noch nichts gefunden, das irgendeinen Effekt auf den Bildaufbau hatte.
Die einzige Möglichkeit, das Problem so unauffällig wie möglich zu gestalten, sind wohl die genannten Möglichkeiten, die Anzahl an Komponenten zu reduzieren. Keine optimale Lösung, weil die Anwendung auch an anderen Stellen hakt, aber die Hardware steht leider schon fest...
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.233 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Panel mit vielen Buttons baut sich langsam auf

  Alt 5. Mär 2016, 17:26
Kannst du eine Dummy-Anwendung mit dem zentralen Problem erstellung und Exe + Quellcode bereitstellen.
So können wir das selbst compilieren bzw. auf ebenfalls "hyperschnellen" Atomrechnern ausprobieren.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
FarAndBeyond
(Gast)

n/a Beiträge
 
#8

AW: Panel mit vielen Buttons baut sich langsam auf

  Alt 16. Mär 2016, 17:18
Zitat:
Ich stelle mir das gerade so ähnlich wie das hier vor:
http://www.bulkrenameutility.co.uk/Screenshots.php
Ich glaub' du hast da was falsch verstanden... Das ist eine sehr schöne GUI, die darüberhinaus noch übersichtlich und selbsterklärend ist!
Alter Schwede, ist das'n cooles Formular. Ganz offensichtlich darf man dafür auch etwas bezahlen wenn man möchte!!!



@NielsB:
Hast du mal darüber nachgedacht mit allen Verantwortlichen zusammen zu überlegen, ob es nicht besser ist das Schrottprogramm in die Tonne zu hauen und lieber ein neues Programm zu schreiben? Jeder schreibt genau auf was er von dem Programm erwartet und was es können muß und dann baut man ein sauberes, intelligentes Programm, daß für alle zukünftigen Dinge auch ausgerüstet und vorbereitet ist. Ich würde keine Sekunde in so ein Programm stecken...

Also die Beschreibung und die vielen durchnumerierten Buttons sprechen eine deutliche Sprache...


Davon mal abgesehen: Ich hab' z. B. Windows 7 (32bit Sp1) schon auf Rechnern installiert die weniger als 500 MB RAM hatten. Nach der Installation war Null MB RAM übrig.
Dann hab' ich die klassische Oberfläche eingestellt und die Aufgabenplanung und die Dienste komplett entrümpelt und danach hatte der Rechner wieder 200 MB freien RAM. Das Ding lief danach total stabil. Entscheidend ist, dass man den kleinen Rechner für einfache Aufgaben problemlos einsetzen konnte und das war keine HighEnd-Installation. 2/3 der Dienste sind für normale Aufgaben und Benutzer völlig wertlos und nur für Systemadministratoren interessant. Systemadmins werden allerdings wohl kaum einen Server mit 'ner normalen Windows-Version bestücken, falls sie überhaupt Windows einsetzen würden...

Weiterhin viel Spass und gute Nerven...
  Mit Zitat antworten Zitat
NielsB

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

AW: Panel mit vielen Buttons baut sich langsam auf

  Alt 18. Mär 2016, 20:43
@NielsB:
Hast du mal darüber nachgedacht mit allen Verantwortlichen zusammen zu überlegen, ob es nicht besser ist das Schrottprogramm in die Tonne zu hauen und lieber ein neues Programm zu schreiben? Jeder schreibt genau auf was er von dem Programm erwartet und was es können muß und dann baut man ein sauberes, intelligentes Programm, daß für alle zukünftigen Dinge auch ausgerüstet und vorbereitet ist. Ich würde keine Sekunde in so ein Programm stecken...

Also die Beschreibung und die vielen durchnumerierten Buttons sprechen eine deutliche Sprache...


Davon mal abgesehen: Ich hab' z. B. Windows 7 (32bit Sp1) schon auf Rechnern installiert die weniger als 500 MB RAM hatten. Nach der Installation war Null MB RAM übrig.
Dann hab' ich die klassische Oberfläche eingestellt und die Aufgabenplanung und die Dienste komplett entrümpelt und danach hatte der Rechner wieder 200 MB freien RAM. Das Ding lief danach total stabil. Entscheidend ist, dass man den kleinen Rechner für einfache Aufgaben problemlos einsetzen konnte und das war keine HighEnd-Installation. 2/3 der Dienste sind für normale Aufgaben und Benutzer völlig wertlos und nur für Systemadministratoren interessant. Systemadmins werden allerdings wohl kaum einen Server mit 'ner normalen Windows-Version bestücken, falls sie überhaupt Windows einsetzen würden...

Weiterhin viel Spass und gute Nerven...
Das ist in der Tat schon eine Überlegung gewesen, denn das Programm stammt noch aus Win98 Zeit und wurde bis vor ein paar Jahren von einer einzigen Person entwickelt - dementsprechend sieht auch der Code aus... Über die Jahre hat sich einiges an Funktionalität angesammelt, die in einer Neuentwicklung vorhanden sein müsste. Tendenziell wird der Großteil der Ressourcen aber für das Instandhalten gebraucht, sodass eine Neuentwicklung in nächster Zeit unrealistisch ist.
  Mit Zitat antworten Zitat
Antwort Antwort


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 05:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz