AGB  ·  Datenschutz  ·  Impressum  







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

Datenformular Oberfläche

Ein Thema von VkPenguin · begonnen am 7. Okt 2012 · letzter Beitrag vom 11. Okt 2012
Antwort Antwort
Hobby-Programmierer

Registriert seit: 19. Jan 2006
Ort: München
392 Beiträge
 
Delphi XE Starter
 
#1

AW: Datenformular Oberfläche

  Alt 9. Okt 2012, 09:15
Moin...,
versuche mal folgendes:
Delphi-Quellcode:
const tFormat = DT_SINGLELINE or DT_CENTER or DT_VCENTER;
var tText: String;
begin
  with (Sender as TStringGrid) do begin
    tText:= Trim(Cells[ACol, ARow]); // Text der Zelle
    if (gdFixed in State) then begin // fixe Zelle
      // feste Zellen bleiben unberührt
     end // (gdFixed in State)
     else begin // nicht fixe Zellen
      if (gdSelected in State) then begin // markierte Zelle
        Canvas.Brush.Color:= clHighlight; // HintergrundFarbe selektierte Zelle
        Canvas.Font.Color:= clBlack; // Schriftfarbe

       end else begin // normale Zelle
        if Odd(ARow) then // alle ungeraden Zeilen
          Canvas.Brush.Color:= clMoneyGreen // einfärben
         else
          Canvas.Brush.Color:= clInfoBk; //

      end; // <> (gdFixed in State)
      Canvas.FillRect(Rect); // Hintergrund zeichnen
      DrawText(Canvas.Handle, PChar(tText), Length(tText), Rect, tFormat); // Textausgabe
      // formatierte Textausgabe könnte auch über ExtTextOut() erfolgen
    end; // nicht fixe Zellen
  end; // with
end;
Mario
'Lesen Sie schnell, denn nichts ist beständiger als der Wandel im Internet!'
  Mit Zitat antworten Zitat
VkPenguin

Registriert seit: 23. Dez 2011
150 Beiträge
 
Delphi XE7 Architect
 
#2

AW: Datenformular Oberfläche

  Alt 9. Okt 2012, 15:16
Danke Ihr zwei, jetzt hab ichs. Das mit Drawtext war mir einfach entgangen
  Mit Zitat antworten Zitat
VkPenguin

Registriert seit: 23. Dez 2011
150 Beiträge
 
Delphi XE7 Architect
 
#3

AW: Datenformular Oberfläche

  Alt 10. Okt 2012, 20:39
Guten Abend, ich bin es nochmal

Es tut mir leid, dass ich euch schon wieder mit Fragen zu diesem Thema löchere, hatte eigentlich gehofft, jetzt allein weiterzukommen. Aber bei meiner Stringgrid gibt es noch ein Problem, mit dem ich nicht fertig werde. Ich möchte die Eingaben des Nutzers kontrollieren, wenn er eine Zelle Editiert (in manchen Zellen sind beispielsweise nur die Werte 1,2,3 erlaubt). Bisher habe ich das mit SetEditText abgefangen, aber wenn die Zelle noch leer ist und der Benutzer sie gerade erst anklickt kommt eine Fehlermeldung, da die leere Zelle weder den Wert 1 noch 2 oder 3 hat. Ich bräuchte also ein Event, welches erst ausgelöst wird, wenn der Nutzer mit seiner Bearbeitung fertig ist.
Aber es gibt sowohl unterschiedliche Eingabemöglichkeiten - direkt über das Programm, manuell vom Nuter oder STRG+V (Was ich mit OnKeyDown abfange und dann auf alle selektierten Zellen übertrage, damit bin ich auch nicht wirklich zufrieden, es funktioniert manchmal nämlich aus irgendeinem Grund nicht...) - als auch verschiedene Arten, das Editieren zu beenden (Selektion eines anderen Feldes, Tab, Enter, Selektion eines anderen Objekts oder sogar Form/Programms...), dass ich es, egal wie ich es auch versuche, nie schaffe, alle Möglichkeiten sauber und zuverlässig abzufangen.
Ich habe schonmal nach "On Edit" und ähnlichem gesucht, konnte aber leider nicht viel hilfreiches finden. Auf dieser Seite ist von WM_ACTIVATE und WM_KILLFOCUS die rede.... Auf der Suche danach bin ich auf das gestossen; ich glaube, das ist es, was ich suche. Meine bisherigen Versuche damit waren allerdings erfolglos - hat vielleicht jemand einen Tipp oder besseren Lösungsansatz?
  Mit Zitat antworten Zitat
Hobby-Programmierer

Registriert seit: 19. Jan 2006
Ort: München
392 Beiträge
 
Delphi XE Starter
 
#4

AW: Datenformular Oberfläche

  Alt 10. Okt 2012, 21:10
Nabend ...,
der InplaceEditor arbeitet manchmal, sagen wir mal, gewöhnungsbedürftig
Aber ich halte den Ansatz, Eingaben bzw. rein kopierte Strings über den Editor zu filtern, für falsch. Ich würde generell auf den Editor verzichten und zb. bei Doppelklick ein separates 'Eingabefenster' öffnen. In diesem könntest du dich austoben, danach würde ich die gemachten Eingaben prüfen, bearbeiten was auch immer und gleich in die Db wegsichern und erst dann die markierten Zellen schreiben.

Edit: ok, Doppelklick ist natürlich blöd bei Mehrfachauswahl
also solltes du dann ne bestimmte Taste abfangen zum öffnen des Eingabefensters zb. Tab oder zirkumflex oder so.
Mario
'Lesen Sie schnell, denn nichts ist beständiger als der Wandel im Internet!'

Geändert von Hobby-Programmierer (10. Okt 2012 um 21:15 Uhr)
  Mit Zitat antworten Zitat
VkPenguin

Registriert seit: 23. Dez 2011
150 Beiträge
 
Delphi XE7 Architect
 
#5

AW: Datenformular Oberfläche

  Alt 10. Okt 2012, 21:25
Der Plan war aber (Da die Stringgrid sehr groß werden kann), dass man beliebig viele Zellen markieren kann und dann in alle markierten gleichzeitig schreibt/kopiert etc...

Oder hab ich Dich falsch verstanden?

*Edit* Wie meinst du das denn mit dem separatem Eingabefenster? Wenn wirklich ein neues Fenster dafür aufgeht verliert man ja die Übersicht... Außerdem ist es sehr wichtig, dass alles möglichst schnell geht
  Mit Zitat antworten Zitat
Hobby-Programmierer

Registriert seit: 19. Jan 2006
Ort: München
392 Beiträge
 
Delphi XE Starter
 
#6

AW: Datenformular Oberfläche

  Alt 10. Okt 2012, 21:41
Ich glaube du denkst zu kompliziert.
Ich meinte: Du markierst alle zu editierenden Zellen wie bisher, aber statt den InplaceEditor zu benutzen öffnest du ein neues Eingabefenster, machst die Eingabeoperationen und schließt des wieder. Beim schließen wird die Db geschrieben sowie die Eingaben an das Grid weitergereicht.
Dieses besagte Eingabefenster musst du natürlich selbst erstellen, praktisch dein eigener Editor. der Vorteil ist natürlich das du des auf deine Bedürfnisse quasi massschneidern kannst.

Edit: vielleicht könntest du ein Demo von deinem programm kurz hier anhängen. Ich kann mir ehrlich gesagt immer noch net vorstellen wie du die tausende zellen darstellst.
Mario
'Lesen Sie schnell, denn nichts ist beständiger als der Wandel im Internet!'

Geändert von Hobby-Programmierer (10. Okt 2012 um 21:49 Uhr)
  Mit Zitat antworten Zitat
VkPenguin

Registriert seit: 23. Dez 2011
150 Beiträge
 
Delphi XE7 Architect
 
#7

AW: Datenformular Oberfläche

  Alt 10. Okt 2012, 22:27
So, nach ein bisschen basteln funktioniert es jetzt (fast) wie gedacht. Jetzt muss ich es nur noch schaffen, dass die Selektion bei Doppelklick/Enter nicht aufgehoben wird.
Vielen Dank nochmal für Deinen Tipp, dank Dir ist endlich der Groschen gefallen. Manchmal fragt man sich wirklich, wieso man es nicht gleich so gemacht hat

*Edit* Achja. Ich hab für das Eingabefenster ein Edittextfeld umfunktioniert - es klappt auch -, aber wenn ich Enter drücke kommt immer ein Fehlermeldungsgeräusch, das ist etwas seltsam. Ist mir aber schon mehrfach bei Edittexten aufgefallen

Geändert von VkPenguin (10. Okt 2012 um 22:33 Uhr)
  Mit Zitat antworten Zitat
Hansa

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

AW: Datenformular Oberfläche

  Alt 11. Okt 2012, 15:32
Ist das Hauptproblem eigentlich gelöst ? Das waren doch Checkboxen oder ? Soll das im Endeffekt so was wie im Anhang werden ?
Angehängte Grafiken
Dateityp: jpg sgCheckBox.jpg (64,4 KB, 33x aufgerufen)
Gruß
Hansa
  Mit Zitat antworten Zitat
Hobby-Programmierer

Registriert seit: 19. Jan 2006
Ort: München
392 Beiträge
 
Delphi XE Starter
 
#9

AW: Datenformular Oberfläche

  Alt 11. Okt 2012, 17:15
Dachte ich auch anfangs.
...
Ich möchte die Eingaben des Nutzers kontrollieren, wenn er eine Zelle Editiert (in manchen Zellen sind beispielsweise nur die Werte 1,2,3 erlaubt).
Checkboxen machen aber keinen Sinn wenn er auch andere Werte als nur Boolean zulassen möchte.
Vielleicht macht der TE ja mal nen Screenshot oder ein Demo wie er sich das vorstellt bzw wie er das bereits gelöst hat.
Mario
'Lesen Sie schnell, denn nichts ist beständiger als der Wandel im Internet!'
  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 17:42 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