Autor Beitrag
Kaze91
Hält's aus hier
Beiträge: 5

Win 7, Ubuntu 11.10, Osx Lion
Delphi XE2, VB 2010, Php, Mysql
BeitragVerfasst: 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
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:
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 user profile iconNarses: Code- durch Delphi-Tags ersetzt
Moderiert von user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am Di 21.02.2012 um 17:16
Moderiert von user profile iconNarses: Emoticon aus dem Titel entfernt.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19340
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 21.02.12 18:20 
Hallo und :welcome: im Forum!

Wenn du den Quelltext ordentlich einrücken würdest, würdest du leichter sehen, dass da ein begin..end fehlt. ;-)
user profile iconKaze91 hat folgendes geschrieben Zum zitierten Posting springen:
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:
23:
24:
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;
Die markierte Zeile gehört nicht mehr zu dem vorhergehenden if dazu, sondern wird immer ausgeführt. Das soll vermutlich nicht so sein. ;-)

Für diesen Beitrag haben gedankt: Kaze91
Kaze91 Threadstarter
Hält's aus hier
Beiträge: 5

Win 7, Ubuntu 11.10, Osx Lion
Delphi XE2, VB 2010, Php, Mysql
BeitragVerfasst: Di 21.02.12 20:14 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:

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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10184
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Di 21.02.12 20:52 
Moin!

ausblenden 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! :idea: :shock:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
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)
BeitragVerfasst: Di 21.02.12 22:06 
user profile iconKaze91 hat folgendes geschrieben Zum zitierten Posting springen:
Hey erstmal danke für die Antwort, doch das ist schon richtig so sonst wären die beiden Zahlen oben ja immer gleich ;)


In dem Fall, dass das Fenster inaktiv ist, ist aber oldline unbestimmt (da du ihm zuvor nichts zugewiesen hast und es eine lokale Variable ist!). Dann wird "irgendwas" ausgegeben.

_________________
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 Threadstarter
Hält's aus hier
Beiträge: 5

Win 7, Ubuntu 11.10, Osx Lion
Delphi XE2, VB 2010, Php, Mysql
BeitragVerfasst: Di 21.02.12 23:51 
user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:

Du vergleichst da zwei Strings, meinst aber vermutlich Integers. Bei Strings ist "10" > "200" wahr!


Ok aber mit Iteger sagt er mir , dass er diesen Operator (<) nicht verwenden kann. Gibt es sowas wie Value? Obwohl ich iwie dachte es funktioniert.

user profile iconXion hat folgendes geschrieben Zum zitierten Posting springen:

In dem Fall, dass das Fenster inaktiv ist, ist aber oldline unbestimmt (da du ihm zuvor nichts zugewiesen hast und es eine lokale Variable ist!). Dann wird "irgendwas" ausgegeben.


Wenn das Fesnter inaktiv ist wird oldline ja auch nicht benötigt sondern oldlines
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
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)
BeitragVerfasst: Mi 22.02.12 11:20 
user profile iconKaze91 hat folgendes geschrieben Zum zitierten Posting springen:

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:
ausblenden 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); //veränderte Zeilenzahl bei inaktivem Fenster: Flash
      else
         oldLines := newLines;
      Label3.Caption := IntToStr(oldLines ); //die Zeilenzahl ausgeben, die der User zuletzt gesehen hat
    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 Threadstarter
Hält's aus hier
Beiträge: 5

Win 7, Ubuntu 11.10, Osx Lion
Delphi XE2, VB 2010, Php, Mysql
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 5

Win 7, Ubuntu 11.10, Osx Lion
Delphi XE2, VB 2010, Php, Mysql
BeitragVerfasst: Fr 24.02.12 18:24 
Moderiert von user profile iconNarses: Komplett-Zitat von user profile iconXions letztem Beitrags entfernt.

So hab ich jetzt probiert , allerdings blinkt es jetzt immer wenn ich das Fenster nicht aktiv habe =(
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
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)
BeitragVerfasst: Fr 24.02.12 21:05 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TForm1.Timer2Timer(Sender: TObject);
var  newlines : Integer;
begin
  newlines := dialog.Lines.Count;

  if (Application.Active) then
    oldLines := newLines
  else if oldlines<>newlines then
    begin
      FlashWindow(self.Handle, True);
      Label3.Caption := IntToStr(oldLines ); 
    end;
end;

;)

Ob das funktioniert hängt von deiner Timerschleife ab (die müsste dann sehr kurz sein). Du solltest oldLines nochmal setzen, wenn das Fenster aktiv wird, dann bist du auf der sicheren Seite.

_________________
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)