| Autor |
Beitrag |
Kaze91
Hält's aus hier
Beiträge: 5
Win 7, Ubuntu 11.10, Osx Lion
Delphi XE2, VB 2010, Php, Mysql
|
Verfasst: Di 21.02.12 18:01
Hey Leute ich habe vor ein paar Monaten mit Delphi Angefangen , hatte auch einige Probleme aber alle gelöst bekommen. Nur 1 leider nicht.
Deshalb möchte ich mich erst mal als neuer in diesem Forum vorstellen. Ich bin 20 Jahre , mache mein Fachabitur und liebe alles was mit Technik zu tun hat.
Jetzt zu meinem Problem :
Ich würde gerne überprüfen ob sich die Linienanzahl meines Memo Feldes verändert, wenn meine Form nicht aktiv ist. Wenn sie sich geändert soll das Fenster blinken.
Wie ihr seht habe ich zum Überprüfen die Zeilenanzahl in ein Label geschrieben. Funktioniert auch , aber leider setzt er den Label sobald das Fenster inaktiv ist auf 1 =( .
Ich hoffe ihr könnt mir helfen.
Hier der Code
Delphi-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:
| procedure TForm1.Timer2Timer(Sender: TObject); var oldline : Integer; newline : Integer; oldlines : String; newlines : String;
begin newline := dialog.Lines.Count; newlines := IntToStr(newline); oldlines := Label3.Caption;
if not Application.Active then begin if oldlines>newlines then begin FlashWindow(self.Handle, True); end end;
if Application.Active then oldline := dialog.Lines.Count; Label3.Caption := IntToStr(oldline);
end; |
Moderiert von Narses: Code- durch Delphi-Tags ersetzt
Moderiert von Narses: Topic aus Sonstiges (Delphi) verschoben am Di 21.02.2012 um 17:16
Moderiert von Narses: Emoticon aus dem Titel entfernt.
|
|
jaenicke
      
Beiträge: 19340
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 21.02.12 18:20
Für diesen Beitrag haben gedankt: Kaze91
|
|
Kaze91 
Hält's aus hier
Beiträge: 5
Win 7, Ubuntu 11.10, Osx Lion
Delphi XE2, VB 2010, Php, Mysql
|
Verfasst: Di 21.02.12 20:14
jaenicke hat folgendes geschrieben : |
Die markierte Zeile gehört nicht mehr zu dem vorhergehenden if dazu, sondern wird immer ausgeführt. Das soll vermutlich nicht so sein.  |
Hey erstmal danke für die Antwort, doch das ist schon richtig so sonst wären die beiden Zahlen oben ja immer gleich
Noch jemand eine Idee?
Edit: Allerdings scheint es nach dem vergessenen Begin und end zu klappen =) vielen Dank !
|
|
Narses
      

Beiträge: 10184
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Di 21.02.12 20:52
Moin!
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| var oldline : Integer; newline : Integer; oldlines : String; newlines : String; if oldlines > newlines then | Du vergleichst da zwei Strings, meinst aber vermutlich Integers. Bei Strings ist "10" > "200" wahr!
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Di 21.02.12 22:06
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
Kaze91 
Hält's aus hier
Beiträge: 5
Win 7, Ubuntu 11.10, Osx Lion
Delphi XE2, VB 2010, Php, Mysql
|
Verfasst: Di 21.02.12 23:51
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Mi 22.02.12 11:20
Kaze91 hat folgendes geschrieben : |
Ok aber mit Iteger sagt er mir , dass er diesen Operator (<) nicht verwenden kann. Gibt es sowas wie Value? |
Machs doch so: Du machst eine "globale" Variable var oldLines: Integer. Dann kürzt sich dein Code auf:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.Timer2Timer(Sender: TObject); var newlines : Integer; begin newlines := dialog.Lines.Count;
if oldlines<>newlines then begin if not (Application.Active) then FlashWindow(self.Handle, True); else oldLines := newLines; Label3.Caption := IntToStr(oldLines ); end; end; |
Du solltest nicht einen Integer in ein Label schreiben um anschließend aus dem Label wieder den Integer auszulesen. Als nächstes willst du dann im Label "42 Zeilen" anzeigen lassen und schon gibts Probleme.
Mit StrToInt kann man einen String wieder in einen Integer umwandeln (falls es ein gültiger Integer ist, sonst gibt es eine Exception). Mit TryStrToInt kannst du das nebenbei noch testen.
Edit:
Wenn du unbedingt den im Label angezeigten Wert im Label speichern willst (als Integer) kannst du es auch in Label.Tag speichern statt in einer globalen Variablen OldLines. Das find ich aber ziemlich unsauber 
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
Kaze91 
Hält's aus hier
Beiträge: 5
Win 7, Ubuntu 11.10, Osx Lion
Delphi XE2, VB 2010, Php, Mysql
|
Verfasst: Mi 22.02.12 13:19
Ok ersteinmal vielen Dank ich werde es sobald wie möglich austesten.
Den Label hab ich ja nur zum Testen genommen weil es nie funktioniert hat, danach kommt der weg .
Mfg
|
|
Kaze91 
Hält's aus hier
Beiträge: 5
Win 7, Ubuntu 11.10, Osx Lion
Delphi XE2, VB 2010, Php, Mysql
|
Verfasst: Fr 24.02.12 18:24
Moderiert von Narses: Komplett-Zitat von Xions letztem Beitrags entfernt.
So hab ich jetzt probiert , allerdings blinkt es jetzt immer wenn ich das Fenster nicht aktiv habe =(
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Fr 24.02.12 21:05
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
|