Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi VCL Styles setzen verursacht ListIndex über Maximum Fehler (https://www.delphipraxis.net/165261-vcl-styles-setzen-verursacht-listindex-ueber-maximum-fehler.html)

ConstantGardener 20. Dez 2011 17:45

VCL Styles setzen verursacht ListIndex über Maximum Fehler
 
Hallo in die Runde,

ich habe hier ein etwas eigenartiges Problem. Ich versuche die neuen VCL Styles im Programm zu setzen und das Programm steigt mir mit einem Listindex größer als Maximum (1) komplett aus. Das Problem ist das ich das Verhalten in einem Testprogramm in dem ich exakt das selbe tue nicht nachstellen kann.

Also 3 Probleme:

1. Warum schmiert mir die App bei einem TrySetStyle mit validem StyleName (ausgelesen aus TStylemanager) ab? Wenn sie den Style nicht setzen kann dann doch bitte ein FALSE zurückliefern.
2. Warum funktioniert es mir einer TestApp ohne Probleme? Ich verwende hier einige wenige TMS-Kompos (TSmoothTimeline, TSmoothCalendar) kann es daran liegen? Als ich sie in meiner Testapp hatte funktionierte alles perfekt.
3. Wenn ich unter OPTIONEN->Erscheinungsbild den Style von Anfang an auf einen nicht-Windows-Style setzte läuft die App ohne Probleme. Ich will aber dem Kunden die Wahl lassen.

Hat irgendwer von Euch schon mit den Styles rum gespielt und hatte ähnliche Probleme oder eine Idee? Das lässt sich auch aber sowas von schlecht debuggen :evil:

mikhal 20. Dez 2011 19:22

AW: VCL Styles setzen verursacht ListIndex über Maximum Fehler
 
Das Ergebnis meiner Spielereien um mal die VCl-Styles auszuprobieren:
Delphi-Quellcode:
procedure TfrmMain.acStylesExecute(Sender: TObject);
var
  i: NativeInt;
  n: NativeInt;
  sl: TStringList;
  s: String;
begin
  dlgStyles := TdlgStyles.Create(self);
  try
    sl := TStringList.Create;
    n := Length(TStyleManager.StyleNames) - 1;
    for i := 0 to n do
    begin
      sl.Add(TStyleManager.StyleNames[i]);
    end;
    n := sl.Count - 1;
    sl.Sort;
    s := TStyleManager.ActiveStyle.Name;
    dlgStyles.lbxVCLStyles.Items.Clear;
    for i := 0 to n do
    begin
      dlgStyles.lbxVCLStyles.Items.Add(sl[i]);
    end;
    i := dlgStyles.lbxVCLStyles.Items.IndexOf(s);
    dlgStyles.lbxVCLStyles.ItemIndex := i;
    if dlgStyles.ShowModal = mrOk then
    begin
      i := dlgStyles.lbxVclStyles.ItemIndex;
      TStyleManager.TrySetStyle(dlgStyles.lbxVclStyles.Items[i]);
    end;
  finally
    FreeAndNil(dlgStyles);
  end;
end;
dlgStyles ist einfach eine Dialogbox mit einer Listbox lbxVclStyles und zwei Buttons btnOk und btnCancel. Das Ganze wird in einer Action acStyles gepackt.

Funktioniert bei mir ohne Probleme...

Grüße
Mikhal

ConstantGardener 20. Dez 2011 22:30

AW: VCL Styles setzen verursacht ListIndex über Maximum Fehler
 
Ja das klappt bei mir auch ohne Probleme in einer TestApp. In einer meiner realen App's geht das schief. Ich bekomme die Styles zur Laufzeit nicht gesetzt. Wie gesagt zum Start der App funktioniert alles wie erwartet.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:49 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