Entwickler-Ecke

Sonstiges (Delphi) - Button mit senkrechter Schrift


Cash - Mo 17.03.03 21:28
Titel: Button mit senkrechter Schrift
Hi@all

Kurze Frage:
Ich kann die vertikale Schrift erstellen, aber wenn ich meinen Code

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
var
i : Integer;
begin
if not (Sender is TButton) then Exit;

with TButton(Sender) do begin
i := GetWindowLong(Handle, GWL_STYLE);
SetWindowLong(Handle, GWL_STYLE, i or BS_MULTILINE);
Caption :=
'B' + #13#10 +
'e' + #13#10 +
'e' + #13#10 +
'n' + #13#10 +
'd' + #13#10 +
'e' + #13#10 +
'n';

Width := 50;
Height := 150;
end;

unter FormActivate schreibe, macht er mir keine vertikale Caption mehr auf dem Button. Wie kann ich es machen, dass die vertikale SChrift von Beginn an beim Starten der Form erstellt wird und nicht erst wie bei mir nach dem Clicken auf dem Sender-button.

Kann mir da einer helfen?


Cash - Di 18.03.03 16:00

Kenn mir denn wirklich keiner helfen :(


Tomac - Di 18.03.03 16:14

Schreib den Code z.B. in das OnClick Ereignis des Buttons und ruf bei form.create mit "button1.click" die Prozedur auf. So geht's bei mir.

mfG
Tomac


Cash - Di 18.03.03 16:28

HI,

Hab ich schon ausprobiert, es funtzt aber nicht :(
Und außerdem stehen einige Dinge in diesem Button, die erst beim clicken des Buttons geschehen sollen. So wie du es vorschlägst, würden alle Anweisungen beim Starten geschehen. Das soll es aber nicht.


MKehrer - Di 18.03.03 16:37

also folgender Code funzt bei mir

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
if not (Sender is TButton) then Exit;

with TButton(Sender) do begin
i := GetWindowLong(Handle, GWL_STYLE);
SetWindowLong(Handle, GWL_STYLE, i or BS_MULTILINE);
Caption :=
'B' + #13#10 +
'e' + #13#10 +
'e' + #13#10 +
'n' + #13#10 +
'd' + #13#10 +
'e' + #13#10 +
'n';

Width := 50;
Height := 150;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  button1Click(button1);
end;

end.


Ansonsten nimm einem Timer.
Den stellt Du auf Intervall 1 und sorgt Dafür, daß er nur einmal
aufgerufen wird und dort erledigst Du das gewünschte.

Ist aber nicht die elegante Art so was zu lösen.
Wenn man alten Code mit solchen Schweinereien restaurieren muß (und das muß ich zum Teil) ist man arm dran.


Delete - Di 18.03.03 16:46


Quelltext
1:
2:
3:
4:
5:
procedure TForm1.FormCreate(Sender: TObject);
begin
  SetWindowLong(Button1.Handle, GWL_STYLE, GetWindowLong(Button1.Handle, GWL_STYLE) or BS_MULTILINE);
  Button1.Caption := 'H'+#13#10+'o'+#13#10+'l'+#13#10+'l'+#13#10+'o';
end;

Und das funktionniert bei mir im OnCreate. Ich weiß nicht, was ihr dafür Probleme habt. :shock:


Cash - Di 18.03.03 18:37

Hi,

Komisch wieso funktioniert das von LUCKIE jetzt?! Wieso funtzt meins nicht?

Hab dann noch ne Frage: Kann man die obige Leiste von der Form wo anders positionieren zB an den linken Rand?


Delete - Di 18.03.03 19:01

Neue Frage, neuer Thread.

Aber ohne ohne aufwendiges selber zeichnen wird das nichts werden.