Autor Beitrag
Stauch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 140

Win 2000, Win XP
D4
BeitragVerfasst: Fr 15.11.02 11:05 
Gibt es eine (einfache) Variante Text in Tedit- oder TStringGrid- Elementen
rechtsbündig oder zentriert auszurichten.

Oder hat jemand einen Tip, in welche Richtung ich experimentieren könnte?

C.

_________________
Geht das? Und wenn ja, warum nicht?
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Fr 15.11.02 22:08 
Hallo

in einem Tedit kann ich es dir nicht sagen, in einem Stringgrid geht dies sehr wohl, indem du im ONdrawCell-ereignis die Zelle selber zeichnest.
mit textout kannst du den text an einer bestimmten position ausgeben. Mit Textwidth kannst du die Textlänge bestimmen und mit ein wenig mathematik den text rechtsbündig ausgeben.

einfach ? es gibt schwierigere sachen :wink:

Mfg Frank
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: So 17.11.02 18:00 
Hallo,

die tEdit Komponente bietet Dir leider nicht die Möglichkeit einen Text z. B. Rechtsbündig auszurichten!

Du kannst aber eine Abgeleitetekomponete von tEdit erstellen. Hier mal ein Beispiel:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
type
  tRightEdit = Class (tEdit)
  Protected
    Procedure CreateParams (var Params: tCreateParams); override;
  End;

Procedure Register;

Implementation

Procedure Register;
Begin
  RegisterComponents('Samples',  [tRightEdit]);
End;

{ tRightEdit }

Procedure tRightEdit.CreateParams (var Params: tCreateParams);
Begin
  Inherited CreateParams (Params);
  Params.Style := Params.Style or ES_RIGHT;
End;


Gruß
TINO

Moderiert von user profile iconTino: Code- durch Delphi-Tags ersetzt.


Zuletzt bearbeitet von Tino am Mi 27.10.04 09:36, insgesamt 1-mal bearbeitet
Stauch Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 140

Win 2000, Win XP
D4
BeitragVerfasst: Mo 18.11.02 12:49 
Bin am ausprobieren.
:)
Danke

C.

_________________
Geht das? Und wenn ja, warum nicht?
Stauch Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 140

Win 2000, Win XP
D4
BeitragVerfasst: Mo 18.11.02 13:26 
Wahrscheinlich eine ziemlich blöde Frage aber was solls :oops:

Wie löse ich das OnDrawCell Ereignis aus???

C.

_________________
Geht das? Und wenn ja, warum nicht?
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Mo 18.11.02 13:44 
drück mal f1 ! und lies dir erstmal durch was bei ondrawcell steht.

Mfg Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
Stauch Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 140

Win 2000, Win XP
D4
BeitragVerfasst: Mo 18.11.02 13:50 
Danke für den Hinweis :?
Aber das hatte ich bereits und das Fragezeichen über meinem Haupt ist davon nicht kleiner geworden

C.

_________________
Geht das? Und wenn ja, warum nicht?
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Mo 18.11.02 14:07 
das ereignis wird ausgelöst, wenn eine Zelle neu gezeichnet werden muß.

du willst ja drauf reagieren und es nicht unbedingt auslösen.

mit Stringrid.repaint zeichnest du das grid neu, damit wird für jede Zelle auch einzeln das ondrawcell - ereignis ausgelöst.

Beispiel für ondrawcell:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
procedure TForm1.Stringgrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var s:string;
begin
  with (sender as Tstringgrid) do
    begin
      //Zellhintergrund  (jede zweite Zeile blau)
      if (arow mod 2) = 0 then canvas.brush.color:=clblue
                          else canvas.brush.color:=clwhite;
      if gdfixed in state then canvas.brush.color:=fixedcolor;
      canvas.fillrect(rect);

      //jede zweite splate rechtsbündig
      s:=cells[acol,arow];
      if (acol mod 2) = 0 then
        canvas.textrect(rect,rect.Right-canvas.textwidth(s)-2,rect.top+2,s)
       else
        canvas.textout(rect.left+2,rect.top+2,s);
    end;
end;


mfg Frank

Moderiert von user profile iconTino: Code- durch Delphi-Tags ersetzt.

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 18.11.02 14:09 
So und das ganze jetzt noch mit rechts ausgerichteten Text:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  sz: TSize;
  x: Integer;
  s: String;
begin
  s := StringGrid1.cells[ACol,ARow];
  sz := StringGrid1.Canvas.TextExtent(s);
  x := Rect.Right-Rect.Left-sz.cx-2;
  StringGrid1.Canvas.TextOut(x, Rect.Top, s);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  StringGrid1.Cells[0,0] := 'Hello World';
  StringGrid1.DefaultDrawing := False;
end;


Moderiert von user profile iconTino: Code- durch Delphi-Tags ersetzt.
Stauch Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 140

Win 2000, Win XP
D4
BeitragVerfasst: Mo 18.11.02 14:47 
Danke, daß hilft mir weiter.
Keldorn hat folgendes geschrieben:
das ereignis wird ausgelöst, wenn eine Zelle neu gezeichnet werden muß.

du willst ja drauf reagieren und es nicht unbedingt auslösen.

mit Stringrid.repaint zeichnest du das grid neu, damit wird für jede Zelle auch einzeln das ondrawcell - ereignis ausgelöst.

Doch doch, ich wollte es schon auslösen, die DrawCell-Procedure habe ich ja teilweise schon lauffähig, aber ich wußte halt nicht, wie sie gestartet werden kann.
Nochmal Danke an alle
C. :)

_________________
Geht das? Und wenn ja, warum nicht?
cwille
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39

xp,win2003-server,linux
D7 Enterprise
BeitragVerfasst: Mi 27.10.04 13:43 
Hallo Tino,

wie und unter welchem Ereignis muß ich die Methode CreateParams aufrufen.
Ist es nicht so das RecreateWnd und createWnd CreateParams aufrufen.
Mit nachfolgender Anweisung habe ich mal rumprobiert. Hat aber leider nicht funktioniert.


procedure TFrmAuszErf.TxtBetragKeyPress(Sender: TObject; var Key: Char);
var Alignm :tRightEdit;
alignment : TAlignment;
begin
if (key = #13) OR (key =#9) Then
Begin
alignment:=taRightJustify;
?????
End;

Danke und Gruß
Carsten

Tino hat folgendes geschrieben:
Hallo,

die tEdit Komponente bietet Dir leider nicht die Möglichkeit einen Text z. B. Rechtsbündig auszurichten!

Du kannst aber eine Abgeleitetekomponete von tEdit erstellen. Hier mal ein Beispiel:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
type
  tRightEdit = Class (tEdit)
  Protected
    Procedure CreateParams (var Params: tCreateParams); override;
  End;

Procedure Register;

Implementation

Procedure Register;
Begin
  RegisterComponents('Samples',  [tRightEdit]);
End;

{ tRightEdit }

Procedure tRightEdit.CreateParams (var Params: tCreateParams);
Begin
  Inherited CreateParams (Params);
  Params.Style := Params.Style or ES_RIGHT;
End;


Gruß
TINO

Moderiert von user profile iconTino: Code- durch Delphi-Tags ersetzt.