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 Page control (https://www.delphipraxis.net/11026-page-control.html)

schniede 29. Okt 2003 21:19


Page control
 
Hallo!

Um die tabs vom Pagecontrol einzufärben verwende ich folgenden code (hier im Board gefunden), klappt auch super, nur wenn ich Typisierte Kunstanten verwende Meckert der Compiler. :x Was mach ich falsch??

Das alles, weil ich zur Laufzeit die farben durch den anwender ändern lassen möchte.

Delphi-Quellcode:
const
{ hier bekomme ich die Fehlermeldung}
farbe11 :integer=44444;
farbe12 :integer=44444;
farbe13 :integer=44444;
farbe14 :integer=44444;
farbe15 :integer=44444;
Delphi-Quellcode:
const    {FUNZT}

  farbe11 = 44444;
  farbe12 = 44444;
  farbe13 = 444487;
  farbe14 = 44254;
  farbe15 = 44444;
Delphi-Quellcode:
procedure TForm1.PageControlDrawTab(Control: TCustomTabControl;
  TabIndex: Integer; const Rect: TRect; Active: Boolean);
const
  _clTabColors : array [0..4] of TColor = (farbe11,farbe12,farbe13,farbe14,farbe15);
  _sTabCaptions : array [0..4] of string = ('    Hauptansicht',' Einzelans.- Kunde',' Best. Waren ges.','      Warenlager',' Eigene Umsätze');

begin
  Control.Canvas.Brush.Color := _clTabColors[TabIndex];
  Control.Canvas.FillRect(Rect);
  Control.Canvas.TextOut(Rect.Left+5,Rect.Top+3,_sTabCaptions[TabIndex]);
end;
mfg schniede

[edit=Daniel B]Delphi-Tags korrigiert. Mfg, Daniel B[/edit]

Christian Seehase 29. Okt 2003 21:30

Re: Page control
 
Moin Schniede,

Zitat:

Zitat von schniede
{ hier bekomme ich die Fehlermeldung}

also ich nicht.
Welche Meldung kommt denn?

schniede 29. Okt 2003 21:41

Re: Page control
 
[Fehler] Kundenverwaltung.pas(2558): Konstantenausdruck erwartet

das zeigt mir der Compiler

die Konstanten habe ich global deklariert ,wenn das was zu sagen hat.

schniede

P.s. das progi war glaube auch von dir !!

himitsu 29. Okt 2003 21:47

Re: Page control
 
Ist doch nicht so gemacht:
Delphi-Quellcode:
type TForm1 = class(TForm)
  private
    { Private-Deklarationen }
    Const FarbeX: TColor = 44444;
  public
    { Public-Deklarationen }
  end;
Wenn ja, dann ohne CONST:
Delphi-Quellcode:
type TForm1 = class(TForm)
  private
    { Private-Deklarationen }
    FarbeX: TColor = 44444;
  public
    { Public-Deklarationen }
  end;
Deins funktioniert zwar, richtiger währe es aber so.
Delphi-Quellcode:
Const FarbeX: TColor = 44444;

schniede 29. Okt 2003 22:20

Re: Page control
 
hi himitsu ,habe mal deine version probiert funktioniert genausewenig wie meine.

hab auch schon unter compileroptionen geschaut ,ist aber angehakt "zuweisbare typisierte Konstanten" ,hm weiß kein rat :wall:

mfg schniede

himitsu 29. Okt 2003 22:27

Re: Page control
 
So fällt mir auch nichts mehr ein.

Kannst'e mal den gesamten Code posten (als Anhang) oder per eMail, dann schau ich mir's mal direkt an.

schniede 29. Okt 2003 22:32

Re: Page control
 
Das wird ein problem.Das Progi besteht aus mehreren units,formularen und 5 tabellen gehören auch noch dazu.da brauchst du ne woche um den anfang zu finden. Ist aber nett gemeint oder hab ich dich falsch verstanden ? :wall:


hab da was in der hilfe gefunden ,weiß nur nicht wo ich das hinpinseln soll :roll:


Delphi-Quellcode:
Im Status $WRITEABLECONST OFF führt dieser Quelltext bei der Zuweisung an die Variable foo im begin..end-Block zu einem Compiler-Fehler. Sie können das Problem beheben, indem Sie foo nicht als const, sondern als var deklarieren.

In den früheren Versionen von Delphi und Borland Pascal konnten typisierte Konstanten immer geändert werden (wie im Status {$J+}). Deshalb muss älterer Quelltext, der änderbare typisierte Konstanten enthält, im Status {$J+} compiliert werden.

vieleicht kanst du mir da helfen?

Christian Seehase 29. Okt 2003 22:42

Re: Page control
 
Moin Schniede,

der unter Teil stammt von mir, das stimmt wohl, aber der obere nicht ;-)
Ich hatte auch Konstanten benutzt die mit = TColor(...) deklariert werden.

Übrigens tritt der Fehler ja nicht bei der Konstantendeklaration auf, sondern wenn Du diese Nutzen willst.

Wenn die Farben vom User eingestellt werden sollen, warum nimmst Du dann nicht statt des Konstanten Arrays eine Variable, die entsprechend der Auswahl die Einträge enthält.
Halte ich für entschieden sauberer ;-)

himitsu 29. Okt 2003 22:44

Re: Page control
 
{$J+} muss auf jeden Fall vor der Deklaration deiner Konstante angegeben werden.

z.B.
Delphi-Quellcode:
{$J+}
Const FarbeX: Integer = 44444;

schniede 29. Okt 2003 22:46

Re: Page control
 
Das würde ich liebend gerne Variablen benutzen, nur das hab ich nicht hinbekommen,dein quelltext zu ändern.

vieleicht kannst du mir das mal umschreiben das ich anstelle der Konst. variablen benutzen kann.

mfg schniede

schniede 29. Okt 2003 23:01

Re: Page control
 
Code:
{$J+}
Const FarbeX: Integer = 44444;

nein das klappt leider auch net. :oops:

mfg schniede

himitsu 29. Okt 2003 23:02

Re: Page control
 
Delphi-Quellcode:
Unit Unit1;

Interface
  Uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;

  Type TForm1 = Class(TForm)
      Procedure FormCreate(Sender: TObject);
      Procedure PageControlDrawTab(Control: TCustomTabControl; TabIndex: Integer; Const Rect: TRect; Active: Boolean);
    Private
      _clTabColors: Array[0..4] of TColor;
    End;

  Var Form1: TForm1;

Implementation
  {$R *.dfm}

  Procedure TForm1.FormCreate(Sender: TObject);
    Begin
      _clTabColors[0] := Farbe11;
      _clTabColors[1] := Farbe12;
      _clTabColors[2] := Farbe13;
      _clTabColors[3] := Farbe14;
      _clTabColors[4] := Farbe15;
    End;

  Procedure TForm1.PageControlDrawTab(Control: TCustomTabControl; TabIndex: Integer; Const Rect: TRect; Active: Boolean);
    Const _sTabCaptions: Array[0..4] of Otring = ('    Hauptansicht', ' Einzelans.- Kunde', ' Best. Waren ges.', '      Warenlager', ' Eigene Umsätze');

    Begin
      Control.Canvas.Brush.Color := _clTabColors[TabIndex];
      Control.Canvas.FillRect(Rect);
      Control.Canvas.TextOut(Rect.Left+5,Rect.Top+3,_sTabCaptions[TabIndex]);
    End;

End.
oder so

Delphi-Quellcode:
Unit Unit1;

Interface
  Uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;

  Type TForm1 = Class(TForm)
      Procedure FormCreate(Sender: TObject);
      Procedure PageControlDrawTab(Control: TCustomTabControl; TabIndex: Integer; Const Rect: TRect; Active: Boolean);
    End;

  Var Form1: TForm1;
    _clTabColors: Array[0..4] of TColor;

Implementation
  {$R *.dfm}

  Procedure TForm1.FormCreate(Sender: TObject);
    Begin
      _clTabColors[0] := Farbe11;
      _clTabColors[1] := Farbe12;
      _clTabColors[2] := Farbe13;
      _clTabColors[3] := Farbe14;
      _clTabColors[4] := Farbe15;
    End;

  Procedure TForm1.PageControlDrawTab(Control: TCustomTabControl; TabIndex: Integer; Const Rect: TRect; Active: Boolean);
    ...
End.

schniede 29. Okt 2003 23:21

Re: Page control
 
Also was soll ich sagen bin echt sprachlos!

Danke es funzt. :roll:


bis auf dein kleinen Schreibfehler.

Code:
 Const _sTabCaptions: Array[0..4] of Otring ('    Hauptansicht', ' Einzelans.- Kunde', '

Nun kann ich beruhigt schlafen gehen.

Nochmal Danke himitsu !! mfg schniede

Christian Seehase 29. Okt 2003 23:22

Re: Page control
 
Moin Schniede,

ich hab' Dir mal ein Beispiel gebastelt, wie ich es machen würde.

Delphi-Quellcode:
const
  _iTabCount = 5;
  _aclInitTabColors : array [0.._iTabCount-1] of TColor = (clBlue,clRed,clGreen,clYellow,clWhite);
  _asTabCaptions : array [0.._iTabCount-1] of string = ('    Hauptansicht',' Einzelans.- Kunde',' Best. Waren ges.','      Warenlager',' Eigene Umsätze');

type
  TForm1 = class(TForm)
    PageControl1: TPageControl;
    procedure PageControl1DrawTab(Control: TCustomTabControl; TabIndex: Integer; const Rect: TRect; Active: Boolean);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
    FaclTabColors : array [0.._iTabCount-1] of TColor;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.PageControl1DrawTab(Control: TCustomTabControl;
  TabIndex: Integer; const Rect: TRect; Active: Boolean);

begin
  Control.Canvas.Brush.Color := FaclTabColors[TabIndex];
  Control.Canvas.FillRect(Rect);
  Control.Canvas.TextOut(Rect.Left+5,Rect.Top+3,_asTabCaptions[TabIndex]);
end;

procedure TForm1.FormCreate(Sender: TObject);

var
  i : integer;

begin
  for i := low(FaclTabColors) to high(FaclTabColors) do begin
    FaclTabColors[i] := _aclInitTabColors[i];
    with TTabSheet.Create(self) do begin
      Parent     := PageControl1;
      PageControl := PageControl1;
      Name       := 'ts'+IntToStr(i+1);
    end;
  end;
end;

end.
Wobei ich eigentlich die Konstanten noch in eine eigenen Unit auslagern würde.

schniede 29. Okt 2003 23:27

Re: Page control
 
He Ihr seid echt klasse jetzt kann ich mir gleich mehr Varianten auswählen.

Danke Christian und himitsu habt ihr super gemacht.

So nu sieht es auch gleich gut aus :roll:

mfg schniede

Christian Seehase 29. Okt 2003 23:30

Re: Page control
 
Moin Schniede,

einen hab' ich noch vergessen:

Diese Zeile:
Delphi-Quellcode:
Caption    := _asTabCaptions[i];
muss noch in das dynamische Erzeugen der Tabsheets eingefügt werden, damit deren Breite stimmt.


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