Entwickler-Ecke
Windows API - Editfeld mit zentriertem Text...
Rool - Di 08.04.03 15:43
Titel: Editfeld mit zentriertem Text...
Wie kann ich den Text in meinem editfeld zentrieren???
patrick - Di 08.04.03 18:13
das ist mit der standart komponenten nicht möglich.
musst dir ne alternative runterladen die das kann.
(frag mich nich welche das kann) :oops:
fcg - Di 08.04.03 18:43
versuch es mit den length und width Eigenschaften des Edit-Feldes. Das irgendwie so hinzurechnen, das der string (mit nen paar leerzeichen vielleicht) in der mitte steht.
fcg
wulfskin - Di 08.04.03 19:39
Hallo Rool!
Im Prinzip können das die Windowskomponenten schon, nur muss man denen das vor dem Erstellen sagen und das kann Delphi leider nicht.
Die einzige Möglichkeit ist es, das Edit manuell zu erstellen (näheres zu finden in Luckie's nonVCL Hilfe):
Quelltext
1: 2: 3: 4: 5: 6: 7:
| const IDC_EDIT = 1;
procedure TForm1.Button1Click(Sender: TObject); begin hwndEdit := CreateWindowEx(WS_EX_CLIENTEDGE, 'EDIT', 'Edit1', WS_VISIBLE or WS_CHILD or ES_CENTER, 10, 20, 400, 20, Handle, IDC_EDIT, hInstance, nil); |
| Zitat: |
| After the control has been created, these styles cannot be modified, except as noted. |
Gruß wulfskin!
Delete - Di 08.04.03 21:40
| wulfskin hat folgendes geschrieben: |
| Die einzige Möglichkeit ist es, das Edit manuell zu erstellen (näheres zu finden in Luckie's nonVCL Hilfe): |
Davon würde ich abraten, weil so erstellte Controls nicht mehr mit TAB angesteuert werden können. Diese Lektion musste ich beim Versuch lernen, ein IP-Control in ein VCL-Programm einbinden zu wollen.
Also, hier sollte man sich entweder eine passende Komponente besorgen, oder (entsprechende Kenntnisse vorausgesetzt) man erweitert die Standard-Komponente von Delphi um das entsprechende Stilattribut (hab´s nicht probiert, aber es wäre eine Idee), oder man schreibt das Programm, sofern möglich!, ohne VCL auf dem API-Weg.
wulfskin - Di 08.04.03 22:06
Hast ja wie immer recht, war ja nur so ne Idee ;)!
Delete - Mi 09.04.03 06:56
Nix für ungut, wulfskin. Wollte bloß meinen Senf dazu geben. :)
Tino - Mi 09.04.03 10:41
Hallo,
ich habe mir mal eine kleine Komponente gebastelt die das kann:
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:
| type tAlignmentEdit = class(TEdit) private fAlignment: TAlignment; protected procedure SetAlignment (Value: TAlignment); public procedure CreateParams (var Params: TCreateParams); override; published property Alignment: TAlignment read FAlignment write SetAlignment default taLeftJustify; end; procedure Register;
implementation
procedure tAlignmentEdit.CreateParams (var Params: TCreateParams); const cAlignments : Array [TAlignment] of Longint = (ES_LEFT, ES_RIGHT, ES_CENTER); begin inherited CreateParams (Params); Params.Style := Params.Style or cAlignments [FAlignment] or ES_MULTILINE; end;
procedure tAlignmentEdit.SetAlignment; begin if FAlignment <> Value then begin FAlignment := Value; RecreateWnd; end; end;
procedure Register; begin RegisterComponents('Samples', [tAlignmentEdit]); end; |
Gruß
Tino
Motzi - Mi 09.04.03 10:43
@Tino: Wieso aktivierst du Multiline in einem Edit?!? :shock:
Rool - Mi 09.04.03 15:13
Titel: ...
jau, vielen dank für eure antworten.
das die komponente nicht mit tab angesteuert weden kann, ist gar nicht schlimm, sie ist eigentlich immer unsichtbar, nur wenn man doppelt auf n label klickte, legt sich das feld darüber und man kann die werte editieren. sobald der focus das control verlässt wird es wieder unsichtbar. deswegen: DANKE!!!
Tino - Do 10.04.03 10:14
| Motzi hat folgendes geschrieben: |
| @Tino: Wieso aktivierst du Multiline in einem Edit?!? :shock: |
Ich hatte die Komponete einwenig vom Funktionumfang gekürzt (extra für die Frage von Rool) und habe es wohl übersehen. Hier der komplette Code der Komponente:
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:
| Type tAlignmentEdit = class(TEdit) private FAlignment: TAlignment; FMultiline: Boolean; protected procedure SetAlignment (Value: TAlignment); procedure SetMultiline (Value: Boolean); public procedure CreateParams (var Params: TCreateParams); override; published property Alignment: TAlignment read FAlignment write SetAlignment default taLeftJustify; property Multiline: Boolean read FMultiline write SetMultiline; End;
procedure tAlignmentEdit.CreateParams (var Params: TCreateParams); const cAlignments : Array [TAlignment] of Longint = (ES_LEFT, ES_RIGHT, ES_CENTER); cMultiline : Array [Boolean] of Longint = (0, ES_MULTILINE); begin inherited CreateParams (Params); Params.Style := Params.Style or cAlignments [FAlignment] or cMultiline [FMultiline]; end;
procedure tAlignmentEdit.SetAlignment; begin if FAlignment <> Value then begin FAlignment := Value; RecreateWnd; end; end;
procedure tAlignmentEdit.SetMultiline (Value: Boolean); begin if FMultiline <> Value then begin FMultiline := Value; RecreateWnd; end; end; |
Gruß
Tino
The_Unknown - Mo 14.04.03 20:44
Nimm doch ein Memo, welches du zentriert setzt (das ist nich das problem). Leider kann der user einen Zeilenumbruch machen, den müsste man unterdrücken...
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!