![]() |
'Ich hab ein Brett vor dem Kopf' oder 'inc(var)'
Hallo.
Entschuldigung bitte für den etwas komischen Titel abe rmir ist nicht wirklich etwas sinnvolles eingefallen, da mein Gefühl für Sinn bereits verloren gegenagen ist - zumindest bei dme Problem was ich euch nun schildere. Also es geht darum. Man drückt auf eine Button. Darauf wird in ein Memofeld ein Zusätzliches STück Text gehängt und die Beschriftung des Buttons wird geändert. Wenn man nun wieder auf den gleichen Button klickt, wird wiederum ein Stück Text in das MemoFeld geschriben und die Beschriftugn des Textes wieder in den Urzustand zurckversetzt. ich bekomm e sjedoch nicht gebacken, dass es funktioniert. Warscheinlich ein blöder Fehler und ich werde im Nachhinein sagen "U're a such a fool" ;) nun gut... hier ist der Quelltext:
Delphi-Quellcode:
procedure TForm1.SBbClick(Sender: TObject);
var VFett :Integer ; begin inc(VFett); If VFett = 1 Then begin MText.Text:= MText.Text + ' [b] ' ; SBb.Caption:= '[/b]' ; end Else If VFett = 2 Then begin MText.Text:= MText.Text + ' [/b] ' ; SBb.Caption:='[b]' ; end; end; end. Mit freundlichen Grüßen |
Re: 'Ich hab ein Brett vor dem Kopf' oder 'inv(var)'
Leider ist VFett am Anfang nicht 0, sondern gänzlich undefiniert. Du musst VFett einen konkreten Wert zuweisen.
Der Compiler müsste auch eine Warnung ala "Variable X might not have been initialized" anzeigen. |
Re: 'Ich hab ein Brett vor dem Kopf' oder 'inv(var)'
Hmmm, ich würde da eher ein Boolean nehmen:
Delphi-Quellcode:
Gruß,
var VFett: Boolean = false;
// Global, sonst "merkt sich" Delphi den Wert nicht ;-) procedure TForm1.SBbClick(Sender: TObject); begin VFett := not VFett; If VFett Then begin MText.Text:= MText.Text + ' [b] ' ; SBb.Caption:= '[/b]' ; end else begin MText.Text:= MText.Text + ' [/b] ' ; SBb.Caption:='[b]' ; end; end; end. ManuMF |
Re: 'Ich hab ein Brett vor dem Kopf' oder 'inv(var)'
Das ist doch ganz einfach: Du hast eine lokale Variable VFett in deiner Prozedur. Die hat zu Beginn irgendeinen zufälligen Wert, auf den du 1 addierst (also Zufall + 1, he, he). Manchmal ist das sogar 1 oder 2, meistens aber was anderes.
Deklariere in TForm1 eine private Variable VFett:boolean und initialisiere die in FormCreate mit FALSE. Die Prozedur so abändern:
Delphi-Quellcode:
--------------------------------
procedure TForm1.SBbClick(Sender: TObject);
begin If not VFett Then begin MText.Text:= MText.Text + ' [b] ' ; SBb.Caption:= '[/b]' ; end Else begin MText.Text:= MText.Text + ' [/b] ' ; SBb.Caption:='[b]' ; end; VFett := not VFett end; jaja, zu langsam |
Re: 'Ich hab ein Brett vor dem Kopf' oder 'inc(var)'
Oha... mit so ne schnellen Antworten habe ich garnicht gerechnet! ;)
Jaa da kommt durchaus die Meldung "...konnt enicht initialisiert werden." aber ich wusste nicht was er damit meinte. Was meinst du mit der Stelle:
Delphi-Quellcode:
und
VFett := not VFett;
Delphi-Quellcode:
???
If VFett Then
Bei der IF Abfrage wir ddoch nichts verglichen... !? Könntets du mir die Stellen erläutern ? mfg CYa /€dit: Ich habe das jetzt so geöst, dass ich die Var VFett als globale Variable mit dem Wert 0 deklariert habe.
Delphi-Quellcode:
procedure TForm1.SBbClick(Sender: TObject);
begin inc(VFett); If VFett = 1 Then begin MText.Text:= MText.Text + ' [b] ' ; SBb.Caption:= '[/b]' ; end Else If VFett = 2 Then begin MText.Text:= MText.Text + ' [/b] ' ; SBb.Caption:='[b]' ; VFett:= 0 ; end; end; end. Globale Var:
Delphi-Quellcode:
var
Form1: TForm1; Satz: String; VFett: Integer = 0 ; So nun abe rnoch eine Frage: Wie stelle ich es an, dass der Curser im Memofeld immer am Textende platziert wird ? @ tomsel mit
Delphi-Quellcode:
habe ich e sja versucht aber es ging komischer weise nicht ....
VFett:= Vfett + 1 ;
|
Re: 'Ich hab ein Brett vor dem Kopf' oder 'inc(var)'
Zitat:
|
Re: 'Ich hab ein Brett vor dem Kopf' oder 'inc(var)'
Oh ok.
Naja es geht nun. Aber hab imme rnoch ein Problem. Wie kann ich denn an der Stelle des Cursors, also da wo er blinkt, z.B. Texte i ein Memofeld einfügen ? Bzw. wie schaffe iche , dass der Cursor imme rzum Ende eines Textes springt, wenn man einem Memofeld eine neuen Text zufügt? mfg Cya |
Re: 'Ich hab ein Brett vor dem Kopf' oder 'inc(var)'
Also, mit "If Boolean" wird abgefragt, ob der Boolean = true ist. "If Boolean = true" kann jedoch zu Fehlern führen (siehe
![]() Genauso kann dem Boolean das Gegenteil seines Zustandes zugewiesen werden: "Boolean := not Boolean". Gruß, ManuMF |
Re: 'Ich hab ein Brett vor dem Kopf' oder 'inc(var)'
Zitat:
|
Re: 'Ich hab ein Brett vor dem Kopf' oder 'inc(var)'
Ach ja, der text im Memo: Ich nehm für solche zwecke lieber ein Richedit. Da hat man bessere Manipulationsmöglichkeiten. Mit SelStart, SelEnd, Selection.Collapse und Selection.Text etc. müsstest du eigentlich dein Ziel erreichen können.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:15 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