AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Frage zu Memo-Funktionsweise

Ein Thema von fragme · begonnen am 17. Jan 2005 · letzter Beitrag vom 18. Jan 2005
Antwort Antwort
Benutzerbild von fragme
fragme

Registriert seit: 13. Jan 2005
Ort: Bottrop
9 Beiträge
 
Delphi 6 Personal
 
#1

Frage zu Memo-Funktionsweise

  Alt 17. Jan 2005, 07:39
Hi,

kann mir einer sagen warum das hier nicht funktioniert:

Delphi-Quellcode:
procedure TForm1.EditAlarmChange(Sender: TObject);
var MemoText: String;
begin
  if StringGrid.Cells[0,1] = DateToStr(Date) then
  begin
    if StringGrid.Cells[1,1] = copy(LabelUhr.Caption,1,5) then
    begin
      Datei := StringGrid.Cells[2,1];
      MemoText := DateTimeToStr(Date + Time);
      Memo.Lines.Strings[MemoLine] := MemoText;
      MemoLine := MemoLine +1;
      if Datei <> 'then begin
        ShellExecute(Application.Handle, 'open', PChar(Datei), nil, nil, SW_NORMAL);
        MemoText := ' - ' + Datei + ' wird ausgeführt';
        Memo.Lines.Strings[MemoLine] := MemoText;
        MemoLine := MemoLine +1;
      end;
      Text := StringGrid.Cells[3,1];
      if Text <> 'then begin
        showmessage(Text);
        MemoText := ' - ' + Text + ' angezeigt';
        Memo.Lines.Strings[MemoLine] := MemoText;
        MemoLine := MemoLine +1;
      end;
    end;
  end;
end;
Das Ergebnis sieht so aus:

17.01.2005 07:38:00
- F:\- Eigene Dateien -\Delphi\Taskplaner\Nero.exe wird ausgeführt

THX
fragme
Christopher
  Mit Zitat antworten Zitat
Benutzerbild von fragme
fragme

Registriert seit: 13. Jan 2005
Ort: Bottrop
9 Beiträge
 
Delphi 6 Personal
 
#2

Re: Frage zu Memo-Funktionsweise

  Alt 17. Jan 2005, 08:23
Was stattdessen passiert ist, dass Form1.Caption auf den Inhalt von Text gesetzt wird, obwohl ich nirgends eine Zuweisung dafür im Programm hab.
Christopher
  Mit Zitat antworten Zitat
Benutzerbild von fragme
fragme

Registriert seit: 13. Jan 2005
Ort: Bottrop
9 Beiträge
 
Delphi 6 Personal
 
#3

Re: Frage zu Memo-Funktionsweise

  Alt 17. Jan 2005, 09:33
und beim Weiterprggen stellt sich gleich noch eine Frage

Beim Rechtsklick auf StringGrid soll ein PopUp Menü erscheinen, in dem man Zeile löschen auswählen kann, soweit ganz einfach, aber wie kann ich rausfinden, in welcher Zeile der Click stattgefunden hat?
Christopher
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#4

Re: Frage zu Memo-Funktionsweise

  Alt 17. Jan 2005, 09:47
Moin!

Erstmal: Schon 23 und immernoch nicht den Edit Button gefunden um seine Beiträge zu editieren?
Und dann noch: Mehrere Fragen: mehrere Threads!

Zitat von fragme:
Was stattdessen passiert ist, dass Form1.Caption auf den Inhalt von Text gesetzt wird, obwohl ich nirgends eine Zuweisung dafür im Programm hab.
TForm.Text = TForm.Caption - Daher ist es völlig normal, das deine Caption des Forms den Inhalt von Text bekommt - schon alleine sollte sich für dich die Frage stellen wo du denn Text definiert hast - und ich hoffe doch jetzt nicht das hier eine globale oder Unit-globale Deklaration von einer Stringvariable gepostet wird...

Zitat von fragme:
Beim Rechtsklick auf StringGrid soll ein PopUp Menü erscheinen, in dem man Zeile löschen auswählen kann, soweit ganz einfach, aber wie kann ich rausfinden, in welcher Zeile der Click stattgefunden hat?
Nutze das MouseUp Ereignis und frage anhand der übergebenen X, Y Koordinate das StringGrid welche Zelle darunter liegt (CellAt(), o.ä.). Dieser Weg ist einer von vielen - ich denke mal da gibt es noch andere, bessere Möglichkeiten.

MfG
Muetze1
  Mit Zitat antworten Zitat
Benutzerbild von fragme
fragme

Registriert seit: 13. Jan 2005
Ort: Bottrop
9 Beiträge
 
Delphi 6 Personal
 
#5

Re: Frage zu Memo-Funktionsweise

  Alt 17. Jan 2005, 10:00
ok, werd ich mir merken fürs nächste mal

Text ist eine globale Variable, das ist soweit richtig, aber ich hatte das selbe Problem, als ich das Memo mit '----------' initialisiert hab und das ändern der Variable 'Text' hat auch nicht geholfen.

kann es auch an dem '-' liegen ?
Christopher
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#6

Re: Frage zu Memo-Funktionsweise

  Alt 17. Jan 2005, 14:57
Moin!

Zitat von fragme:
Text ist eine globale Variable, ...
Hatte ich nicht gesagt, das ich sowas nicht hören wollte?

Also, deine Methode ist eine Methode von TForm1 und somit haben da die Eigenschaften und Variablen der TForm1 einen höheren Rang und liegen im Fokus. Wenn du nun aber eine globale Variable hast, dann schaut der Compiler diese nicht mal mit seinem Hintern an, da er als erstes in dem aktuellen Fokus nachschaut (also TForm1) und da schon eine Eigenschaft "Text" findet und daher diese nutzt. Das hatte ich dir vorhin schon geschrieben. Also hoffe ich mal das du jetzt verstehst woran es liegt.

Ansonsten frage ich mich, warum heutzutage für sowas noch globale Variablen benutzt werden. Warum global? Warum nicht private oder wenn es sein muss auch public, aber warum global? Warum nur?

MfG
Muetze1
  Mit Zitat antworten Zitat
Benutzerbild von fragme
fragme

Registriert seit: 13. Jan 2005
Ort: Bottrop
9 Beiträge
 
Delphi 6 Personal
 
#7

Re: Frage zu Memo-Funktionsweise

  Alt 17. Jan 2005, 16:29
aha, ich hoffe ich hab verstanden was du meinst.

Also müsste es nach deiner Aussage reichen die Variable als private oder public zu deklarieren ?
Christopher
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#8

Re: Frage zu Memo-Funktionsweise

  Alt 18. Jan 2005, 01:21
Moin!

Zitat von fragme:
aha, ich hoffe ich hab verstanden was du meinst.

Also müsste es nach deiner Aussage reichen die Variable als private oder public zu deklarieren ?
Ja, das wäre noch die beste Lösund - ich würde dir aber vorschlagen sie umzubenennen, damit du keine Doppeldeutigkeit mehr hast. Schliesslich erbt die TForm1 schon von TForm die Eigenschaft Text, daher solltest du dein Variable anders nennen. Mal ganz abgesehen davon: wofür brauchst du die Variable überhaupt ausserhalb der Funktion? Sollte es nicht einfach nur reichen diese Variable in der Funktion/Procedure als lokale Variable zu definieren?

Ansonsten könntest du auch die globale Variable umbennen - aber wie gesagt: lieber ins private bewegen und anders nennen.

Ich für meinen Teil habe folgende Bennungen:

-> alle lokalen Variablen in Funktionen/Proceduren bekommen ein kleines l vor der sonst ungarischen Notation (z.B: lElement : TElement) --- hierbei gilt diese Regel nicht für Zählvariablen bzw. Laufvariablen bestehend aus einem Zeichen (z.B.: Var i : Integer)
-> alle Variablen innerhalb von Klassen (nicht public/published) bekommen ein kleines f vor der sonst ungarischen Notation (z.B. fLibrary : TLibrary
-> alle Ereignismethodenvariablen bekommen ein grosses F vor der sonst ungarischen Notation (z.B. FOnChange : TNotifyEvent
-> alle Elemente die Public sind bzw. Property-Namen sind direkt in ungarischer Notation ohne Prefix (z.B. Property OnChange : TNotifyEvent Read FOnChange Write FOnChange
-> alle Konstanten bekommen ein kleines co vor der sonst ungarischen Notation (z.B: Const coElemDiff = 4
-> alle globalen Variablen (sehr selten) bekommen ein kleines g vor der ungarischen Notation (z.B: Var gElemHandle : THandle

Aber über Schreibweisen lässt sich eh stundenlang streiten, aber der Grund dafür das ich dies hier mal darlege liegt einfach darin, dass ich mit diesen Regeln keine solche Probleme wie du sie jetzt hast haben kann. Ich habe immer "f" vor Variablen der Klassen, immer ein "g" vor globalen Variablen und ein "l" vor lokalen Variablen, daher passiert es mir eigentlich nicht das ich eine Variable oder andere Property ausversehen anspreche...

MfG
Muetze1
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#9

Re: Frage zu Memo-Funktionsweise

  Alt 18. Jan 2005, 01:49
Habe schon katastrophalere Source-Codes gesehen. 8)

Zitat von fragme:
Memo.Lines.Strings[MemoLine] := MemoText;
MemoLine := MemoLine +1;
Was ist Memoline ?

Eine neue Zeile erzeugst du nämlich mit:

Memo.Lines.Add ('neue Zeile'); Was soll das Memo machen und was das Stringgrid ?
Gruß
Hansa
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz