AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Performance erhöhen bei einem Kalender
Thema durchsuchen
Ansicht
Themen-Optionen

Performance erhöhen bei einem Kalender

Ein Thema von mika · begonnen am 27. Feb 2003 · letzter Beitrag vom 27. Feb 2003
Antwort Antwort
Benutzerbild von mika
mika

Registriert seit: 25. Okt 2002
176 Beiträge
 
Delphi 6 Professional
 
#1

Performance erhöhen bei einem Kalender

  Alt 27. Feb 2003, 09:41
Hallo an alle,

ich schreibe an einem Kalender/Planer in dem man sachen eintragen kann.
Weil das ganze für Firmen ist die z.B. den Urlaub ihrer Mitarbeiter
damit planen wollen habe ich mich dazuentschlossen das ganze nicht
als Komponente von irgendwoher zu nehmen sondern das selber zu schreiben.

So habe ich mir ein Objekt erstellt (abgeleitet von TShape) mit dem
ich jeden Tag als kleines Rechteck darstelle. Nun habe ich aber das Problem
das das ganze schon bei 70 Leuten und einem Jahr (also 70 Zeilen,
365 Spalten) sehr langsam lädt (ich habe nach 5 minuten abgebrochen). Bei
70 Leuten und einem Monat brauch ich immer noch 10 sekunden und ich habe
das Gefühl je mehr ich von den Kästchen erstelle desto länger braucht er
pro Kästchen.

Ich dachte mir ich packe das ganze mal in einen Thread den ich beim starten
des Kalenders einfach aufrufe, meinetwegen auch mit einer höherer Priorität
damit das ganze mal ein bisschen an Performance zulegt. Als zweite
überlegen kam mir das ich aus dem Thread ein Array mache (dynamisches) und
einfach für jede Zeile einen Thread starte der mir dann die lustigen
Kästchen zeichnet. Würde es schneller gehen wenn ich den Array für
die Shapes vorher bereitstelle und jedem Thread einfach sage fülle
den Array von 1 - 300, 2ter Thread fülle Array von 301 bis 600 und so
weiter?

Hat jemand von euch schon mal was ähnlcihes gemacht?
:: don't Panic ::
  Mit Zitat antworten Zitat
Benutzerbild von mika
mika

Registriert seit: 25. Okt 2002
176 Beiträge
 
Delphi 6 Professional
 
#2

nochmal ich

  Alt 27. Feb 2003, 09:45
Hier nochmal n bisschen Code von mir, vielleicht habe ich
ja auch da was falsches drinne ?!

Delphi-Quellcode:
  TMyCoords = Packed Record
    Column: Word;
    Row: Word;
    Top: Word;
    Left: Word;
    Bottom: Word;
    Right: Word;
  End;

  TMyInformation = Packed Record
    msdDay: TDate;
    msdWDay: String[12];
    msdPerson: String[50];
    msdPersonNR: String[5];
    msdActualKosten: String[5];
    msdNormalKosten: String[5];
  End;

  TCreateIt = Record
    _ID: Integer;
    Top: Integer;
    Left: Integer;
    State: Word;
    _Date: TDate;
    col: integer;
    row: Integer;
    coords: TMyCoords;
    _Caption: String;
    _Color: TColor;
    Person: String;
  End;

  TMySpecialDay = class(TShape)

    mytitel: TStaticText;
    constructor NCreate ( how: TCreateIt ); // Constructor
    destructor Destroy; override; // Destructor

    private
      msdID: Integer;
      msdState: Word;
      // ---
      msdCoords: TMyCoords;
      msdInfo: TMyInformation;
      // ---
      msdChanged: Boolean;
      msdStatebeforeChange: Word;
      msdSelected: Boolean;
      public
      procedure onMyMouseDown(Sender: TObject; Button: TMouseButton;
                              Shift: TShiftState; X, Y: Integer);
      procedure onMyMouseMove(Sender: TObject; Shift: TShiftState; X,
                              Y: Integer);
      procedure onMyMouseUp(Sender: TObject; Button: TMouseButton;
                            Shift: TShiftState; X, Y: Integer);
      procedure CreateLabel(var Lbl: TStaticText;
                                X,Y,W,H: Integer;
                                BorderStyle: TStaticBorderStyle;
                                Color,FontColor: TColor;
                                FontStyle: TFontStyles;
                                Capt: String;
                                Align: TAlignment;
                                FontSize: Integer);
  end;

constructor TMySpecialDay.NCreate ( how: TCreateIt );
Begin
  // Erstellen
  Create (f_planer.sKalender);
  Parent := f_planer.sKalender;
  INC (mySDCount);

  // Konfigurieren
  msdID := how._ID;
  msdState := how.State;
  msdInfo.msdDay := how._Date;
  msdInfo.msdWDay := f_planer.daytoStr(DayOfTheWeek(how._Date));
  msdInfo.msdPerson := how._Caption;
  msdInfo.msdPersonNr := how.Person;
  msdCoords := how.Coords;
  Case msdState of
    msdDontUse : begin
                      Brush.Color := mscDontUse;
                    end;
  end;

  // Ausrichten
  SetBounds(how.Left, how.top, msdWidth, msdHeight);

  // Methoden und Ereignisse anhängen
  if msdState <> msdDontUse then
  Begin
    OnMouseDown := onMyMouseDown;
    OnMouseMove := onMyMouseMove;
    OnMouseUp := onMyMouseUp;
    msdChanged := False;
    msdSelected := False;
  End;
End;

destructor TMySpecialDay.Destroy;
Begin
  Inherited Destroy;
End;
vielleicht hilft das ja auch noch weiter.

mfg, Mika
:: don't Panic ::
  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 10:40 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